import React, { forwardRef, ForwardRefRenderFunction, isValidElement, } from 'react'; import { Text, View } from 'react-native'; import { Space } from '@xrnjs/ui'; import { useTheme } from '../Theme/Theme'; import { UploaderScreenProps, UploaderRef } from './interface'; import createStyle from './style'; import UploaderBody from './UploaderBody'; import UploaderTitle from './UploaderTitle'; import { isArray } from 'lodash'; const RNUploader: ForwardRefRenderFunction = ( p, ref ) => { const { children, title, titleStyle, titleContainerStyle, labelRight, showIcon = false, required, attachmentType, defaultValue, uploadFileType, accept, value, description, maxCount = 999, renderUploaderBtn, disabled, deleteIcon, showUploadBtn, style, useContainerWidth = true, containerSpacing, actionSheetProps, containerStyle, onPreviewFile, onClickIcon, onShowDemo, onChange, onActionContainerClose, tip, tipStyle, contentStyle, onUpload, onDisabledPress, imgQuality, listType, onDownload, onRemove, beforeUpload, doUpload, onSuccess, onError, errorTip, minSize, maxSize, minSizeErrorTip, maxSizeErrorTip, selectionLimit, subTip, subTipStyle, status, replaceWhenUploaded, } = p; const token = useTheme(); const styles = createStyle(token); const renderDescription = (node: any) => { return isValidElement(node) ? ( node ) : ( {node} ); }; const renderChildern = (node: React.ReactNode) => { if (isArray(node) && node.length > 1) { // 多children 使用横向布局 return ( {node} ); } else { // 单个直接显示 解决横向布局导致的容器宽度获取问题 return node; } }; return ( {title && ( )} {children ? ( renderChildern(children) ) : ( )} {description && renderDescription(description)} ); }; export default forwardRef(RNUploader);