@flatbiz/antd 4.5.54 → 4.5.56

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 (250) hide show
  1. package/esm/ace-editor-groovy/index.js +1 -1
  2. package/esm/ace-editor-groovy/index.js.map +1 -1
  3. package/esm/ace-editor-java/index.js +1 -1
  4. package/esm/ace-editor-java/index.js.map +1 -1
  5. package/esm/ace-editor-json/index.js +1 -1
  6. package/esm/ace-editor-json/index.js.map +1 -1
  7. package/esm/ace-editor-mysql/index.js +1 -1
  8. package/esm/ace-editor-mysql/index.js.map +1 -1
  9. package/esm/ace-editor-xml/index.js +1 -1
  10. package/esm/ace-editor-xml/index.js.map +1 -1
  11. package/esm/anchor-steps/index.js +1 -1
  12. package/esm/anchor-steps/index.js.map +1 -1
  13. package/esm/bootstrap/index.js +1 -1
  14. package/esm/bootstrap/index.js.map +1 -1
  15. package/esm/box-grid/index.js +1 -1
  16. package/esm/box-grid/index.js.map +1 -1
  17. package/esm/button-operate/index.js +1 -1
  18. package/esm/button-operate/index.js.map +1 -1
  19. package/esm/button-wrapper/index.js +1 -1
  20. package/esm/button-wrapper/index.js.map +1 -1
  21. package/esm/card-layout/index.js +1 -1
  22. package/esm/card-layout/index.js.map +1 -1
  23. package/esm/cascader-wrapper/index.css +1 -1
  24. package/esm/cascader-wrapper/index.js +1 -1
  25. package/esm/cascader-wrapper/index.js.map +1 -1
  26. package/esm/check-list/index.js +1 -1
  27. package/esm/check-list/index.js.map +1 -1
  28. package/esm/checkbox-wrapper/index.js +1 -1
  29. package/esm/checkbox-wrapper/index.js.map +1 -1
  30. package/esm/code-render/index.css +1 -0
  31. package/esm/code-render/index.js +5 -0
  32. package/esm/code-render/index.js.map +1 -0
  33. package/esm/color-picker-wrapper/index.css +1 -1
  34. package/esm/color-picker-wrapper/index.js +1 -1
  35. package/esm/color-picker-wrapper/index.js.map +1 -1
  36. package/esm/config-provider-wrapper/index.js +1 -1
  37. package/esm/copy-wrapper/index.js +1 -1
  38. package/esm/copy-wrapper/index.js.map +1 -1
  39. package/esm/date-picker-wrapper/index.js +1 -1
  40. package/esm/date-picker-wrapper/index.js.map +1 -1
  41. package/esm/date-range-picker-wrapper/index.js +1 -1
  42. package/esm/date-range-picker-wrapper/index.js.map +1 -1
  43. package/esm/date-range-picker-wrapper-form-item/index.js +1 -1
  44. package/esm/date-range-picker-wrapper-form-item/index.js.map +1 -1
  45. package/esm/delete-node/index.js +1 -1
  46. package/esm/delete-node/index.js.map +1 -1
  47. package/esm/dialog-alert/index.js +1 -1
  48. package/esm/dialog-confirm/index.js +1 -1
  49. package/esm/dialog-drag-modal/index.js +1 -1
  50. package/esm/dialog-drag-modal/index.js.map +1 -1
  51. package/esm/dialog-drawer/index.js +1 -1
  52. package/esm/dialog-drawer/index.js.map +1 -1
  53. package/esm/dialog-drawer-content/index.js +1 -1
  54. package/esm/dialog-drawer-content/index.js.map +1 -1
  55. package/esm/dialog-loading/index.js +1 -1
  56. package/esm/dialog-loading/index.js.map +1 -1
  57. package/esm/dialog-modal/index.js +1 -1
  58. package/esm/dialog-modal/index.js.map +1 -1
  59. package/esm/dialog-preview-image/index.js +1 -1
  60. package/esm/dialog-preview-image/index.js.map +1 -1
  61. package/esm/drag-collapse/index.js +1 -1
  62. package/esm/drag-collapse/index.js.map +1 -1
  63. package/esm/drag-collapse-form-list/index.js +1 -1
  64. package/esm/drag-collapse-form-list/index.js.map +1 -1
  65. package/esm/drag-editable-card/index.js +1 -1
  66. package/esm/drag-editable-card/index.js.map +1 -1
  67. package/esm/drag-editable-table/index.js +1 -1
  68. package/esm/drag-editable-table/index.js.map +1 -1
  69. package/esm/drag-editable-table-pro/index.js +1 -1
  70. package/esm/drag-editable-table-pro/index.js.map +1 -1
  71. package/esm/drag-form-list/index.js +1 -1
  72. package/esm/drag-form-list/index.js.map +1 -1
  73. package/esm/drag-table/index.js +1 -1
  74. package/esm/drag-table/index.js.map +1 -1
  75. package/esm/drawer-wrapper/index.js +1 -1
  76. package/esm/drawer-wrapper/index.js.map +1 -1
  77. package/esm/dropdown-menu-wrapper/index.js +1 -1
  78. package/esm/dropdown-menu-wrapper/index.js.map +1 -1
  79. package/esm/easy-form/index.js +1 -1
  80. package/esm/easy-form/index.js.map +1 -1
  81. package/esm/easy-table/index.js +1 -1
  82. package/esm/easy-table/index.js.map +1 -1
  83. package/esm/editable-card/index.js +1 -1
  84. package/esm/editable-card/index.js.map +1 -1
  85. package/esm/editable-field/index.js +1 -1
  86. package/esm/editable-field/index.js.map +1 -1
  87. package/esm/editable-table/index.js +1 -1
  88. package/esm/editable-table/index.js.map +1 -1
  89. package/esm/editable-table-pro/index.js +1 -1
  90. package/esm/editable-table-pro/index.js.map +1 -1
  91. package/esm/editor-wrapper/index.js +1 -1
  92. package/esm/editor-wrapper/index.js.map +1 -1
  93. package/esm/fba-app/index.js +1 -1
  94. package/esm/fba-app/index.js.map +1 -1
  95. package/esm/fba-hooks/index.js +1 -1
  96. package/esm/fba-hooks/index.js.map +1 -1
  97. package/esm/fba-utils/index.js +1 -1
  98. package/esm/fba-utils/index.js.map +1 -1
  99. package/esm/file-export/index.js +1 -1
  100. package/esm/file-export/index.js.map +1 -1
  101. package/esm/file-import/index.js +1 -1
  102. package/esm/file-import/index.js.map +1 -1
  103. package/esm/file-select/index.js +1 -1
  104. package/esm/file-select/index.js.map +1 -1
  105. package/esm/flex-layout/index.js +1 -1
  106. package/esm/flex-layout/index.js.map +1 -1
  107. package/esm/form-grid/index.js +1 -1
  108. package/esm/form-grid/index.js.map +1 -1
  109. package/esm/form-item-group/index.js +1 -1
  110. package/esm/form-item-group/index.js.map +1 -1
  111. package/esm/form-item-text/index.js +1 -1
  112. package/esm/form-item-text/index.js.map +1 -1
  113. package/esm/form-item-wrapper/index.js +1 -1
  114. package/esm/form-item-wrapper/index.js.map +1 -1
  115. package/esm/form-list-wrapper/index.js +1 -1
  116. package/esm/form-list-wrapper/index.js.map +1 -1
  117. package/esm/form-wrapper/index.js +1 -1
  118. package/esm/form-wrapper/index.js.map +1 -1
  119. package/esm/full-screen/index.js +1 -1
  120. package/esm/full-screen/index.js.map +1 -1
  121. package/esm/icon-wrapper/index.js +1 -1
  122. package/esm/icon-wrapper/index.js.map +1 -1
  123. package/esm/index-636a568e.js +8 -0
  124. package/esm/index-636a568e.js.map +1 -0
  125. package/esm/{index-83bede1b.js → index-853b36e6.js} +2 -2
  126. package/esm/{index-83bede1b.js.map → index-853b36e6.js.map} +1 -1
  127. package/esm/index.js +2 -2
  128. package/esm/input-search-wrapper/index.js +1 -1
  129. package/esm/input-search-wrapper/index.js.map +1 -1
  130. package/esm/input-text-area-wrapper/index.js +1 -1
  131. package/esm/input-text-area-wrapper/index.js.map +1 -1
  132. package/esm/input-wrapper/index.js +1 -1
  133. package/esm/input-wrapper/index.js.map +1 -1
  134. package/esm/json-editor/index.js +1 -1
  135. package/esm/json-editor/index.js.map +1 -1
  136. package/esm/label-value-layout/index.js +1 -1
  137. package/esm/label-value-layout/index.js.map +1 -1
  138. package/esm/label-value-render/index.js +1 -1
  139. package/esm/label-value-render/index.js.map +1 -1
  140. package/esm/local-loading/index.js +1 -1
  141. package/esm/local-loading/index.js.map +1 -1
  142. package/esm/mention-editor/index.js +1 -1
  143. package/esm/mention-editor/index.js.map +1 -1
  144. package/esm/mentions-wrapper/index.js +1 -1
  145. package/esm/mentions-wrapper/index.js.map +1 -1
  146. package/esm/modal-action/index.js +1 -1
  147. package/esm/modal-action/index.js.map +1 -1
  148. package/esm/modal-wrapper/index.js +1 -1
  149. package/esm/modal-wrapper/index.js.map +1 -1
  150. package/esm/number-range-form-item/index.js +1 -1
  151. package/esm/number-range-form-item/index.js.map +1 -1
  152. package/esm/pdf/index.js +1 -1
  153. package/esm/pdf/index.js.map +1 -1
  154. package/esm/pdf-preview/index.js +1 -1
  155. package/esm/pdf-preview/index.js.map +1 -1
  156. package/esm/radio-group-wrapper/index.js +1 -1
  157. package/esm/radio-group-wrapper/index.js.map +1 -1
  158. package/esm/relation-tree/index.js +1 -1
  159. package/esm/relation-tree/index.js.map +1 -1
  160. package/esm/request-status/index.css +1 -1
  161. package/esm/request-status/index.js +2 -1
  162. package/esm/request-status/index.js.map +1 -1
  163. package/esm/resizable-drawer/index.js +1 -6
  164. package/esm/resizable-drawer/index.js.map +1 -1
  165. package/esm/rich-text-editor/index.js +1 -1
  166. package/esm/rich-text-editor/index.js.map +1 -1
  167. package/esm/rich-text-viewer/index.js +1 -1
  168. package/esm/rich-text-viewer/index.js.map +1 -1
  169. package/esm/roll-location-center/index.js +1 -1
  170. package/esm/roll-location-center/index.js.map +1 -1
  171. package/esm/roll-location-in-view/index.js +1 -1
  172. package/esm/roll-location-in-view/index.js.map +1 -1
  173. package/esm/rule-describe/index.js +1 -1
  174. package/esm/rule-describe/index.js.map +1 -1
  175. package/esm/search-form/index.js +1 -1
  176. package/esm/search-form/index.js.map +1 -1
  177. package/esm/search-menu/index.js +1 -1
  178. package/esm/search-menu/index.js.map +1 -1
  179. package/esm/selector-wrapper/index.css +1 -1
  180. package/esm/selector-wrapper/index.js +1 -1
  181. package/esm/selector-wrapper/index.js.map +1 -1
  182. package/esm/selector-wrapper-search/index.js +1 -1
  183. package/esm/selector-wrapper-search/index.js.map +1 -1
  184. package/esm/selector-wrapper-simple/index.js +1 -1
  185. package/esm/selector-wrapper-simple/index.js.map +1 -1
  186. package/esm/simple-layout/index.js +1 -1
  187. package/esm/simple-layout/index.js.map +1 -1
  188. package/esm/sms-count-down/index.js +1 -1
  189. package/esm/sms-count-down/index.js.map +1 -1
  190. package/esm/split-wrapper/index.js +1 -1
  191. package/esm/split-wrapper/index.js.map +1 -1
  192. package/esm/styles/index.css +1 -1
  193. package/esm/svg-http-view/index.js +1 -1
  194. package/esm/svg-http-view/index.js.map +1 -1
  195. package/esm/switch-confirm-wrapper/index.js +1 -1
  196. package/esm/switch-confirm-wrapper/index.js.map +1 -1
  197. package/esm/switch-wrapper/index.js +1 -1
  198. package/esm/switch-wrapper/index.js.map +1 -1
  199. package/esm/table-cell-render/index.js +1 -1
  200. package/esm/table-cell-render/index.js.map +1 -1
  201. package/esm/table-scrollbar/index.js +1 -1
  202. package/esm/table-scrollbar/index.js.map +1 -1
  203. package/esm/tabs-sticky/index.js +1 -1
  204. package/esm/tabs-sticky/index.js.map +1 -1
  205. package/esm/tabs-wrapper/index.js +1 -1
  206. package/esm/tabs-wrapper/index.js.map +1 -1
  207. package/esm/tag-group/index.js +1 -1
  208. package/esm/tag-group/index.js.map +1 -1
  209. package/esm/tag-list-render/index.js +1 -1
  210. package/esm/tag-list-render/index.js.map +1 -1
  211. package/esm/tag-list-select/index.js +1 -1
  212. package/esm/tag-list-select/index.js.map +1 -1
  213. package/esm/tag-wrapper/index.js +1 -1
  214. package/esm/tag-wrapper/index.js.map +1 -1
  215. package/esm/text-css-ellipsis/index.js +1 -1
  216. package/esm/text-css-ellipsis/index.js.map +1 -1
  217. package/esm/text-overflow/index.js +1 -1
  218. package/esm/text-overflow/index.js.map +1 -1
  219. package/esm/text-overflow-render/index.js +1 -1
  220. package/esm/text-symbol-wrapper/index.js +1 -1
  221. package/esm/text-symbol-wrapper/index.js.map +1 -1
  222. package/esm/time-ea73b2fb.js +3 -0
  223. package/esm/{time-53b3f55f.js.map → time-ea73b2fb.js.map} +1 -1
  224. package/esm/time-picker-wrapper/index.js +1 -1
  225. package/esm/time-picker-wrapper/index.js.map +1 -1
  226. package/esm/time-range-picker-wrapper/index.js +1 -1
  227. package/esm/time-range-picker-wrapper/index.js.map +1 -1
  228. package/esm/time-range-picker-wrapper-form-item/index.js +1 -1
  229. package/esm/time-range-picker-wrapper-form-item/index.js.map +1 -1
  230. package/esm/tree-modal/index.js +1 -1
  231. package/esm/tree-modal/index.js.map +1 -1
  232. package/esm/tree-modal-selector/index.js +1 -1
  233. package/esm/tree-modal-selector/index.js.map +1 -1
  234. package/esm/tree-selector-wrapper/index.js +1 -1
  235. package/esm/tree-selector-wrapper/index.js.map +1 -1
  236. package/esm/tree-wrapper/index.js +2 -2
  237. package/esm/tree-wrapper/index.js.map +1 -1
  238. package/esm/upload-wrapper/index.js +1 -1
  239. package/esm/upload-wrapper/index.js.map +1 -1
  240. package/esm/use-responsive-point-1e6d93d9.js +3 -0
  241. package/esm/{use-responsive-point-21b8c601.js.map → use-responsive-point-1e6d93d9.js.map} +1 -1
  242. package/esm/x-mind-preview/index.js +1 -1
  243. package/esm/x-mind-preview/index.js.map +1 -1
  244. package/index.d.ts +51 -28
  245. package/package.json +4 -5
  246. package/esm/ai-search/index.css +0 -0
  247. package/esm/ai-search/index.js +0 -11
  248. package/esm/ai-search/index.js.map +0 -1
  249. package/esm/time-53b3f55f.js +0 -3
  250. package/esm/use-responsive-point-21b8c601.js +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\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 treeTiledArrayMap: {},\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.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[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 = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\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 { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\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, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\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 return dequal(object1, object2);\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\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport {\n dom,\n getUuid,\n isUndefinedOrNull,\n toArray,\n treeFilter,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\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 './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type 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 | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /**\n * 设置请求唯一值\n * ```\n * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据\n * ```\n */\n modelKey?: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\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 /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\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 * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n getTreeTiledArray: () => TPlainObject[];\n getTreeTiledArrayMap: () => TPlainObject;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n onRefresh: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\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 onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n\n const forceUpdate = hooks.useForceUpdate();\n\n const modelKeyInner = useMemo(() => {\n return modelKey || getUuid();\n }, [modelKey]);\n\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKeyInner).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${modelKeyInner}`;\n const searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (\n responseFirstRef.current &&\n labelInValue &&\n executeOnChangeInRenderFirstValue &&\n valueList.length > 0\n ) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n valueList.forEach((item) => {\n const target = state.treeTiledArrayMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNames.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNames.value],\n });\n }\n });\n if (checkable) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n if (responseFirstRef.current && valueList.length === 0) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (valueList.length > 0) {\n responseFirstRef.current = false;\n if (innerValueListRef.current) {\n if (!compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n } else {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n // 当 valueList 为空时,不去清除treeExpandedKeys数据\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\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 void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKeyInner).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\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({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (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 targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n getTreeTiledArray: () => state.treeTiledArray,\n getTreeTiledArrayMap: () => state.treeTiledArrayMap,\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n onRefresh: () => {\n forceUpdate();\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\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 const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\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 && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\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 const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\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 props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\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: TAny) {\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 const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\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\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\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 {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\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 onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n let treeExpandedTarget = false;\n\n if (props.loadDataFlag) {\n treeExpandedTarget = treeExpandedKeys.includes(value);\n } else {\n const target = state.treeTiledArrayMap[value];\n if (!target?.[fieldNames.children]?.length) {\n return;\n }\n treeExpandedTarget = treeExpandedKeys.includes(value);\n }\n\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\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\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\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 {...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 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\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: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","forceUpdate","_hooks","useForceUpdate","modelKeyInner","useMemo","getUuid","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","originalList","_dataList$push","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","getTreeTiledArray","getTreeTiledArrayMap","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onRefresh","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","_target$fieldNames$ch","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\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 treeTiledArrayMap: {},\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.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[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 = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\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 { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\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, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\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 return dequal(object1, object2);\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\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport { dequal } from 'dequal';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport {\n dom,\n getUuid,\n isUndefinedOrNull,\n toArray,\n treeFilter,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\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 './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type 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 | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /**\n * 设置请求唯一值\n * ```\n * 1. 设置后,如果请求入参不变,不会重复请求接口,直接使用上次缓存数据\n * ```\n */\n modelKey?: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\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 /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\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 * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n getTreeTiledArray: () => TPlainObject[];\n getTreeTiledArrayMap: () => TPlainObject;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n onRefresh: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\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 onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n\n const forceUpdate = hooks.useForceUpdate();\n\n const modelKeyInner = useMemo(() => {\n return modelKey || getUuid();\n }, [modelKey]);\n\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKeyInner).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${modelKeyInner}`;\n const searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (\n responseFirstRef.current &&\n labelInValue &&\n executeOnChangeInRenderFirstValue &&\n valueList.length > 0\n ) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n valueList.forEach((item) => {\n const target = state.treeTiledArrayMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNames.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNames.value],\n });\n }\n });\n if (checkable) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n if (responseFirstRef.current && valueList.length === 0) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (valueList.length > 0) {\n responseFirstRef.current = false;\n if (innerValueListRef.current) {\n if (!compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n } else {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n // 当 valueList 为空时,不去清除treeExpandedKeys数据\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\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 void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKeyInner).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\n }\n },\n newEffectDependencyList,\n dequal,\n );\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({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (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 targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n getTreeTiledArray: () => state.treeTiledArray,\n getTreeTiledArrayMap: () => state.treeTiledArrayMap,\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n onRefresh: () => {\n forceUpdate();\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\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 const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\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 && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\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 const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\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 props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\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: TAny) {\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 const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\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\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\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 {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\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 onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n let treeExpandedTarget = false;\n\n if (props.loadDataFlag) {\n treeExpandedTarget = treeExpandedKeys.includes(value);\n } else {\n const target = state.treeTiledArrayMap[value];\n if (!target?.[fieldNames.children]?.length) {\n return;\n }\n treeExpandedTarget = treeExpandedKeys.includes(value);\n }\n\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\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\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\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 {...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 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\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: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","forceUpdate","_hooks","useForceUpdate","modelKeyInner","useMemo","getUuid","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","originalList","_dataList$push","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","useCustomCompareEffect","allState","dequal","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","getTreeTiledArray","getTreeTiledArrayMap","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onRefresh","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","_target$fieldNames$ch","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
@@ -6,5 +6,5 @@ import './../types/index.css';
6
6
  import './../fba-utils/index.css';
7
7
  import './index.css';
8
8
  /*! @flatjs/forge MIT @flatbiz/antd */
9
- import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{a as n,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPlainObject as a}from"@dimjs/lang/cjs/is-plain-object";import{extend as s}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as o,toArray as l,openNewWindow as u}from"@flatbiz/utils";import{message as d,Upload as c,Image as p,Button as f}from"antd";import{useState as m,useMemo as v,Fragment as g,cloneElement as h}from"react";import{flushSync as j}from"react-dom";import{ButtonWrapper as x}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsxs as w,jsx as C}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";var b=function e(r){return new Promise((function(e,i){var n=new FileReader;n.readAsDataURL(r);n.onload=function(){return e(n.result)};n.onerror=function(e){return i(e)}}))};var z=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate"];var O=function e(f){var O=f.onChange,T=f.onUploadError,L=f.value,k=f.triggerText,D=f.limitHidden,R=f.autoSubmit,U=f.imagePreviewSwitch,N=f.imagePreviewAccept,S=f.extraOperate,A=n(f,z);var E=o(N)?["png","jpg","jpeg","gif","heic","heif"]:N;var F=m(),_=F[0],H=F[1];var q=m(),B=q[0],I=q[1];var Y=s({uid:"uid",name:"name",url:"url",size:"size"},f.fieldNames);var M=v((function(){return o(L)?undefined:l(L)}),[L]);y.useEffectCustom((function(){var e=(B==null?void 0:B.filter((function(e){return e["status"]==="error"})))||[];var r=[];M==null||M.forEach((function(e){if(e["lastModified"]){r.push(e)}else{r.push({uid:e[Y.uid],name:e[Y.name],url:e[Y.url],size:e[Y.size],responseData:e["responseData"],status:"done",isOriginal:true})}}));if(e.length>0){var i=e.map((function(e){return{uid:e.uid,name:e.name,status:"error",isOriginal:true,response:e["response"]}}));r=r.concat(i)}I(r)}),[Y.name,Y.uid,Y.url,M]);var V=function e(r){var i=[];var n=false;r.forEach((function(e){if(e["isOriginal"]){if(e["status"]!=="error"){var r;var s=(r={},r[Y.uid]=e.uid,r[Y.name]=e.name,r[Y.url]=e.url,r);if(!o(e.size)){s[Y.size]=e.size}if(e["responseData"]){s.responseData=e["responseData"]}i.push(s)}}else if(a(e.response)){if(e.response.code==="0000"){var l;var u=e.response.data;var c=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(u))||u;var p=(l={},l[Y.uid]=c[Y.uid]||e.uid,l[Y.name]=c[Y.name]||e.name,l[Y.url]=c[Y.url],l);if(!o(c[Y.size])){p[Y.size]=c[Y.size]}i.push(t({},p,{responseData:u}))}else{var m=e.response.message||"上传失败";n=true;e.status="error";e.response=e.response.message||"上传失败";if(T){T==null||T(m)}else{void d.error("上传操作失败...")}}}}));if(n){I([].concat(r))}O==null||O(i)};var G=i.useCallbackRef((function(e){var r=e.fileList;if(e.file.status==="done"){var i=[].concat(e.fileList);var n=i.filter((function(e){return e.status==="done"||e["isOriginal"]}));var t=n.length===i.length;if(t){V(i)}j((function(){return I(i)}));return}else if(e.file.status==="removed"){var a=e.file.uid;var s=M!==undefined?[].concat(M):[];var o=s.findIndex((function(e){var r=e[Y.uid]||e.uid;return r===a}));if(o>=0){s.splice(o,1)}O==null||O(s)}else if(e.file.status==="error"){if(T){T()}else{void d.error("上传操作失败...")}}I([].concat(r));f.onUploadChange==null||f.onUploadChange(e)}));var J=v((function(){if(A.maxCount===undefined||!D)return false;if(A.maxCount===0)return true;if(B&&B.length>=A.maxCount)return true;return false}),[D,A.maxCount,B]);var K=function e(r,i){if(R===false){var n=A.maxCount;var t=[].concat(M||[],i);var a=[].concat(B||[],i);if(n!==undefined&&n!==null){if(t.length>n){t=t.slice(t.length-n);a=a.slice(a.length-n)}}I(a);f.onChange==null||f.onChange(t);return false}return true};var Q=function e(r){return new Promise((function(e,i){var n,t,a;n=r.name||"";t=n.slice(n.lastIndexOf(".")+1);a=E==null?void 0:E.find((function(e){return e.toLocaleLowerCase()===t.toLocaleLowerCase()}));if(a){if(!r.url&&!r.preview){return Promise.resolve(b(r.originFileObj)).then(function(e){try{r.preview=e;return o.call(this)}catch(e){return i(e)}}.bind(this),i)}function o(){H(r.url||r.preview);return s.call(this)}return o.call(this)}else{u(r.url);return s.call(this)}function s(){return e()}}))};return w(g,{children:[C(c,t({beforeUpload:K,onPreview:U?Q:undefined,showUploadList:true,itemRender:function e(i,n,t){if(!S||!S.length)return i;var a=(A.disabled?1:2)+"-"+S.length;return C("div",{className:r("v-upload-list-item-actions-wrapper","v-upload-list-item-extra-actions-"+a),style:{height:"100%"},children:h(i,{children:[i.props.children,C("div",{className:"v-upload-list-item-extra-actions",children:S.map((function(e,r){return C(x,{size:"small",type:"text",icon:e.icon,onClick:e.onClick.bind(null,n,t)},r)}))},"extra-actions")].filter(Boolean)})})}},A,{onChange:G,fileList:B,className:r("v-upload-wrapper",A.className),children:A.disabled||J?null:C(P,{triggerText:k,listType:A.listType,children:f.children})})),_?C(p,{wrapperStyle:{display:"none"},preview:{visible:!!_,onVisibleChange:function e(){return H(undefined)},afterOpenChange:function e(r){return!r&&H("")}},src:_}):null]})};var P=function r(i){if(i.children)return C(g,{children:i.children});if(i.listType==="picture-card"){return w("div",{children:[C(e,{}),C("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{O as UploadWrapper};
9
+ import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as i}from"@wove/react/cjs/hooks";import{a as n,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{isPlainObject as a}from"@dimjs/lang/cjs/is-plain-object";import{extend as s}from"@dimjs/utils/cjs/extend";import{isUndefinedOrNull as o,toArray as l,openNewWindow as u}from"@flatbiz/utils";import{message as d,Upload as c,Image as p,Button as f}from"antd";import{useState as m,useMemo as v,Fragment as g,cloneElement as h}from"react";import{flushSync as j}from"react-dom";import{ButtonWrapper as x}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsxs as w,jsx as C}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-853b36e6.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var b=function e(r){return new Promise(function(e,i){var n=new FileReader;n.readAsDataURL(r);n.onload=function(){return e(n.result)};n.onerror=function(e){return i(e)}})};var z=["onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate"];var O=function e(f){var O=f.onChange,T=f.onUploadError,L=f.value,k=f.triggerText,D=f.limitHidden,R=f.autoSubmit,U=f.imagePreviewSwitch,N=f.imagePreviewAccept,S=f.extraOperate,A=n(f,z);var E=o(N)?["png","jpg","jpeg","gif","heic","heif"]:N;var F=m(),_=F[0],H=F[1];var q=m(),B=q[0],I=q[1];var Y=s({uid:"uid",name:"name",url:"url",size:"size"},f.fieldNames);var M=v(function(){return o(L)?undefined:l(L)},[L]);y.useEffectCustom(function(){var e=(B==null?void 0:B.filter(function(e){return e["status"]==="error"}))||[];var r=[];M==null||M.forEach(function(e){if(e["lastModified"]){r.push(e)}else{r.push({uid:e[Y.uid],name:e[Y.name],url:e[Y.url],size:e[Y.size],responseData:e["responseData"],status:"done",isOriginal:true})}});if(e.length>0){var i=e.map(function(e){return{uid:e.uid,name:e.name,status:"error",isOriginal:true,response:e["response"]}});r=r.concat(i)}I(r)},[Y.name,Y.uid,Y.url,M]);var V=function e(r){var i=[];var n=false;r.forEach(function(e){if(e["isOriginal"]){if(e["status"]!=="error"){var r;var s=(r={},r[Y.uid]=e.uid,r[Y.name]=e.name,r[Y.url]=e.url,r);if(!o(e.size)){s[Y.size]=e.size}if(e["responseData"]){s.responseData=e["responseData"]}i.push(s)}}else if(a(e.response)){if(e.response.code==="0000"){var l;var u=e.response.data;var c=(f.onRequestResultAdapter==null?void 0:f.onRequestResultAdapter(u))||u;var p=(l={},l[Y.uid]=c[Y.uid]||e.uid,l[Y.name]=c[Y.name]||e.name,l[Y.url]=c[Y.url],l);if(!o(c[Y.size])){p[Y.size]=c[Y.size]}i.push(t({},p,{responseData:u}))}else{var m=e.response.message||"上传失败";n=true;e.status="error";e.response=e.response.message||"上传失败";if(T){T==null||T(m)}else{void d.error("上传操作失败...")}}}});if(n){I([].concat(r))}O==null||O(i)};var G=i.useCallbackRef(function(e){var r=e.fileList;if(e.file.status==="done"){var i=[].concat(e.fileList);var n=i.filter(function(e){return e.status==="done"||e["isOriginal"]});var t=n.length===i.length;if(t){V(i)}j(function(){return I(i)});return}else if(e.file.status==="removed"){var a=e.file.uid;var s=M!==undefined?[].concat(M):[];var o=s.findIndex(function(e){var r=e[Y.uid]||e.uid;return r===a});if(o>=0){s.splice(o,1)}O==null||O(s)}else if(e.file.status==="error"){if(T){T()}else{void d.error("上传操作失败...")}}I([].concat(r));f.onUploadChange==null||f.onUploadChange(e)});var J=v(function(){if(A.maxCount===undefined||!D)return false;if(A.maxCount===0)return true;if(B&&B.length>=A.maxCount)return true;return false},[D,A.maxCount,B]);var K=function e(r,i){if(R===false){var n=A.maxCount;var t=[].concat(M||[],i);var a=[].concat(B||[],i);if(n!==undefined&&n!==null){if(t.length>n){t=t.slice(t.length-n);a=a.slice(a.length-n)}}I(a);f.onChange==null||f.onChange(t);return false}return true};var Q=function e(r){return new Promise(function(e,i){var n,t,a;n=r.name||"";t=n.slice(n.lastIndexOf(".")+1);a=E==null?void 0:E.find(function(e){return e.toLocaleLowerCase()===t.toLocaleLowerCase()});if(a){if(!r.url&&!r.preview){return Promise.resolve(b(r.originFileObj)).then(function(e){try{r.preview=e;return o.call(this)}catch(e){return i(e)}}.bind(this),i)}function o(){H(r.url||r.preview);return s.call(this)}return o.call(this)}else{u(r.url);return s.call(this)}function s(){return e()}})};return w(g,{children:[C(c,t({beforeUpload:K,onPreview:U?Q:undefined,showUploadList:true,itemRender:function e(i,n,t){if(!S||!S.length)return i;var a=(A.disabled?1:2)+"-"+S.length;return C("div",{className:r("v-upload-list-item-actions-wrapper","v-upload-list-item-extra-actions-"+a),style:{height:"100%"},children:h(i,{children:[i.props.children,C("div",{className:"v-upload-list-item-extra-actions",children:S.map(function(e,r){return C(x,{size:"small",type:"text",icon:e.icon,onClick:e.onClick.bind(null,n,t)},r)})},"extra-actions")].filter(Boolean)})})}},A,{onChange:G,fileList:B,className:r("v-upload-wrapper",A.className),children:A.disabled||J?null:C(P,{triggerText:k,listType:A.listType,children:f.children})})),_?C(p,{wrapperStyle:{display:"none"},preview:{visible:!!_,onVisibleChange:function e(){return H(undefined)},afterOpenChange:function e(r){return!r&&H("")}},src:_}):null]})};var P=function r(i){if(i.children)return C(g,{children:i.children});if(i.listType==="picture-card"){return w("div",{children:[C(e,{}),C("div",{style:{marginTop:8},children:i.triggerText||"上传图片"})]})}if(i.listType==="picture"){return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择图片上传"})}return C(f,{type:"primary",ghost:true,children:i.triggerText||"选择文件上传"})};export{O as UploadWrapper};
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/upload-wrapper/utils.ts","@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["export const getBase64 = (file): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n });\n","import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { isUndefinedOrNull, openNewWindow, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport type { UploadProps } from 'antd';\nimport { Button, Image, message, Upload } from 'antd';\nimport type { UploadChangeParam } from 'antd/lib/upload';\nimport type { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport type { ReactElement, ReactNode } from 'react';\nimport { cloneElement, Fragment, useMemo, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { getBase64 } from './utils';\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[] | 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 size?: string | number;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n /** 超过maxCount 隐藏上传入口 */\n limitHidden?: boolean;\n /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: boolean;\n /** 图片预览开关, 重写 onPreview 方法后失效 */\n imagePreviewSwitch?: boolean;\n /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif'] */\n imagePreviewAccept?: string[];\n /**\n * 配置文件额外操作\n * ```\n * 额外操作超过两项后,listType为 picture-card、picture-circle 时会出现显示异常,需要自行修改覆盖样式\n * ```\n */\n extraOperate?: {\n icon: ReactElement;\n onClick: (file: UploadFile, fileList: UploadFile[], e) => void;\n }[];\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * demo: https://fex.qa.tcshuke.com/docs/admin/main/file/upload\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 * 5. 回填数据结构\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * }]\n * 1. 其中 uid、name、url 可为其他命名,通过 fieldNames 进行映射即可,\n * 2. 其他需要的字段可在对象中添加 responseData 对象\n * 例如:\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * responseData: { 'xx':'xxx' }\n * }]\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const {\n onChange,\n onUploadError,\n value,\n triggerText,\n limitHidden,\n autoSubmit,\n imagePreviewSwitch,\n imagePreviewAccept,\n extraOperate,\n ...otherProps\n } = props;\n const imagePreviewAcceptFt = isUndefinedOrNull(imagePreviewAccept)\n ? ['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif']\n : imagePreviewAccept;\n const [previewImage, setPreviewImage] = useState<string>();\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n size: 'size',\n },\n props.fieldNames,\n );\n\n const valueList = useMemo(\n () => (isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value)),\n [value],\n );\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList = [] as TAny[];\n valueList?.forEach((item) => {\n // 判断item 为 File类型\n if (item['lastModified']) {\n newList.push(item);\n } else {\n newList.push({\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n size: item[fieldNames.size],\n responseData: item['responseData'],\n status: 'done',\n isOriginal: true,\n });\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, valueList]);\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 const target: TPlainObject = {\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n };\n if (!isUndefinedOrNull(item.size)) {\n target[fieldNames.size] = item.size;\n }\n if (item['responseData']) {\n target.responseData = item['responseData'];\n }\n newFileList.push(target);\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 const target: TPlainObject = {\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n };\n if (!isUndefinedOrNull(result[fieldNames.size])) {\n target[fieldNames.size] = result[fieldNames.size];\n }\n newFileList.push({\n ...target,\n responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\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 = valueList !== undefined ? [...valueList] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid] || item.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 const hiddenEmtry = useMemo(() => {\n if (otherProps.maxCount === undefined || !limitHidden) return false;\n if (otherProps.maxCount === 0) return true;\n if (uploadList && uploadList.length >= otherProps.maxCount) return true;\n return false;\n }, [limitHidden, otherProps.maxCount, uploadList]);\n\n const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const maxCount = otherProps.maxCount;\n let mergeList = [...(valueList || []), ...fileList];\n let uploadListMerge = [...(uploadList || []), ...fileList];\n if (maxCount !== undefined && maxCount !== null) {\n if (mergeList.length > maxCount) {\n mergeList = mergeList.slice(mergeList.length - maxCount);\n uploadListMerge = uploadListMerge.slice(uploadListMerge.length - maxCount);\n }\n }\n setUploadList(uploadListMerge);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n const handlePreview = async (file: UploadFile) => {\n const name = file.name || '';\n const extension = name.slice(name.lastIndexOf('.') + 1);\n const acceptTarget = imagePreviewAcceptFt?.find((item) => {\n return item.toLocaleLowerCase() === extension.toLocaleLowerCase();\n });\n if (acceptTarget) {\n if (!file.url && !file.preview) {\n file.preview = await getBase64(file.originFileObj);\n }\n setPreviewImage(file.url || (file.preview as string));\n } else {\n openNewWindow(file.url as string);\n }\n };\n\n return (\n <Fragment>\n <Upload\n beforeUpload={beforeUpload}\n onPreview={imagePreviewSwitch ? handlePreview : undefined}\n showUploadList\n itemRender={(originNode, file, fileList) => {\n if (!extraOperate || !extraOperate.length) return originNode;\n const countSign = `${otherProps.disabled ? 1 : 2}-${extraOperate.length}`;\n return (\n <div\n className={classNames(\n 'v-upload-list-item-actions-wrapper',\n `v-upload-list-item-extra-actions-${countSign}`,\n )}\n style={{ height: '100%' }}\n >\n {cloneElement(originNode, {\n children: [\n originNode.props.children,\n <div key=\"extra-actions\" className=\"v-upload-list-item-extra-actions\">\n {extraOperate.map((item, index) => {\n return (\n <ButtonWrapper\n key={index}\n size=\"small\"\n type=\"text\"\n icon={item.icon}\n onClick={item.onClick.bind(null, file, fileList)}\n />\n );\n })}\n </div>,\n ].filter(Boolean),\n })}\n </div>\n );\n }}\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled || hiddenEmtry ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n {previewImage ? (\n <Image\n wrapperStyle={{ display: 'none' }}\n preview={{\n visible: !!previewImage,\n onVisibleChange: () => setPreviewImage(undefined),\n afterOpenChange: (visible) => !visible && setPreviewImage(''),\n }}\n src={previewImage}\n />\n ) : null}\n </Fragment>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\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 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","UploadWrapper","props","onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate","otherProps","_objectWithoutPropertiesLoose","_excluded","imagePreviewAcceptFt","isUndefinedOrNull","_useState","useState","previewImage","setPreviewImage","_useState2","uploadList","setUploadList","fieldNames","_extend","uid","name","url","size","valueList","useMemo","undefined","toArray","fbaHooks","useEffectCustom","errorList","filter","item","newList","forEach","push","responseData","status","isOriginal","length","newErrorList","map","response","concat","handleResponse","fileList","newFileList","hasError","_target","target","_isPlainObject","code","_target3","respData","data","onRequestResultAdapter","_extends","errorMsg","message","onUploadChange","_hooks","useCallbackRef","info","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","maxCount","beforeUpload","_file","mergeList","uploadListMerge","slice","handlePreview","$return","$error","extension","acceptTarget","lastIndexOf","find","toLocaleLowerCase","preview","originFileObj","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","openNewWindow","_jsxs","Fragment","children","_jsx","Upload","onPreview","showUploadList","itemRender","originNode","countSign","disabled","className","_classNames","style","height","cloneElement","index","ButtonWrapper","type","icon","onClick","Boolean","UploadTrigger","listType","Image","wrapperStyle","display","visible","onVisibleChange","afterOpenChange","src","_PlusOutlined","marginTop","Button","ghost"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/upload-wrapper/utils.ts","@flatbiz/antd/src/upload-wrapper/upload-wrapper.tsx"],"sourcesContent":["export const getBase64 = (file): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n });\n","import { PlusOutlined } from '@ant-design/icons';\nimport { isPlainObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { isUndefinedOrNull, openNewWindow, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport type { UploadProps } from 'antd';\nimport { Button, Image, message, Upload } from 'antd';\nimport type { UploadChangeParam } from 'antd/lib/upload';\nimport type { UploadFile, UploadListType } from 'antd/lib/upload/interface';\nimport type { ReactElement, ReactNode } from 'react';\nimport { cloneElement, Fragment, useMemo, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { getBase64 } from './utils';\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[] | 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 size?: string | number;\n };\n /**\n * 接口响应数据适配器,如果配置了fieldNames,适配器返回值会再进过fieldNames转换\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject;\n /** 操作触发显示文本 */\n triggerText?: string;\n /** 超过maxCount 隐藏上传入口 */\n limitHidden?: boolean;\n /**\n * 自动提交,默认:true\n * ```\n * 1. 自定义beforeUpload配置后 autoSubmit 失效\n * ```\n */\n autoSubmit?: boolean;\n /** 图片预览开关, 重写 onPreview 方法后失效 */\n imagePreviewSwitch?: boolean;\n /** 图片预览文件类型,默认:['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif'] */\n imagePreviewAccept?: string[];\n /**\n * 配置文件额外操作\n * ```\n * 额外操作超过两项后,listType为 picture-card、picture-circle 时会出现显示异常,需要自行修改覆盖样式\n * ```\n */\n extraOperate?: {\n icon: ReactElement;\n onClick: (file: UploadFile, fileList: UploadFile[], e) => void;\n }[];\n} & Omit<UploadProps, 'onChange' | 'fileList'>;\n\n/**\n * 文件上传\n * ```\n * demo: https://fex.qa.tcshuke.com/docs/admin/main/file/upload\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 * 5. 回填数据结构\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * }]\n * 1. 其中 uid、name、url 可为其他命名,通过 fieldNames 进行映射即可,\n * 2. 其他需要的字段可在对象中添加 responseData 对象\n * 例如:\n * [{\n * uid: '唯一值',\n * name(非必填): 'image.png',\n * url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',\n * responseData: { 'xx':'xxx' }\n * }]\n * ```\n *\n */\nexport const UploadWrapper = (props: UploadWrapperProps) => {\n const {\n onChange,\n onUploadError,\n value,\n triggerText,\n limitHidden,\n autoSubmit,\n imagePreviewSwitch,\n imagePreviewAccept,\n extraOperate,\n ...otherProps\n } = props;\n const imagePreviewAcceptFt = isUndefinedOrNull(imagePreviewAccept)\n ? ['png', 'jpg', 'jpeg', 'gif', 'heic', 'heif']\n : imagePreviewAccept;\n const [previewImage, setPreviewImage] = useState<string>();\n const [uploadList, setUploadList] = useState<UploadWrapperFileItem[]>();\n const fieldNames = extend(\n {\n uid: 'uid',\n name: 'name',\n url: 'url',\n size: 'size',\n },\n props.fieldNames,\n );\n\n const valueList = useMemo(\n () => (isUndefinedOrNull(value) ? undefined : toArray<TPlainObject>(value)),\n [value],\n );\n\n fbaHooks.useEffectCustom(() => {\n const errorList = uploadList?.filter((item) => item['status'] === 'error') || [];\n let newList = [] as TAny[];\n valueList?.forEach((item) => {\n // 判断item 为 File类型\n if (item['lastModified']) {\n newList.push(item);\n } else {\n newList.push({\n uid: item[fieldNames.uid],\n name: item[fieldNames.name],\n url: item[fieldNames.url],\n size: item[fieldNames.size],\n responseData: item['responseData'],\n status: 'done',\n isOriginal: true,\n });\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, valueList]);\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 const target: TPlainObject = {\n [fieldNames.uid]: item.uid,\n [fieldNames.name]: item.name,\n [fieldNames.url]: item.url,\n };\n if (!isUndefinedOrNull(item.size)) {\n target[fieldNames.size] = item.size;\n }\n if (item['responseData']) {\n target.responseData = item['responseData'];\n }\n newFileList.push(target);\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 const target: TPlainObject = {\n [fieldNames.uid]: result[fieldNames.uid] || item.uid,\n [fieldNames.name]: result[fieldNames.name] || item.name,\n [fieldNames.url]: result[fieldNames.url],\n };\n if (!isUndefinedOrNull(result[fieldNames.size])) {\n target[fieldNames.size] = result[fieldNames.size];\n }\n newFileList.push({\n ...target,\n responseData: respData,\n });\n } else {\n const errorMsg = item.response.message || '上传失败';\n hasError = true;\n item.status = 'error';\n item.response = item.response.message || '上传失败';\n if (onUploadError) {\n onUploadError?.(errorMsg);\n } else {\n void message.error('上传操作失败...');\n }\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 = valueList !== undefined ? [...valueList] : [];\n const targetIndex = targetList.findIndex((item) => {\n const tempUid = item[fieldNames.uid] || item.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 const hiddenEmtry = useMemo(() => {\n if (otherProps.maxCount === undefined || !limitHidden) return false;\n if (otherProps.maxCount === 0) return true;\n if (uploadList && uploadList.length >= otherProps.maxCount) return true;\n return false;\n }, [limitHidden, otherProps.maxCount, uploadList]);\n\n const beforeUpload = (_file, fileList) => {\n if (autoSubmit === false) {\n const maxCount = otherProps.maxCount;\n let mergeList = [...(valueList || []), ...fileList];\n let uploadListMerge = [...(uploadList || []), ...fileList];\n if (maxCount !== undefined && maxCount !== null) {\n if (mergeList.length > maxCount) {\n mergeList = mergeList.slice(mergeList.length - maxCount);\n uploadListMerge = uploadListMerge.slice(uploadListMerge.length - maxCount);\n }\n }\n setUploadList(uploadListMerge);\n props.onChange?.(mergeList);\n return false;\n }\n return true;\n };\n\n const handlePreview = async (file: UploadFile) => {\n const name = file.name || '';\n const extension = name.slice(name.lastIndexOf('.') + 1);\n const acceptTarget = imagePreviewAcceptFt?.find((item) => {\n return item.toLocaleLowerCase() === extension.toLocaleLowerCase();\n });\n if (acceptTarget) {\n if (!file.url && !file.preview) {\n file.preview = await getBase64(file.originFileObj);\n }\n setPreviewImage(file.url || (file.preview as string));\n } else {\n openNewWindow(file.url as string);\n }\n };\n\n return (\n <Fragment>\n <Upload\n beforeUpload={beforeUpload}\n onPreview={imagePreviewSwitch ? handlePreview : undefined}\n showUploadList\n itemRender={(originNode, file, fileList) => {\n if (!extraOperate || !extraOperate.length) return originNode;\n const countSign = `${otherProps.disabled ? 1 : 2}-${extraOperate.length}`;\n return (\n <div\n className={classNames(\n 'v-upload-list-item-actions-wrapper',\n `v-upload-list-item-extra-actions-${countSign}`,\n )}\n style={{ height: '100%' }}\n >\n {cloneElement(originNode, {\n children: [\n originNode.props.children,\n <div key=\"extra-actions\" className=\"v-upload-list-item-extra-actions\">\n {extraOperate.map((item, index) => {\n return (\n <ButtonWrapper\n key={index}\n size=\"small\"\n type=\"text\"\n icon={item.icon}\n onClick={item.onClick.bind(null, file, fileList)}\n />\n );\n })}\n </div>,\n ].filter(Boolean),\n })}\n </div>\n );\n }}\n {...otherProps}\n onChange={onUploadChange}\n fileList={uploadList}\n className={classNames('v-upload-wrapper', otherProps.className)}\n >\n {otherProps.disabled || hiddenEmtry ? null : (\n <UploadTrigger triggerText={triggerText} listType={otherProps.listType}>\n {props.children}\n </UploadTrigger>\n )}\n </Upload>\n {previewImage ? (\n <Image\n wrapperStyle={{ display: 'none' }}\n preview={{\n visible: !!previewImage,\n onVisibleChange: () => setPreviewImage(undefined),\n afterOpenChange: (visible) => !visible && setPreviewImage(''),\n }}\n src={previewImage}\n />\n ) : null}\n </Fragment>\n );\n};\n\nconst UploadTrigger = (props: {\n listType?: UploadListType;\n children?: ReactNode | ReactNode[];\n triggerText?: string;\n}) => {\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 }}>{props.triggerText || '上传图片'}</div>\n </div>\n );\n }\n if (props.listType === 'picture') {\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择图片上传'}\n </Button>\n );\n }\n return (\n <Button type=\"primary\" ghost>\n {props.triggerText || '选择文件上传'}\n </Button>\n );\n};\n"],"names":["getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","UploadWrapper","props","onChange","onUploadError","value","triggerText","limitHidden","autoSubmit","imagePreviewSwitch","imagePreviewAccept","extraOperate","otherProps","_objectWithoutPropertiesLoose","_excluded","imagePreviewAcceptFt","isUndefinedOrNull","_useState","useState","previewImage","setPreviewImage","_useState2","uploadList","setUploadList","fieldNames","_extend","uid","name","url","size","valueList","useMemo","undefined","toArray","fbaHooks","useEffectCustom","errorList","filter","item","newList","forEach","push","responseData","status","isOriginal","length","newErrorList","map","response","concat","handleResponse","fileList","newFileList","hasError","_target","target","_isPlainObject","code","_target3","respData","data","onRequestResultAdapter","_extends","errorMsg","message","onUploadChange","_hooks","useCallbackRef","info","donwList","allDone","flushSync","targetList","targetIndex","findIndex","tempUid","splice","hiddenEmtry","maxCount","beforeUpload","_file","mergeList","uploadListMerge","slice","handlePreview","$return","$error","extension","acceptTarget","lastIndexOf","find","toLocaleLowerCase","preview","originFileObj","then","$await_3","$If_2","call","this","$boundEx","bind","$If_1","openNewWindow","_jsxs","Fragment","children","_jsx","Upload","onPreview","showUploadList","itemRender","originNode","countSign","disabled","className","_classNames","style","height","cloneElement","index","ButtonWrapper","type","icon","onClick","Boolean","UploadTrigger","listType","Image","wrapperStyle","display","visible","onVisibleChange","afterOpenChange","src","_PlusOutlined","marginTop","Button","ghost"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /*! @flatjs/forge MIT @flatbiz/antd */
2
+ import{Grid as r}from"antd";import{useMemo as n}from"react";var t=function t(){var e=r.useBreakpoint();return n(function(){var r=Object.keys(e).filter(function(r){return e[r]===true});var n=["xxl","xl","lg","md","sm","xs"];var t=n.findIndex(function(n){return r.includes(n)});return n[t]},[e])};export{t as u};
3
+ //# sourceMappingURL=use-responsive-point-1e6d93d9.js.map