@flatbiz/antd 4.2.37 → 4.2.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/esm/dialog-alert/index.css +1 -1
  2. package/esm/dialog-alert/index.js +1 -1
  3. package/esm/{dialog-alert-0ca83448.js → dialog-alert-96962d07.js} +2 -2
  4. package/esm/{dialog-alert-0ca83448.js.map → dialog-alert-96962d07.js.map} +1 -1
  5. package/esm/dialog-confirm/index.css +1 -1
  6. package/esm/dialog-confirm/index.js +1 -1
  7. package/esm/{dialog-confirm-b289f5ed.js → dialog-confirm-4dacc583.js} +2 -2
  8. package/esm/{dialog-confirm-b289f5ed.js.map → dialog-confirm-4dacc583.js.map} +1 -1
  9. package/esm/dialog-modal/index.css +1 -1
  10. package/esm/dialog-modal/index.js +1 -1
  11. package/esm/dialog-modal-459d2be5.js +3 -0
  12. package/esm/dialog-modal-459d2be5.js.map +1 -0
  13. package/esm/easy-table/index.js +1 -1
  14. package/esm/easy-table/index.js.map +1 -1
  15. package/esm/editable-table/index.js +5 -2
  16. package/esm/editable-table-d3afee03.js +3 -0
  17. package/esm/{editable-table-6bd8df15.js.map → editable-table-d3afee03.js.map} +1 -1
  18. package/esm/form-grid/index.js +1 -1
  19. package/esm/form-grid/index.js.map +1 -1
  20. package/esm/index.js +1 -1
  21. package/esm/selector-wrapper/index.js +1 -1
  22. package/esm/selector-wrapper-defe35d6.js +3 -0
  23. package/esm/selector-wrapper-defe35d6.js.map +1 -0
  24. package/esm/selector-wrapper-search/index.js +1 -1
  25. package/esm/selector-wrapper-search-228c96c5.js +3 -0
  26. package/esm/selector-wrapper-search-228c96c5.js.map +1 -0
  27. package/esm/selector-wrapper-simple/index.js +1 -1
  28. package/esm/selector-wrapper-simple-c51eba69.js +3 -0
  29. package/esm/selector-wrapper-simple-c51eba69.js.map +1 -0
  30. package/esm/simple-layout/index.css +1 -1
  31. package/esm/tree-wrapper/index.js +3 -3
  32. package/esm/tree-wrapper/index.js.map +1 -1
  33. package/esm/types/index.js +1 -0
  34. package/esm/types/index.js.map +1 -1
  35. package/esm/upload-wrapper/index.js +1 -1
  36. package/esm/upload-wrapper-df8a2277.js +3 -0
  37. package/esm/upload-wrapper-df8a2277.js.map +1 -0
  38. package/index.d.ts +109 -92
  39. package/index.js +1 -1
  40. package/package.json +3 -3
  41. package/esm/dialog-modal-225b0fe0.js +0 -3
  42. package/esm/dialog-modal-225b0fe0.js.map +0 -1
  43. package/esm/editable-table-6bd8df15.js +0 -3
  44. package/esm/selector-wrapper-ece722f5.js +0 -3
  45. package/esm/selector-wrapper-ece722f5.js.map +0 -1
  46. package/esm/selector-wrapper-search-aad145b5.js +0 -3
  47. package/esm/selector-wrapper-search-aad145b5.js.map +0 -1
  48. package/esm/selector-wrapper-simple-49384d37.js +0 -3
  49. package/esm/selector-wrapper-simple-49384d37.js.map +0 -1
  50. package/esm/tree-wrapper-85aa72d7.js +0 -3
  51. package/esm/tree-wrapper-85aa72d7.js.map +0 -1
  52. package/esm/upload-wrapper-f20208d6.js +0 -3
  53. package/esm/upload-wrapper-f20208d6.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-wrapper-85aa72d7.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: TRequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TAny, TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport { isUndefinedOrNull, LabelValueItem, treeToArray } from '@flatbiz/utils';\nimport { DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\n\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { isUndefinedOrNull, TAny, toArray, TPlainObject, treeFilter, treeToTiledArray } from '@flatbiz/utils';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, onTreeDrop, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n /** 菜单结构类型 tile/平铺 fold/折叠;默认:fold */\n menuLayoutType?: 'tile' | 'fold';\n /** 菜单触发类型,默认:click */\n menuTriggerType?: 'click' | 'hover';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期,请使用 menuOptions\n * @returns\n * ```\n * menuLayoutType = tile 无效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n\n /**\n * 根据 menuLayoutType 类型赋值\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n // required?: boolean;\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 当前拖拽节点的父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 当前拖拽节点所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n if (initRootExpand && toArray(respData).length) {\n setTreeExpandedKeys([respData?.[0][fieldNames.value]]);\n }\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus('request-success');\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return treeFilter(cloneState(state.treeList || []), (node) => {\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n });\n }\n return list;\n }, [fieldNames.label, searchResultType, state.treeList, treeSearchValue]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n {...menuOptions}\n gap={5}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n\n onDrop: (info) => {\n const { dataList, dragNodeData } = onTreeDrop(originalDataList as TPlainObject[], fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\">\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getExpandedKeys","fieldNames","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","map","_isObject","array2map","list","forEach","treeWrapperValueDeepEqual","value1","value2","object1","object2","diff","dequal","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","children","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","undefined","_parent","tileList","parentId","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","modelKey","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","defaultValueRef","useRef","menuLayoutTypeNew","menuTriggerTypeNew","isMultiple","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","isFirstUseValueRef","_useState3","refreshKey","setRefreshKey","innerOperateValueRef","valueList","useEffectCustom","current","console","log","expandedKeys","getTreeExpandedKeys","Array","from","Set","Date","now","valueIsEmpty","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","warn","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","toArray","Boolean","allState","getState","refresh","newTreeExpandedKeys","includes","targetList","concat","useUpdateEffect","filter","_item$label","prev","mergeList","useImperativeHandle","onClearSelectorList","getTreeDataList","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","temp","push","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","originalDataList","treeFilter","_node$fieldNames$labe","toLowerCase","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","beforeStr","substring","afterStr","slice","_jsxs","className","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_props$menuOptions3","_extends5","stringLabel","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends3","call","_extends4","getMenuOptions","Fragment","DropdownMenuWrapper","menuList","_MoreOutlined","tile","ButtonOperate","gap","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","_onTreeDrop","width","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","multiple","defaultSelectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","defaultProps"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import r from"@ant-design/icons/es/icons/PlusOutlined";import{_ as e,a as i}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{hooks as a}from"@wove/react/cjs/hooks";import{isPlainObject as t}from"@dimjs/lang/cjs/is-plain-object";import{extend as s}from"@dimjs/utils/cjs/extend";import{message as o,Upload as u,Button as l}from"antd";import{useState as d,Fragment as f}from"react";import{flushSync as c}from"react-dom";import{fbaHooks as m}from"./fba-hooks/index.js";import{jsx as p,jsxs as v}from"react/jsx-runtime";var h=["onChange","onUploadError","value"];var g=function r(l){var f=l.onChange,v=l.onUploadError,g=l.value,y=e(l,h);var C=d(),b=C[0],x=C[1];var O=s({uid:"uid",name:"name",url:"url"},l.fieldNames);m.useEffectCustom((function(){var r=(b==null?void 0:b.filter((function(r){return r["status"]==="error"})))||[];var e=(g==null?void 0:g.map((function(r){return{uid:r[O.uid],name:r[O.name],url:r[O.url],status:"done",isOriginal:true}})))||[];if(r.length>0){var i=r.map((function(r){return{uid:r.uid,name:r.name,status:"error",isOriginal:true,response:r["response"]}}));e=e.concat(i)}x(e)}),[O.name,O.uid,O.url,g]);var R=function r(e){var i=[];var n=false;e.forEach((function(r){if(r["isOriginal"]){if(r["status"]!=="error"){var e;i.push((e={},e[O.uid]=r.uid,e[O.name]=r.name,e[O.url]=r.url,e))}}else if(t(r.response)){if(r.response.code==="0000"){var a;var s=r.response.data;var o=(l.onRequestResultAdapter==null?void 0:l.onRequestResultAdapter(s))||s;i.push((a={},a[O.uid]=o[O.uid]||r.uid,a[O.name]=o[O.name]||r.name,a[O.url]=o[O.url],a))}else{n=true;r.status="error";r.response=r.response.message||"上传失败"}}}));if(n){x([].concat(e))}f==null?void 0:f(i)};var T=a.useCallbackRef((function(r){var e=r.fileList;if(r.file.status==="done"){var i=[].concat(r.fileList);var n=i.filter((function(r){return r.status==="done"||r["isOriginal"]}));var a=n.length===i.length;if(a){R(i)}c((function(){return x(i)}));return}else if(r.file.status==="removed"){var t=r.file.uid;var s=g!==undefined?[].concat(g):[];var u=s.findIndex((function(r){var e=r[O.uid];return e===t}));if(u>=0){s.splice(u,1)}f==null?void 0:f(s)}else if(r.file.status==="error"){if(v){v()}else{void o.error("上传操作失败...")}}x([].concat(e));l.onUploadChange==null?void 0:l.onUploadChange(r)}));return p(u,i({},y,{onChange:T,fileList:b,className:n("v-upload-wrapper",y.className),children:y.disabled?null:p(j,{listType:y.listType,children:l.children})}))};var j=function e(i){if(i.children)return p(f,{children:i.children});if(i.listType==="picture-card"){return v("div",{children:[p(r,{}),p("div",{style:{marginTop:8},children:"上传图片"})]})}if(i.listType==="picture"){return p(l,{type:"primary",ghost:true,children:"选择图片上传"})}return p(l,{type:"primary",ghost:true,children:"选择文件上传"})};export{g as U};
3
- //# sourceMappingURL=upload-wrapper-f20208d6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload-wrapper-f20208d6.js","sources":["@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Upload, UploadProps } from 'antd';\nimport { UploadChangeParam } from 'antd/lib/upload';\nimport { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport { Fragment, ReactNode, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type UploadWrapperFileItem = {\n uid: string;\n name: string;\n url?: string;\n};\n\nexport type UploadWrapperProps<T extends TPlainObject = TPlainObject> = {\n value?: T[];\n onChange?: (value?: T[]) => void;\n onUploadError?: (message?: string) => void;\n onUploadChange?: (info: UploadChangeParam<UploadFile>) => void;\n /**\n * 属性映射\n */\n fieldNames?: {\n uid: string;\n name?: string;\n url?: string;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * 1. 可通过配置children替换默认上传触发布局\n * 2. 接口返回结构:\n * formData上传接口返回值\n * {\n * code: '0000',\n * data: {\n * uid: '唯一值,可使用fileKey值'\n * name: '文件名称'\n * url: '预览地址'\n * }\n * }\n * 3. 如果接口返回的不是上面的字段名称,可通过fieldNames配置接口返回字段名称映射\n *\n * 4. 最佳使用方式,与Form结合使用\n * <Form.Item name=\"attachmentList\" label=\"附件\">\n * <UploadWrapper action={uploadUrl} />\n * </Form.Item>\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const { onChange, onUploadError, value, ...otherProps } = props;\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n },\n props.fieldNames,\n ) as Required<UploadWrapperFileItem>;\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList =\n value?.map((item) => {\n return {\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n status: 'done',\n isOriginal: true,\n };\n }) || [];\n if (errorList.length > 0) {\n const newErrorList = errorList.map((item) => {\n return {\n uid: item.uid,\n name: item.name,\n status: 'error',\n isOriginal: true,\n response: item['response'],\n };\n }) as TAny[];\n newList = newList.concat(newErrorList);\n }\n setUploadList(newList);\n }, [fieldNames.name, fieldNames.uid, fieldNames.url, value]);\n\n const handleResponse = (fileList: UploadFile<TAny>[]) => {\n const newFileList: TAny[] = [];\n let hasError = false;\n fileList.forEach((item) => {\n if (item['isOriginal']) {\n if (item['status'] !== 'error') {\n newFileList.push({\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n });\n }\n } else if (isPlainObject(item.response)) {\n if (item.response.code === '0000') {\n const respData = item.response.data;\n const result = (props.onRequestResultAdapter?.(respData) || respData) as TPlainObject;\n newFileList.push({\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n });\n } else {\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n }\n }\n });\n if (hasError) {\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n }\n onChange?.(newFileList);\n };\n\n const onUploadChange = hooks.useCallbackRef((info) => {\n const fileList = info.fileList as TPlainObject[];\n if (info.file.status === 'done') {\n const newFileList = [...info.fileList];\n const donwList = newFileList.filter((item) => item.status === 'done' || item['isOriginal']);\n\n const allDone = donwList.length === newFileList.length;\n if (allDone) {\n handleResponse(newFileList);\n }\n flushSync(() => setUploadList(newFileList));\n return;\n } else if (info.file.status === 'removed') {\n const uid = info.file.uid;\n const targetList = value !== undefined ? [...value] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid];\n return tempUid === uid;\n });\n if (targetIndex >= 0) {\n targetList.splice(targetIndex, 1);\n }\n onChange?.(targetList);\n } else if (info.file.status === 'error') {\n if (onUploadError) {\n onUploadError();\n } else {\n void message.error('上传操作失败...');\n }\n }\n // https://github.com/ant-design/ant-design/issues/2423\n setUploadList([...fileList] as UploadWrapperFileItem[]);\n props.onUploadChange?.(info);\n });\n\n return (\n <Upload\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled ? null : (\n <UploadTrigger listType={otherProps.listType}>{props.children}</UploadTrigger>\n )}\n </Upload>\n );\n};\n\nconst UploadTrigger = (props: { listType?: UploadListType; children?: ReactNode | ReactNode[] }) => {\n if (props.children) return <Fragment>{props.children}</Fragment>;\n if (props.listType === 'picture-card') {\n return (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>上传图片</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n 选择图片上传\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n 选择文件上传\n </Button>\n );\n};\n"],"names":["UploadWrapper","props","onChange","onUploadError","value","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","uploadList","setUploadList","fieldNames","_extend","uid","name","url","fbaHooks","useEffectCustom","errorList","filter","item","newList","map","status","isOriginal","length","newErrorList","response","concat","handleResponse","fileList","newFileList","hasError","forEach","_newFileList$push","push","_isPlainObject","code","_newFileList$push2","respData","data","result","onRequestResultAdapter","message","onUploadChange","_hooks","useCallbackRef","info","file","donwList","allDone","flushSync","targetList","undefined","targetIndex","findIndex","tempUid","splice","error","_jsx","Upload","_extends","className","_classNames","children","disabled","UploadTrigger","listType","Fragment","_jsxs","_PlusOutlined","style","marginTop","Button","type","ghost"],"mappings":"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"}