import React, { useState } from 'react'; import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import { renderTextLikeJSX } from '../../core/helpers'; import { IconXDoubt1, IconXAbnormalprompt1, } from '../../icons'; import ShouldRender from '../ShouldRender'; import { FieldProps } from './interface'; import createStyle from './styles/field.style'; import { useLocale } from '../Locale/locale'; import { useTheme } from '../Theme'; import NoticeBar from '../NoticeBar'; import Modal from '../Modal'; const Field: React.FC = ({ style, label, labelWrapperStyle, labelContainerStyle, labelStyle, message, messageWrapperStyle, error, errorMessage, showErrorIcon = true, showDividerLine, showErrorDividerLine, showQuestionIcon = false, onClickQuestionIcon, layout = 'vertical', children, containerStyle, prefix, suffix, requiredMark, notice, focusComponent, tooltip, tooltipTitle, confirmButtonText, hideInternalMessage = false, }) => { const local = useLocale(); const token = useTheme(); const styles = createStyle(token); const [visible, setVisible] = useState(false); const renderErrorIcon = () => ( ); const renderMessage = () => { return ( <> {renderErrorIcon()} {renderTextLikeJSX( errorMessage, StyleSheet.flatten([styles.messageText, styles.messageTextError]) )} {renderErrorIcon()} {renderTextLikeJSX( message, StyleSheet.flatten([ styles.messageText, error && styles.messageTextError, ]) )} ); }; const renderLabel = () => { return ( {prefix} {renderTextLikeJSX( label, StyleSheet.flatten([styles.labelText, labelStyle]) )} {local.Field.optional} {/* 按压效果完善 */} { if (onClickQuestionIcon) { onClickQuestionIcon?.(e); } else if (tooltip) { setVisible(true); } }} style={StyleSheet.flatten([styles.questionIcon])} > { setVisible(false); }} onPressConfirm={() => { setVisible(false); }} /> {suffix} ); }; return ( {renderLabel()} {focusComponent} {React.isValidElement(children) ? React.cloneElement(children, { ...{ renderMessage }, }) : children} {!hideInternalMessage && renderMessage()} ); }; export default Field;