@flatbiz/antd 4.2.34 → 4.2.36

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 (195) hide show
  1. package/esm/button-operate/index.js +1 -1
  2. package/esm/{button-operate-260750d4.js → button-operate-04d9185b.js} +2 -2
  3. package/esm/{button-operate-260750d4.js.map → button-operate-04d9185b.js.map} +1 -1
  4. package/esm/button-wrapper/index.js +1 -1
  5. package/esm/button-wrapper-c63ea6fc.js +3 -0
  6. package/esm/button-wrapper-c63ea6fc.js.map +1 -0
  7. package/esm/cascader-wrapper/index.js +1 -1
  8. package/esm/cascader-wrapper/index.js.map +1 -1
  9. package/esm/cascader-wrapper-7f1eed71.js +3 -0
  10. package/esm/cascader-wrapper-7f1eed71.js.map +1 -0
  11. package/esm/cell-render-8d9d3ee9.js +3 -0
  12. package/esm/cell-render-8d9d3ee9.js.map +1 -0
  13. package/esm/center-a4dfda6f.js +3 -0
  14. package/esm/center-a4dfda6f.js.map +1 -0
  15. package/esm/checkbox-wrapper/index.js +1 -1
  16. package/esm/checkbox-wrapper/index.js.map +1 -1
  17. package/esm/checkbox-wrapper-018a5c59.js +3 -0
  18. package/esm/checkbox-wrapper-018a5c59.js.map +1 -0
  19. package/esm/css-node-hover/index.js +1 -1
  20. package/esm/css-node-hover/index.js.map +1 -1
  21. package/esm/css-node-hover-ed7b9860.js +3 -0
  22. package/esm/css-node-hover-ed7b9860.js.map +1 -0
  23. package/esm/date-range-picker-wrapper-form-item/index.js +1 -1
  24. package/esm/date-range-picker-wrapper-form-item/index.js.map +1 -1
  25. package/esm/date-range-picker-wrapper-form-item-688cf465.js +3 -0
  26. package/esm/date-range-picker-wrapper-form-item-688cf465.js.map +1 -0
  27. package/esm/dialog-alert/index.js +1 -1
  28. package/esm/dialog-alert/index.js.map +1 -1
  29. package/esm/dialog-alert-0ca83448.js +3 -0
  30. package/esm/dialog-alert-0ca83448.js.map +1 -0
  31. package/esm/dialog-confirm/index.js +1 -1
  32. package/esm/{dialog-confirm-4b387b9b.js → dialog-confirm-b289f5ed.js} +2 -2
  33. package/esm/{dialog-confirm-4b387b9b.js.map → dialog-confirm-b289f5ed.js.map} +1 -1
  34. package/esm/dialog-drawer/index.js +1 -1
  35. package/esm/dialog-drawer/index.js.map +1 -1
  36. package/esm/dialog-drawer-525a0bc3.js +3 -0
  37. package/esm/dialog-drawer-525a0bc3.js.map +1 -0
  38. package/esm/dialog-loading/index.js +1 -1
  39. package/esm/dialog-loading/index.js.map +1 -1
  40. package/esm/dialog-loading-16bd1baa.js +3 -0
  41. package/esm/dialog-loading-16bd1baa.js.map +1 -0
  42. package/esm/dialog-modal/index.js +1 -1
  43. package/esm/{dialog-modal-8568caf2.js → dialog-modal-225b0fe0.js} +2 -2
  44. package/esm/{dialog-modal-8568caf2.js.map → dialog-modal-225b0fe0.js.map} +1 -1
  45. package/esm/drawer-wrapper/index.js +1 -1
  46. package/esm/drawer-wrapper/index.js.map +1 -1
  47. package/esm/drawer-wrapper-9af2f178.js +3 -0
  48. package/esm/drawer-wrapper-9af2f178.js.map +1 -0
  49. package/esm/dropdown-menu-wrapper/index.js +1 -1
  50. package/esm/{dropdown-menu-wrapper-bd05860d.js → dropdown-menu-wrapper-2c4b6cad.js} +2 -2
  51. package/esm/{dropdown-menu-wrapper-bd05860d.js.map → dropdown-menu-wrapper-2c4b6cad.js.map} +1 -1
  52. package/esm/easy-table/index.js +1 -1
  53. package/esm/easy-table/index.js.map +1 -1
  54. package/esm/editable-field/index.js +1 -1
  55. package/esm/editable-field/index.js.map +1 -1
  56. package/esm/editable-field-7f30db8e.js +3 -0
  57. package/esm/editable-field-7f30db8e.js.map +1 -0
  58. package/esm/editable-field-provider/index.js +1 -1
  59. package/esm/editable-field-provider/index.js.map +1 -1
  60. package/esm/editable-field-provider-20963c3e.js +3 -0
  61. package/esm/editable-field-provider-20963c3e.js.map +1 -0
  62. package/esm/editable-table/index.js +1 -1
  63. package/esm/editable-table/index.js.map +1 -1
  64. package/esm/editable-table-6bd8df15.js +3 -0
  65. package/esm/editable-table-6bd8df15.js.map +1 -0
  66. package/esm/editor-wrapper/index.js +1 -1
  67. package/esm/editor-wrapper/index.js.map +1 -1
  68. package/esm/editor-wrapper-ff6e75b7.js +3 -0
  69. package/esm/editor-wrapper-ff6e75b7.js.map +1 -0
  70. package/esm/file-import/index.js +1 -1
  71. package/esm/file-import/index.js.map +1 -1
  72. package/esm/file-import-890a1df9.js +3 -0
  73. package/esm/file-import-890a1df9.js.map +1 -0
  74. package/esm/form-item-hidden/index.js +1 -1
  75. package/esm/form-item-hidden/index.js.map +1 -1
  76. package/esm/form-item-hidden-45541774.js +3 -0
  77. package/esm/form-item-hidden-45541774.js.map +1 -0
  78. package/esm/form-item-wrapper/index.js +1 -1
  79. package/esm/form-item-wrapper/index.js.map +1 -1
  80. package/esm/form-item-wrapper-dfe2ebd9.js +3 -0
  81. package/esm/form-item-wrapper-dfe2ebd9.js.map +1 -0
  82. package/esm/gap/index.js +1 -1
  83. package/esm/gap/index.js.map +1 -1
  84. package/esm/gap-284e1f59.js +3 -0
  85. package/esm/gap-284e1f59.js.map +1 -0
  86. package/esm/in-view-448ba714.js +3 -0
  87. package/esm/in-view-448ba714.js.map +1 -0
  88. package/esm/index.css +0 -0
  89. package/esm/index.js +80 -0
  90. package/esm/index.js.map +1 -0
  91. package/esm/label-value-layout/index.js +1 -1
  92. package/esm/label-value-layout/index.js.map +1 -1
  93. package/esm/label-value-layout-beb35b0d.js +3 -0
  94. package/esm/label-value-layout-beb35b0d.js.map +1 -0
  95. package/esm/modal-action/index.js +1 -1
  96. package/esm/modal-action/index.js.map +1 -1
  97. package/esm/modal-action-5c5ca8a7.js +3 -0
  98. package/esm/modal-action-5c5ca8a7.js.map +1 -0
  99. package/esm/modal-wrapper/index.js +1 -1
  100. package/esm/modal-wrapper/index.js.map +1 -1
  101. package/esm/modal-wrapper-ff8df98b.js +3 -0
  102. package/esm/modal-wrapper-ff8df98b.js.map +1 -0
  103. package/esm/page-fixed-footer/index.js +1 -1
  104. package/esm/page-fixed-footer/index.js.map +1 -1
  105. package/esm/page-fixed-footer-5fa10112.js +3 -0
  106. package/esm/page-fixed-footer-5fa10112.js.map +1 -0
  107. package/esm/page404/index.js +1 -1
  108. package/esm/page404/index.js.map +1 -1
  109. package/esm/page404-f087129a.js +3 -0
  110. package/esm/page404-f087129a.js.map +1 -0
  111. package/esm/permission/index.js +1 -1
  112. package/esm/permission/index.js.map +1 -1
  113. package/esm/permission-a1c99455.js +3 -0
  114. package/esm/permission-a1c99455.js.map +1 -0
  115. package/esm/radio-group-wrapper/index.js +1 -1
  116. package/esm/radio-group-wrapper/index.js.map +1 -1
  117. package/esm/radio-group-wrapper-b34746d1.js +3 -0
  118. package/esm/radio-group-wrapper-b34746d1.js.map +1 -0
  119. package/esm/relation-tree/index.js +1 -1
  120. package/esm/relation-tree/index.js.map +1 -1
  121. package/esm/relation-tree-7bec12bd.js +3 -0
  122. package/esm/relation-tree-7bec12bd.js.map +1 -0
  123. package/esm/rich-text-viewer/index.js +1 -1
  124. package/esm/rich-text-viewer/index.js.map +1 -1
  125. package/esm/rich-text-viewer-5cbe01e9.js +3 -0
  126. package/esm/rich-text-viewer-5cbe01e9.js.map +1 -0
  127. package/esm/roll-location-center/index.js +1 -1
  128. package/esm/roll-location-center/index.js.map +1 -1
  129. package/esm/roll-location-in-view/index.js +1 -1
  130. package/esm/roll-location-in-view/index.js.map +1 -1
  131. package/esm/rule-describe/index.js +1 -1
  132. package/esm/rule-describe/index.js.map +1 -1
  133. package/esm/rule-describe-b4a8e831.js +3 -0
  134. package/esm/rule-describe-b4a8e831.js.map +1 -0
  135. package/esm/selector-wrapper/index.js +1 -1
  136. package/esm/selector-wrapper-ece722f5.js +3 -0
  137. package/esm/selector-wrapper-ece722f5.js.map +1 -0
  138. package/esm/selector-wrapper-search/index.js +1 -1
  139. package/esm/selector-wrapper-search/index.js.map +1 -1
  140. package/esm/selector-wrapper-search-aad145b5.js +3 -0
  141. package/esm/selector-wrapper-search-aad145b5.js.map +1 -0
  142. package/esm/selector-wrapper-simple/index.js +1 -1
  143. package/esm/selector-wrapper-simple/index.js.map +1 -1
  144. package/esm/selector-wrapper-simple-49384d37.js +3 -0
  145. package/esm/selector-wrapper-simple-49384d37.js.map +1 -0
  146. package/esm/sms-count-down/index.js +1 -1
  147. package/esm/sms-count-down/index.js.map +1 -1
  148. package/esm/sms-count-down-c2609386.js +3 -0
  149. package/esm/sms-count-down-c2609386.js.map +1 -0
  150. package/esm/switch-wrapper/index.js +1 -1
  151. package/esm/switch-wrapper/index.js.map +1 -1
  152. package/esm/switch-wrapper-f20b9a58.js +3 -0
  153. package/esm/switch-wrapper-f20b9a58.js.map +1 -0
  154. package/esm/table-cell-render/index.js +1 -1
  155. package/esm/table-cell-render/index.js.map +1 -1
  156. package/esm/table-title-tooltip/index.js +1 -1
  157. package/esm/table-title-tooltip/index.js.map +1 -1
  158. package/esm/tabs-wrapper/index.js +1 -1
  159. package/esm/tabs-wrapper/index.js.map +1 -1
  160. package/esm/tabs-wrapper-e26ba7fb.js +3 -0
  161. package/esm/tabs-wrapper-e26ba7fb.js.map +1 -0
  162. package/esm/tag-group/index.js +1 -1
  163. package/esm/tag-group/index.js.map +1 -1
  164. package/esm/tag-group-4fbcaa14.js +3 -0
  165. package/esm/tag-group-4fbcaa14.js.map +1 -0
  166. package/esm/tag-wrapper/index.css +1 -0
  167. package/esm/tag-wrapper/index.js +6 -0
  168. package/esm/tag-wrapper/index.js.map +1 -0
  169. package/esm/tag-wrapper-6d8b505e.js +3 -0
  170. package/esm/tag-wrapper-6d8b505e.js.map +1 -0
  171. package/esm/time-picker-wrapper/index.js +1 -1
  172. package/esm/time-picker-wrapper/index.js.map +1 -1
  173. package/esm/time-picker-wrapper-f1d26d96.js +3 -0
  174. package/esm/time-picker-wrapper-f1d26d96.js.map +1 -0
  175. package/esm/time-range-picker-wrapper-form-item/index.js +1 -1
  176. package/esm/time-range-picker-wrapper-form-item/index.js.map +1 -1
  177. package/esm/time-range-picker-wrapper-form-item-9df6c0f4.js +3 -0
  178. package/esm/time-range-picker-wrapper-form-item-9df6c0f4.js.map +1 -0
  179. package/esm/title-render-2874a932.js +3 -0
  180. package/esm/title-render-2874a932.js.map +1 -0
  181. package/esm/tree-selector-wrapper/index.js +1 -1
  182. package/esm/tree-selector-wrapper/index.js.map +1 -1
  183. package/esm/tree-selector-wrapper-9cd9da23.js +3 -0
  184. package/esm/tree-selector-wrapper-9cd9da23.js.map +1 -0
  185. package/esm/tree-wrapper/index.css +1 -1
  186. package/esm/tree-wrapper/index.js +1 -1
  187. package/esm/tree-wrapper/index.js.map +1 -1
  188. package/esm/tree-wrapper-ea6a5bdd.js +3 -0
  189. package/esm/tree-wrapper-ea6a5bdd.js.map +1 -0
  190. package/index.d.ts +21 -4
  191. package/package.json +1 -1
  192. package/esm/button-wrapper-6441881c.js +0 -3
  193. package/esm/button-wrapper-6441881c.js.map +0 -1
  194. package/esm/selector-wrapper-6560eb49.js +0 -3
  195. package/esm/selector-wrapper-6560eb49.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-wrapper-ea6a5bdd.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TPlainObject, treeToArray, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: TRequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, any>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { TAny, TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: { label?: string; value?: string; children?: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nimport { isArray, isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, LabelValueItem } from '@flatbiz/utils';\nimport { dequal } from 'dequal';\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\n\nimport { isUndefinedOrNull, TAny, toArray, TPlainObject, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, TreeProps } from 'antd';\nimport {\n DependencyList,\n forwardRef,\n Fragment,\n isValidElement,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { treeFilter } from '@flatbiz/utils';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { treeWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeys, getVauleList, treeWrapperValueDeepEqual } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'expandedKeys'\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'defaultCheckedKeys'\n | 'defaultSelectedKeys'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n> & {\n modelKey: string;\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n ) => void;\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n loadDataFlag?: boolean;\n /** 菜单结构类型 tile/平铺 fold/折叠;默认:fold */\n menuLayoutType?: 'tile' | 'fold';\n /** 菜单触发类型,默认:click */\n menuTriggerType?: 'click' | 'hover';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期,请使用 menuOptions\n * @returns\n * ```\n * menuLayoutType = tile 无效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n\n /**\n * 根据 menuLayoutType 类型赋值\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n // required?: boolean;\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\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 ...otherProps\n } = props;\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n // 必须是数组格式\n const defaultValueRef = useRef<Array<string | number>>();\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n\n const isMultiple = checkable === true;\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const isFirstUseValueRef = useRef(true);\n const [refreshKey, setRefreshKey] = useState(0);\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n const tempList = getVauleList(value, labelInValueFieldNamesMerge);\n return tempList;\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if ((isUndefinedOrNull(value) && isFirstUseValueRef.current) || state.treeList.length == 0) return;\n isFirstUseValueRef.current = false;\n if (!treeWrapperValueDeepEqual(value, innerOperateValueRef.current, labelInValueFieldNamesMerge)) {\n console.log(`modelKey:${modelKey} TreeWrapper key refresh`, value, innerOperateValueRef.current);\n innerOperateValueRef.current = isMultiple ? valueList : valueList[0];\n // 重新计算 expandedKeys\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n defaultValueRef.current = valueList;\n setRefreshKey(Date.now());\n }\n }, [value, state.treeList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n return respDataList;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n onChangeSelectorList(respData || []);\n setLoading(false);\n if (initRootExpand && toArray(respData).length) {\n setTreeExpandedKeys([respData?.[0][fieldNames.value]]);\n }\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\n }\n } catch (error) {\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus('request-success');\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = hooks.useCallbackRef((valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n });\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const tiledArray = treeToTiledArray(state.treeList || [], fieldNames);\n const targetList = tiledArray.filter((item) => item.label?.includes(treeSearchValue || ''));\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(targetList.map((item) => item.value)).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode]);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target]);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.indexOf(treeSearchValue);\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\n {beforeStr}\n <span className=\"site-tree-search-value\">{treeSearchValue}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom) {\n titleDom = (\n <span className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return loop(\n treeFilter(cloneState(state.treeList || []), (node) => {\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n }),\n );\n }\n return loop(list);\n }, [\n state.treeList,\n treeSearchValue,\n searchResultType,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n ]);\n\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem),\n );\n const respDataList = (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions}>\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n return (\n <Fragment>\n <span className=\"tree-item-title\">{nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n {...menuOptions}\n gap={5}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n ...otherProps,\n fieldNames: treeFieldNames,\n expandedKeys: treeExpandedKeys,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%', ...otherProps.style },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n // 必须是数组格式\n defaultCheckedKeys: defaultValueRef.current,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n // 必须是数组格式\n defaultSelectedKeys: defaultValueRef.current,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName}>\n {/* {showTree && <Spin spinning={loading} className=\"v-tree-wrapper-loading\"></Spin>} */}\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\">\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree key={refreshKey} {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getExpandedKeys","fieldNames","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","map","_isObject","array2map","list","forEach","treeWrapperValueDeepEqual","value1","value2","object1","object2","diff","dequal","TreeWrapper","forwardRef","props","ref","serviceConfig","effectDependencyList","selectorTreeList","onChange","modelKey","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","children","defaultValueRef","useRef","menuLayoutTypeNew","undefined","menuTriggerTypeNew","isMultiple","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","isFirstUseValueRef","_useState3","refreshKey","setRefreshKey","innerOperateValueRef","valueList","useEffectCustom","current","console","log","expandedKeys","getTreeExpandedKeys","Array","from","Set","Date","now","valueIsEmpty","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","warn","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","toArray","Boolean","allState","getState","dataList","refresh","newTreeExpandedKeys","includes","targetList","concat","useUpdateEffect","filter","_item$label","prev","mergeList","useImperativeHandle","onClearSelectorList","getTreeDataList","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","operateInfo","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","temp","push","currentNode","nodeValue","node","treeItemDataAdapterHandle","dataItem","treeData","loop","_extends2","adapterItem","disabled","strTitle","titleDom","index","indexOf","beforeStr","substring","afterStr","slice","_jsxs","className","_classNames","_jsx","_treeItemName","_disabled","cloneState","treeFilter","_node$fieldNames$labe","toLowerCase","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_props$menuOptions3","_extends5","stringLabel","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends3","call","_extends4","getMenuOptions","Fragment","DropdownMenuWrapper","menuList","_MoreOutlined","tile","ButtonOperate","gap","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","style","width","checkedProps","onCheck","defaultCheckedKeys","selectedProps","onSelect","multiple","defaultSelectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","defaultProps"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  import { API, ModelType } from '@dimjs/model';
5
5
  import { DateFormatType, TAny, TNoopDefine, TPlainObject } from '@flatbiz/utils';
6
6
  import { IAllProps } from '@tinymce/tinymce-react';
7
- import { ButtonProps, CascaderProps, CheckboxProps, DrawerProps, DropdownProps, FormInstance, FormItemProps, InputNumberProps, InputProps, ModalProps, PaginationProps, PopconfirmProps, RadioGroupProps, RowProps, SelectProps, SpaceProps, SwitchProps, TableProps, TabsProps, TimePickerProps, TimeRangePickerProps, TooltipProps, TreeProps, TreeSelectProps, UploadProps } from 'antd';
7
+ import { ButtonProps, CascaderProps, CheckboxProps, DrawerProps, DropdownProps, FormInstance, FormItemProps, InputNumberProps, InputProps, ModalProps, PaginationProps, PopconfirmProps, RadioGroupProps, RowProps, SelectProps, SpaceProps, SwitchProps, TableProps, TabsProps, TagProps, TimePickerProps, TimeRangePickerProps, TooltipProps, TreeProps, TreeSelectProps, UploadProps } from 'antd';
8
8
  import { ConfigProviderProps } from 'antd/es/config-provider';
9
9
  import { PickerDateProps } from 'antd/es/date-picker/generatePicker';
10
10
  import { CheckboxGroupProps } from 'antd/lib/checkbox';
@@ -19,7 +19,7 @@ import { Dayjs } from 'dayjs';
19
19
  import { CSSProperties, DependencyList, FC, ReactElement, ReactNode } from 'react';
20
20
  import { Editor as TinyMCEEditor } from 'tinymce';
21
21
 
22
- export type ButtonWrapperProps = Omit<ButtonProps, "onClick" | "loading"> & {
22
+ export type ButtonWrapperProps = Omit<ButtonProps, "onClick"> & {
23
23
  onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;
24
24
  debounceDuration?: number;
25
25
  permission?: string;
@@ -494,6 +494,7 @@ export declare const dialogDrawer: {
494
494
  export type DialogLoadingProps = {
495
495
  className?: string;
496
496
  message?: string;
497
+ mask?: boolean;
497
498
  };
498
499
  export declare const dialogLoading: {
499
500
  open: (props?: DialogLoadingProps) => {
@@ -892,8 +893,9 @@ export type SelectorWrapperProps = Omit<SelectProps, "onSearch" | "notFoundConte
892
893
  /**
893
894
  * 使用缓存,默认值:true
894
895
  * ```
895
- * true: 在 modelKey下使用请求参数缓存数据,如果相同model、相同请求参数直接使用缓存数据
896
- * false: 每次都调用接口,不参与缓存数据、不使用缓存数据
896
+ * 1. true: 在 modelKey下使用请求参数缓存数据,如果相同modelKey、相同请求参数直接使用缓存数据
897
+ * 2. false: 每次都调用接口,不参与缓存数据、不使用缓存数据
898
+ * 3. useCache=false 在 serviceConfig.requiredParamsKeys.length > 0 有效
897
899
  * ```
898
900
  */
899
901
  useCache?: boolean;
@@ -2129,6 +2131,15 @@ export type TagGroupProps = {
2129
2131
  * Tag 列表显示
2130
2132
  */
2131
2133
  export declare const TagGroup: FC<TagGroupProps>;
2134
+ export type TagWrapperProps = Omit<TagProps, "onClick"> & {
2135
+ onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;
2136
+ loading?: boolean;
2137
+ debounceDuration?: number;
2138
+ };
2139
+ /**
2140
+ * 为 Tag 添加 loading 效果
2141
+ */
2142
+ export declare const TagWrapper: (props: TagWrapperProps) => JSX.Element;
2132
2143
  export type TimePickerWrapperProps = Omit<TimePickerProps, "value" | "onChange" | "format"> & {
2133
2144
  value?: string;
2134
2145
  onChange?: (value?: string) => void;
@@ -2363,6 +2374,7 @@ export type TreeWrapperProps = Omit<TreeProps, "expandedKeys" | "treeData" | "on
2363
2374
  * 通过服务获取数据后回调,当设置`selectorList`后无效果
2364
2375
  */
2365
2376
  onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;
2377
+ onRequestResponseChange?: (data: TAny) => void;
2366
2378
  onChange?: (selectedKey?: TreeWrapperValue, operateNodeData?: TPlainObject[] | TPlainObject, operateAllNodeDataList?: TPlainObject[]) => void;
2367
2379
  fieldNames?: {
2368
2380
  label?: string;
@@ -2442,6 +2454,8 @@ export type TreeWrapperProps = Omit<TreeProps, "expandedKeys" | "treeData" | "on
2442
2454
  searchExtraElement?: ReactElement;
2443
2455
  /** 有唯一跟节点时,初始化是否展开,默认值:false */
2444
2456
  initRootExpand?: boolean;
2457
+ /** 搜素过滤方式,高亮 | 过滤;默认:filter */
2458
+ searchResultType?: "highlight" | "filter";
2445
2459
  };
2446
2460
  export type TreeWrapperRefApi = {
2447
2461
  onClearSelectorList: () => void;
@@ -2484,6 +2498,7 @@ export declare const TreeWrapper: import("react").ForwardRefExoticComponent<Omit
2484
2498
  * 通过服务获取数据后回调,当设置`selectorList`后无效果
2485
2499
  */
2486
2500
  onSelectorTreeListChange?: ((dataList: TPlainObject[]) => void) | undefined;
2501
+ onRequestResponseChange?: ((data: TAny) => void) | undefined;
2487
2502
  onChange?: ((selectedKey?: TreeWrapperValue, operateNodeData?: TPlainObject[] | TPlainObject, operateAllNodeDataList?: TPlainObject[]) => void) | undefined;
2488
2503
  fieldNames?: {
2489
2504
  label?: string | undefined;
@@ -2563,6 +2578,8 @@ export declare const TreeWrapper: import("react").ForwardRefExoticComponent<Omit
2563
2578
  searchExtraElement?: ReactElement<any, string | import("react").JSXElementConstructor<any>> | undefined;
2564
2579
  /** 有唯一跟节点时,初始化是否展开,默认值:false */
2565
2580
  initRootExpand?: boolean | undefined;
2581
+ /** 搜素过滤方式,高亮 | 过滤;默认:filter */
2582
+ searchResultType?: "filter" | "highlight" | undefined;
2566
2583
  } & import("react").RefAttributes<TreeWrapperRefApi>>;
2567
2584
 
2568
2585
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.2.34",
3
+ "version": "4.2.36",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import r from"@ant-design/icons/es/icons/LoadingOutlined";import{_ as o,a as i}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{isPromise as e}from"@dimjs/lang/cjs/is-promise";import{hooks as l}from"@wove/react/cjs/hooks";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Button as c}from"antd";import{useState as t}from"react";import{C as a}from"./config-provider-wrapper-dfe8f592.js";import{f as s}from"./fba-utils-1e895394.js";import{jsx as d,jsxs as m}from"react/jsx-runtime";var f=["loadingPosition","color","debounceDuration","permission","hidden"];var u=function r(o){if(o.color&&!o.disabled){var i={};if(o.type==="link"){i={colorLink:o.color,colorLinkActive:o.color,colorLinkHover:o.color}}else if(o.type==="primary"){i={colorPrimary:o.color,colorPrimaryHover:o.color,colorPrimaryActive:o.color}}else{i={colorPrimaryHover:o.color,colorPrimaryActive:o.color,colorText:o.color,colorBorder:o.color}}return d(a,{theme:{components:{Button:i}},children:o.children})}return o.children};var p=function a(p){var v=p.loadingPosition,h=p.color,y=p.debounceDuration,b=p.permission,g=p.hidden,k=o(p,f);var P=t(false),j=P[0],C=P[1];var B=v===undefined?"left":v;var H=B==="left";var L=n(y)?500:y;var w=l.useDebounceClick((function(r){var o=p.onClick;if(!o){return}var i=o(r);if(i&&e(i)){C(true);i.catch((function(r){console.error(r)})).finally((function(){C(false)}))}}),L);if(!s.hasPermission(b)){return null}if(g){return null}if(H){return d(u,{color:h,disabled:p.disabled,type:p.type,children:d(c,i({},k,{onClick:w,loading:j,children:p.children}))})}return d(u,{color:h,disabled:p.disabled,type:p.type,children:m(c,i({},k,{onClick:w,children:[j&&d("div",{className:"bw-center-loading",children:d(r,{})}),j?d("div",{style:{opacity:.5},children:p.children}):p.children]}))})};export{p as B};
3
- //# sourceMappingURL=button-wrapper-6441881c.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-wrapper-6441881c.js","sources":["@flatbiz/antd/src/button-wrapper/button-wrapper.tsx"],"sourcesContent":["import { LoadingOutlined } from '@ant-design/icons';\nimport { isPromise } from '@dimjs/lang';\nimport { isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, ButtonProps } from 'antd';\nimport { OverrideToken } from 'antd/es/theme/interface';\nimport { ReactElement, useState } from 'react';\nimport { ConfigProviderWrapper } from '../config-provider-wrapper';\nimport { fbaUtils } from '../fba-utils';\nimport './style.less';\n\nexport type ButtonWrapperProps = Omit<ButtonProps, 'onClick' | 'loading'> & {\n onClick?: (e: React.MouseEvent<HTMLElement>) => Promise<TAny> | void;\n // 重复点击间隙,单位毫秒 默认值:500\n debounceDuration?: number;\n permission?: string;\n hidden?: boolean;\n /** loading 显示位置,默认值:left */\n loadingPosition?: 'left' | 'center';\n};\n\nconst DefaultButton = (props: {\n children: ReactElement;\n color?: string;\n type?: ButtonProps['type'];\n disabled?: boolean;\n}) => {\n if (props.color && !props.disabled) {\n let buttonTheme: OverrideToken['Button'] = {};\n if (props.type === 'link') {\n buttonTheme = {\n colorLink: props.color,\n colorLinkActive: props.color,\n colorLinkHover: props.color,\n };\n } else if (props.type === 'primary') {\n buttonTheme = {\n colorPrimary: props.color,\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n };\n } else {\n buttonTheme = {\n colorPrimaryHover: props.color,\n colorPrimaryActive: props.color,\n colorText: props.color,\n colorBorder: props.color,\n };\n }\n\n return (\n <ConfigProviderWrapper\n theme={{\n components: {\n Button: buttonTheme,\n },\n }}\n >\n {props.children}\n </ConfigProviderWrapper>\n );\n }\n return props.children;\n};\n\n/**\n * antd Button包装组件\n * 1. 添加按钮 onClick 返回 Promise自定loading效果\n * 2. 添加指定时间内重复点击无效(默认间隙时间500ms)\n * @param props\n * @returns\n */\nexport const ButtonWrapper = (props: ButtonWrapperProps) => {\n const { loadingPosition, color, debounceDuration, permission, hidden, ...otherProps } = props;\n const [loading, setLoading] = useState(false);\n const loadingPositionNew = loadingPosition === undefined ? 'left' : loadingPosition;\n const isLoadingLeft = loadingPositionNew === 'left';\n const debounceDurationMew = isUndefinedOrNull(debounceDuration) ? 500 : debounceDuration;\n\n const onClick = hooks.useDebounceClick((e) => {\n const onClick = props.onClick;\n if (!onClick) {\n return;\n }\n const result = onClick(e);\n if (result && isPromise(result)) {\n setLoading(true);\n result\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, debounceDurationMew);\n\n if (!fbaUtils.hasPermission(permission)) {\n return null;\n }\n\n if (hidden) {\n return null;\n }\n\n if (isLoadingLeft) {\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick} loading={loading}>\n {props.children}\n </Button>\n </DefaultButton>\n );\n }\n\n return (\n <DefaultButton color={color} disabled={props.disabled} type={props.type}>\n <Button {...otherProps} onClick={onClick}>\n {loading && (\n <div className=\"bw-center-loading\">\n <LoadingOutlined />\n </div>\n )}\n {loading ? <div style={{ opacity: 0.5 }}>{props.children}</div> : props.children}\n </Button>\n </DefaultButton>\n );\n};\n"],"names":["DefaultButton","props","color","disabled","buttonTheme","type","colorLink","colorLinkActive","colorLinkHover","colorPrimary","colorPrimaryHover","colorPrimaryActive","colorText","colorBorder","_jsx","ConfigProviderWrapper","theme","components","Button","children","ButtonWrapper","loadingPosition","debounceDuration","permission","hidden","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","loading","setLoading","loadingPositionNew","undefined","isLoadingLeft","debounceDurationMew","isUndefinedOrNull","onClick","_hooks","useDebounceClick","e","result","_isPromise","catch","error","console","finally","fbaUtils","hasPermission","_extends","_jsxs","className","_LoadingOutlined","style","opacity"],"mappings":";ujBAqBA,IAAMA,EAAgB,SAAhBA,EAAiBC,GAMrB,GAAIA,EAAMC,QAAUD,EAAME,SAAU,CAClC,IAAIC,EAAuC,CAAA,EAC3C,GAAIH,EAAMI,OAAS,OAAQ,CACzBD,EAAc,CACZE,UAAWL,EAAMC,MACjBK,gBAAiBN,EAAMC,MACvBM,eAAgBP,EAAMC,MAE1B,MAAO,GAAID,EAAMI,OAAS,UAAW,CACnCD,EAAc,CACZK,aAAcR,EAAMC,MACpBQ,kBAAmBT,EAAMC,MACzBS,mBAAoBV,EAAMC,MAE9B,KAAO,CACLE,EAAc,CACZM,kBAAmBT,EAAMC,MACzBS,mBAAoBV,EAAMC,MAC1BU,UAAWX,EAAMC,MACjBW,YAAaZ,EAAMC,MAEvB,CAEA,OACEY,EAACC,EAAqB,CACpBC,MAAO,CACLC,WAAY,CACVC,OAAQd,IAEVe,SAEDlB,EAAMkB,UAGb,CACA,OAAOlB,EAAMkB,QACf,MASaC,EAAgB,SAAhBA,EAAiBnB,GAC5B,IAAQoB,EAAgFpB,EAAhFoB,gBAAiBnB,EAA+DD,EAA/DC,MAAOoB,EAAwDrB,EAAxDqB,iBAAkBC,EAAsCtB,EAAtCsB,WAAYC,EAA0BvB,EAA1BuB,OAAWC,EAAUC,EAAKzB,EAAK0B,GAC7F,IAAAC,EAA8BC,EAAS,OAAhCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAC1B,IAAMI,EAAqBX,IAAoBY,UAAY,OAASZ,EACpE,IAAMa,EAAgBF,IAAuB,OAC7C,IAAMG,EAAsBC,EAAkBd,GAAoB,IAAMA,EAExE,IAAMe,EAAUC,EAAMC,kBAAiB,SAACC,GACtC,IAAMH,EAAUpC,EAAMoC,QACtB,IAAKA,EAAS,CACZ,MACF,CACA,IAAMI,EAASJ,EAAQG,GACvB,GAAIC,GAAUC,EAAUD,GAAS,CAC/BV,EAAW,MACXU,EACGE,OAAM,SAACC,GACNC,QAAQD,MAAMA,EAChB,IACCE,SAAQ,WACPf,EAAW,MACb,GACJ,CACD,GAAEI,GAEH,IAAKY,EAASC,cAAczB,GAAa,CACvC,OAAO,IACT,CAEA,GAAIC,EAAQ,CACV,OAAO,IACT,CAEA,GAAIU,EAAe,CACjB,OACEpB,EAACd,EAAa,CAACE,MAAOA,EAAOC,SAAUF,EAAME,SAAUE,KAAMJ,EAAMI,KAAKc,SACtEL,EAACI,EAAM+B,KAAKxB,EAAU,CAAEY,QAASA,EAASP,QAASA,EAAQX,SACxDlB,EAAMkB,aAIf,CAEA,OACEL,EAACd,EAAa,CAACE,MAAOA,EAAOC,SAAUF,EAAME,SAAUE,KAAMJ,EAAMI,KAAKc,SACtE+B,EAAChC,EAAM+B,KAAKxB,EAAU,CAAEY,QAASA,EAAQlB,SAAA,CACtCW,GACChB,EAAA,MAAA,CAAKqC,UAAU,oBAAmBhC,SAChCL,EAAAsC,EAAA,MAGHtB,EAAUhB,EAAA,MAAA,CAAKuC,MAAO,CAAEC,QAAS,IAAMnC,SAAElB,EAAMkB,WAAkBlB,EAAMkB,cAIhF"}
@@ -1,3 +0,0 @@
1
- /*! @flatjs/forge MIT @flatbiz/antd */
2
- import e from"@ant-design/icons/es/icons/RedoOutlined";import{isString as r}from"@dimjs/lang/cjs/is-string";import{hooks as n}from"@wove/react/cjs/hooks";import{_ as t,a as o}from"./_rollupPluginBabelHelpers-1f4d8910.js";import{isUndefinedOrNull as u,toArray as s,valueIsEqual as i,arrayFind as a}from"@flatbiz/utils";import{Select as l,Button as c}from"antd";import{useState as f,useMemo as v,useRef as d}from"react";import{R as h}from"./request-status-03fc60e2.js";import{json as p}from"@dimjs/utils/cjs/json";import m from"pubsub-js";import{fbaHooks as g}from"./fba-hooks/index.js";import{isObject as C}from"@dimjs/lang/cjs/is-object";import{jsx as q,jsxs as w}from"react/jsx-runtime";var _=function e(r){var n=r.cacheKey,t=r.serviceConfig,o=r.hasOuterSelectorList,s=r.outerSelectorList,i=r.onRespDataChange,a=r.onSelectorRequestError,l=r.onChange,c=r.useCache;var d=t==null?void 0:t.params;var h=(t==null?void 0:t.requiredParamsKeys)||[];var C=d&&Object.keys(d).length>0;var q=f(),w=q[0],_=q[1];var b=f(),R=b[0],y=b[1];var S=f(Date.now()),L=S[0],j=S[1];var O=v((function(){try{if(C){var e=JSON.stringify(p.sort(d));if(e==="{}"){return undefined}return e}}catch(e){}return undefined}),[C,d]);var P=""+O;var A=O+"_status";var k=n+"_"+P;var E=g.usePrevious(O);var D=function e(r){return(t==null?void 0:t.onRequestResultAdapter==null?void 0:t.onRequestResultAdapter(r))||r||[]};var x=function e(){var r;return(r=window["__selector_wrapper_"])==null?void 0:r[n]};var K=function e(){var r;return(r=x())==null?void 0:r[P]};var N=function e(){var r;return(r=x())==null?void 0:r[A]};var I=function e(r,t){if(!window["__selector_wrapper_"]){window["__selector_wrapper_"]={}}if(!window["__selector_wrapper_"][n]){window["__selector_wrapper_"][n]={}}window["__selector_wrapper_"][n][r]=t};var M=function e(r){I(A,r);y(r)};var B=function e(){return new Promise((function(e,r){var n,o;var u=function(n){try{console.error(n);M("request-error");_(undefined);setTimeout((function(){m.publish(k,{status:"request-error"})}));a==null?void 0:a(n);return e(Promise.reject())}catch(e){return r(e)}};try{M("request-progress");return Promise.resolve(t==null?void 0:t.onRequest==null?void 0:t.onRequest(d||{})).then((function(r){try{n=r;o=D(n)||[];I(P,o);M("request-success");setTimeout((function(){m.publish(k,{status:"request-success",respData:o})}));return e(o)}catch(e){return u(e)}}),u)}catch(e){u(e)}}))};g.useEffectCustomAsync((function(){return new Promise((function(e,r){var n,f,v,p,g,C;if(o){y("request-success");_(s);i==null?void 0:i(s);return e()}if(h.length>0){n=d?h.find((function(e){return u(d[e])})):true;if(n){_([]);y("no-dependencies-params");if(E){l==null?void 0:l(undefined)}return e()}}if(c===false){var q=function(){try{return e()}catch(e){return r(e)}};var w=function(e){try{console.error(e);y("request-error");_(undefined);a==null?void 0:a(e);return q()}catch(e){return r(e)}};try{y("request-progress");return Promise.resolve(t==null?void 0:t.onRequest==null?void 0:t.onRequest(d||{})).then((function(e){try{f=e;v=D(f)||[];y("request-success");_(v);i==null?void 0:i(v);return q()}catch(e){return w(e)}}),w)}catch(e){w(e)}}p=N();if(p==="request-success"){g=K();_(g);y(p);i==null?void 0:i(g);return e()}if(p==="request-progress"){y(p);m.subscribe(k,(function(e,r){var n=r.status,t=r.respData;if(n==="request-success"){y(n);_(t);i==null?void 0:i(t)}else{y("request-error");_(undefined)}}));return e()}return Promise.resolve(B()).then((function(n){try{C=n;_(C);y("request-success");i==null?void 0:i(C);return e()}catch(e){return r(e)}}),r)}))}),[d,s,L]);var T=function e(){j(Date.now())};return{requestStatus:R,stateSelectorList:w,serviceRequestParamsStringify:O,onRefreshRequest:T}};var b=function e(r,n){var t=s(r);t=t.map((function(e){if(C(e))return e[n];return e}));return t};var R=["serviceConfig","showAllOption","onSelectorListChange","onSelectorListAllChange","onSelectorRequestError","onLabelRenderAdapter","requestMessageConfig","selectorList","modelKey","fieldNames","value","labelInValue","useCache"];var y=function u(f){var p=f.serviceConfig,m=f.showAllOption,g=f.onSelectorListChange,C=f.onSelectorListAllChange,y=f.onSelectorRequestError,S=f.onLabelRenderAdapter,L=f.requestMessageConfig,j=f.selectorList,O=f.modelKey,P=f.fieldNames,A=f.value,k=f.labelInValue,E=f.useCache,D=t(f,R);var x=d(true);var K=f.hasOwnProperty("selectorList");var N=o({label:"label",value:"value",disabled:"disabled"},P),I=N.label,M=N.value,B=N.disabled;var T=v((function(){var e;if(!m)return null;var r=m===true;return e={},e[I]=r?"全部":m.label,e[M]=r?"":m.value,e}),[I,M,m]);var V=i(f.mode,["multiple"]);var z=_({cacheKey:O,hasOuterSelectorList:K,onChange:f.onChange,serviceConfig:p,outerSelectorList:j,onRespDataChange:function e(r){if(x.current){g==null?void 0:g(r||[]);x.current=false}C==null?void 0:C(r||[])},onSelectorRequestError:y,useCache:E===undefined?true:E}),F=z.requestStatus,H=z.stateSelectorList,J=z.onRefreshRequest;var W=n.useCallbackRef((function(e){if(k){if(V){f.onChange==null?void 0:f.onChange(e,e)}else{f.onChange==null?void 0:f.onChange(e[0],e)}}else{var r=e.map((function(e){return e[M]}));if(V){f.onChange==null?void 0:f.onChange(r,e)}else{f.onChange==null?void 0:f.onChange(r[0],e[0])}}}));var G=n.useCallbackRef((function(e,r){if(!r)return f.onChange==null?void 0:f.onChange(undefined);var n=s(r);var t=[];n.forEach((function(e){if(m&&T&&e.value===T[M]){t.push(T)}else{var r=a(H||[],e.value,M);if(r){t.push(r)}}}));W(t)}));var Q=v((function(){if(F!=="request-success")return[];if(!H||H.length===0)return[];if(!T)return H;return[T].concat(H)}),[T,F,H]);var U=F==="request-progress";var X=v((function(){var e=b(A,M);return V?e:e[0]}),[V,M,A]);var Y=n.useCallbackRef((function(e,n){var t=s(n.children);var o="";t.forEach((function(e){if(r(e))o+=e}));return o.toLowerCase().indexOf(e.toLowerCase())>=0}));return q(l,o({showSearch:true,allowClear:true,dropdownMatchSelectWidth:false,filterOption:Y},D,{style:o({width:"100%"},f.style),value:X,loading:U,onChange:G,fieldNames:undefined,suffixIcon:F==="request-error"?q(e,{spin:U,onClick:J}):undefined,notFoundContent:q(h,{status:F,loading:U,messageConfig:o({"request-init":"暂无数据"},L),errorButton:q(c,{type:"primary",onClick:J,children:"重新获取数据"})}),children:Q.map((function(e,r){var n=e[M];var t=e[I];return w(l.Option,{value:n,label:t,disabled:e[B],children:[f.showIcon?q("span",{className:"v-selector-item-icon",children:f.icon==null?void 0:f.icon(e,r)}):null,S?S(e):t]},n+"-"+r)}))}))};export{y as S};
3
- //# sourceMappingURL=selector-wrapper-6560eb49.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selector-wrapper-6560eb49.js","sources":["@flatbiz/antd/src/selector-wrapper/use-request.ts","@flatbiz/antd/src/selector-wrapper/utils.ts","@flatbiz/antd/src/selector-wrapper/selector-wrapper.tsx"],"sourcesContent":["import { json } from '@dimjs/utils';\nimport { isUndefinedOrNull, TPlainObject } from '@flatbiz/utils';\nimport pubSub from 'pubsub-js';\nimport { useMemo, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { TRequestStatus } from '../request-status';\nimport { SelectorServiceConfig, SelectorWrapperProps } from './types';\n\nexport const useRequest = (options: {\n cacheKey: string;\n serviceConfig?: SelectorServiceConfig;\n hasOuterSelectorList?: boolean;\n onChange?: SelectorWrapperProps['onChange'];\n outerSelectorList?: SelectorWrapperProps['selectorList'];\n onRespDataChange?: (dataList?: TPlainObject[]) => void;\n onSelectorRequestError?: SelectorWrapperProps['onSelectorRequestError'];\n useCache: boolean;\n}) => {\n const {\n cacheKey,\n serviceConfig,\n hasOuterSelectorList,\n outerSelectorList,\n onRespDataChange,\n onSelectorRequestError,\n onChange,\n useCache,\n } = options;\n const serviceRequestParams = serviceConfig?.params;\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys || [];\n const hasServiceRequestParams = serviceRequestParams && Object.keys(serviceRequestParams).length > 0;\n\n const [stateSelectorList, setStateSelectorList] = useState<TPlainObject[]>();\n const [requestStatus, setRequestStatus] = useState<TRequestStatus>();\n const [refreshKey, setRefreshKey] = useState(Date.now());\n\n const serviceRequestParamsStringify = useMemo(() => {\n try {\n if (hasServiceRequestParams) {\n const sortDataStringify = JSON.stringify(json.sort(serviceRequestParams));\n if (sortDataStringify === '{}') {\n return undefined;\n }\n return sortDataStringify;\n }\n } catch (error) {}\n return undefined;\n }, [hasServiceRequestParams, serviceRequestParams]);\n // 将 undefined => 'undefined'\n const serviceRequestCahceKey = `${serviceRequestParamsStringify}`;\n const serviceRequestCahceStatusKey = `${serviceRequestParamsStringify}_status`;\n const pubSubKey = `${cacheKey}_${serviceRequestCahceKey}`;\n\n // 上一个参数值\n const prevServiceRequestParamsStringify = fbaHooks.usePrevious(serviceRequestParamsStringify);\n\n const serviceRespDataAdapter = (respData) => {\n return serviceConfig?.onRequestResultAdapter?.(respData as unknown as TPlainObject) || respData || [];\n };\n\n const getWindowCacheData = () => {\n return window['__selector_wrapper_']?.[cacheKey];\n };\n const getWindowCacheValue = () => {\n return getWindowCacheData()?.[serviceRequestCahceKey];\n };\n const getWindowCacheStatus = () => {\n return getWindowCacheData()?.[serviceRequestCahceStatusKey];\n };\n\n const setWindowCache = (key, value) => {\n if (!window['__selector_wrapper_']) {\n window['__selector_wrapper_'] = {};\n }\n if (!window['__selector_wrapper_'][cacheKey]) {\n window['__selector_wrapper_'][cacheKey] = {};\n }\n window['__selector_wrapper_'][cacheKey][key] = value;\n };\n\n const onChangeRequestStatus = (status: TRequestStatus) => {\n setWindowCache(serviceRequestCahceStatusKey, status);\n setRequestStatus(status);\n };\n\n const onRequest = async () => {\n try {\n onChangeRequestStatus('request-progress');\n\n const respData = await serviceConfig?.onRequest?.(serviceRequestParams || {});\n const respAdapterData = serviceRespDataAdapter(respData) || [];\n\n setWindowCache(serviceRequestCahceKey, respAdapterData);\n onChangeRequestStatus('request-success');\n setTimeout(() => {\n pubSub.publish(pubSubKey, {\n status: 'request-success',\n respData: respAdapterData,\n });\n });\n\n return respAdapterData;\n } catch (error) {\n console.error(error);\n onChangeRequestStatus('request-error');\n setStateSelectorList(undefined);\n setTimeout(() => {\n pubSub.publish(pubSubKey, {\n status: 'request-error',\n });\n });\n onSelectorRequestError?.(error);\n return Promise.reject();\n }\n };\n\n fbaHooks.useEffectCustomAsync(async () => {\n if (hasOuterSelectorList) {\n setRequestStatus('request-success');\n setStateSelectorList(outerSelectorList);\n onRespDataChange?.(outerSelectorList);\n return;\n }\n if (requiredParamsKeys.length > 0) {\n const isEmpty = serviceRequestParams\n ? requiredParamsKeys.find((key) => isUndefinedOrNull(serviceRequestParams[key]))\n : true;\n if (isEmpty) {\n // 当依赖项查询条件为空时,清空当前缓存数据\n setStateSelectorList([]);\n setRequestStatus('no-dependencies-params');\n /**\n * 怎么判断数据是从有到无的\n * 每一次 params 变少,只要 上一次 params 值存在,就应该清空 value 值\n */\n if (prevServiceRequestParamsStringify) {\n onChange?.(undefined);\n }\n return;\n }\n }\n\n // 不使用缓存模式\n if (useCache === false) {\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig?.onRequest?.(serviceRequestParams || {});\n const respAdapterData = serviceRespDataAdapter(respData) || [];\n setRequestStatus('request-success');\n setStateSelectorList(respAdapterData);\n onRespDataChange?.(respAdapterData);\n } catch (error) {\n console.error(error);\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n onSelectorRequestError?.(error);\n }\n return;\n }\n\n /**\n * 此处无法判断 调用props.onChange?.(undefined);\n * A、B、C\n * 例如:C依赖A、B,当外部只修改了一个元素,理论上应该应该清空C value 值(调用onChange(undefined)),如果此时外部直接回填A、B、C时,C无法回填成功;该场景只能在A、B的onChange事件中,清空C\n */\n // if (prevServiceRequestParamsStringify) {\n // props.onChange?.(undefined);\n // }\n\n const status = getWindowCacheStatus();\n if (status === 'request-success') {\n const dataList = getWindowCacheValue();\n setStateSelectorList(dataList);\n setRequestStatus(status);\n onRespDataChange?.(dataList);\n return;\n }\n if (status === 'request-progress') {\n setRequestStatus(status);\n pubSub.subscribe(pubSubKey, (_msg, { status, respData }) => {\n if (status === 'request-success') {\n setRequestStatus(status);\n setStateSelectorList(respData);\n onRespDataChange?.(respData);\n } else {\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n }\n });\n return;\n }\n const respAdapterData = await onRequest();\n setStateSelectorList(respAdapterData);\n setRequestStatus('request-success');\n onRespDataChange?.(respAdapterData);\n }, [serviceRequestParams, outerSelectorList, refreshKey]);\n\n const onRefreshRequest = () => {\n setRefreshKey(Date.now());\n };\n\n return {\n requestStatus,\n stateSelectorList,\n serviceRequestParamsStringify,\n onRefreshRequest,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { toArray } from '@flatbiz/utils';\n\n/**\n * value存在两种格式\n * 1. string | number;\n * 2. labelInValue 格式\n * @param data\n * @param labelInValueFieldNames\n * @returns\n */\nexport const getVauleList = (data, valueKey: string | number) => {\n let valueList = toArray<string | number>(data);\n valueList = valueList.map((item) => {\n if (isObject(item)) return item[valueKey];\n return item;\n });\n return valueList;\n};\n","import { arrayFind, TAny, toArray, TPlainObject, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Select } from 'antd';\nimport { useMemo, useRef } from 'react';\nimport './style.less';\n\nimport { RedoOutlined } from '@ant-design/icons';\nimport { isString } from '@dimjs/lang';\nimport { RequestStatus } from '../request-status';\nimport { SelectorWrapperProps } from './types';\nimport { useRequest } from './use-request';\nimport { getVauleList } from './utils';\nexport * from './types';\n/**\n * 选择器包装组件\n * ```\n * 1. 不支持搜索 + 调用服务模式\n * ```\n */\nexport const SelectorWrapper = (props: SelectorWrapperProps) => {\n const {\n serviceConfig,\n showAllOption,\n onSelectorListChange,\n onSelectorListAllChange,\n onSelectorRequestError,\n onLabelRenderAdapter,\n requestMessageConfig,\n selectorList: outerSelectorList,\n modelKey,\n fieldNames,\n value,\n labelInValue,\n useCache,\n ...otherProps\n } = props;\n\n const firstRenderSelectList = useRef(true);\n\n // props 是否存在 selectorList,selectorList = undefined 也算存在\n const hasOuterSelectorList = props.hasOwnProperty('selectorList');\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = { label: 'label', value: 'value', disabled: 'disabled', ...fieldNames };\n\n const allOptionConfig = useMemo(() => {\n if (!showAllOption) return null;\n const isTrue = showAllOption === true;\n return {\n [optionsItemLabelField]: isTrue ? '全部' : showAllOption.label,\n [optionsItemValueField]: isTrue ? '' : showAllOption.value,\n };\n }, [optionsItemLabelField, optionsItemValueField, showAllOption]);\n\n const isMultiple = valueIsEqual(props.mode, ['multiple']);\n\n const { requestStatus, stateSelectorList, onRefreshRequest } = useRequest({\n cacheKey: modelKey,\n hasOuterSelectorList,\n onChange: props.onChange,\n serviceConfig,\n outerSelectorList,\n onRespDataChange: (dataList) => {\n if (firstRenderSelectList.current) {\n onSelectorListChange?.(dataList || []);\n firstRenderSelectList.current = false;\n }\n onSelectorListAllChange?.(dataList || []);\n },\n onSelectorRequestError,\n useCache: useCache === undefined ? true : useCache,\n });\n\n const onRespChange = hooks.useCallbackRef((selectedList: TPlainObject[]) => {\n if (labelInValue) {\n if (isMultiple) {\n props.onChange?.(selectedList, selectedList);\n } else {\n props.onChange?.(selectedList[0], selectedList);\n }\n } else {\n const valueList = selectedList.map((item) => item[optionsItemValueField]);\n if (isMultiple) {\n props.onChange?.(valueList, selectedList);\n } else {\n props.onChange?.(valueList[0], selectedList[0]);\n }\n }\n });\n\n const onInnerChange = hooks.useCallbackRef((_value, otherParams) => {\n if (!otherParams) return props.onChange?.(undefined);\n const selectedList = toArray<TAny>(otherParams);\n const targetList = [] as TPlainObject[];\n selectedList.forEach((item) => {\n if (showAllOption && allOptionConfig && item.value === allOptionConfig[optionsItemValueField]) {\n targetList.push(allOptionConfig);\n } else {\n const filterTarget = arrayFind(stateSelectorList || [], item.value, optionsItemValueField);\n if (filterTarget) {\n targetList.push(filterTarget);\n }\n }\n });\n onRespChange(targetList);\n });\n\n const selectorAllList = useMemo(() => {\n if (requestStatus !== 'request-success') return [];\n if (!stateSelectorList || stateSelectorList.length === 0) return [];\n if (!allOptionConfig) return stateSelectorList;\n return [allOptionConfig].concat(stateSelectorList);\n }, [allOptionConfig, requestStatus, stateSelectorList]);\n\n const loading = requestStatus === 'request-progress';\n\n const selectValue = useMemo(() => {\n const targetList = getVauleList(value, optionsItemValueField);\n return isMultiple ? targetList : targetList[0];\n }, [isMultiple, optionsItemValueField, value]);\n\n const filterOption = hooks.useCallbackRef((input: string, option) => {\n const children = toArray(option.children);\n let mergeString = '';\n children.forEach((item) => {\n if (isString(item)) mergeString += item;\n });\n return mergeString.toLowerCase().indexOf(input.toLowerCase()) >= 0;\n });\n\n return (\n <Select\n showSearch={true}\n allowClear={true}\n dropdownMatchSelectWidth={false}\n filterOption={filterOption}\n {...otherProps}\n style={{ width: '100%', ...props.style }}\n value={selectValue}\n loading={loading}\n onChange={onInnerChange}\n fieldNames={undefined}\n suffixIcon={\n requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onRefreshRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={requestStatus}\n loading={loading}\n messageConfig={{\n 'request-init': '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={onRefreshRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {selectorAllList.map((item, index) => {\n const value = item[optionsItemValueField];\n const label = item[optionsItemLabelField];\n return (\n <Select.Option\n value={value}\n label={label}\n key={`${value}-${index}`}\n disabled={item[optionsItemDisabledField]}\n >\n {props.showIcon ? (\n <span className=\"v-selector-item-icon\">{props.icon?.(item, index)}</span>\n ) : null}\n {onLabelRenderAdapter ? onLabelRenderAdapter(item) : label}\n </Select.Option>\n );\n })}\n </Select>\n );\n};\n"],"names":["useRequest","options","cacheKey","serviceConfig","hasOuterSelectorList","outerSelectorList","onRespDataChange","onSelectorRequestError","onChange","useCache","serviceRequestParams","params","requiredParamsKeys","hasServiceRequestParams","Object","keys","length","_useState","useState","stateSelectorList","setStateSelectorList","_useState2","requestStatus","setRequestStatus","_useState3","Date","now","refreshKey","setRefreshKey","serviceRequestParamsStringify","useMemo","sortDataStringify","JSON","stringify","_json","sort","undefined","error","serviceRequestCahceKey","serviceRequestCahceStatusKey","pubSubKey","prevServiceRequestParamsStringify","fbaHooks","usePrevious","serviceRespDataAdapter","respData","onRequestResultAdapter","getWindowCacheData","_window$__selector_wr","window","getWindowCacheValue","_getWindowCacheData","getWindowCacheStatus","_getWindowCacheData2","setWindowCache","key","value","onChangeRequestStatus","status","onRequest","Promise","$return","$error","respAdapterData","$Try_2_Catch","console","setTimeout","pubSub","publish","reject","$boundEx","resolve","then","$await_5","useEffectCustomAsync","isEmpty","_respAdapterData","_dataList","find","isUndefinedOrNull","$Try_3_Post","$Try_3_Catch","$await_6","dataList","subscribe","_msg","_ref","$await_7","onRefreshRequest","getVauleList","data","valueKey","valueList","toArray","map","item","_isObject","SelectorWrapper","props","showAllOption","onSelectorListChange","onSelectorListAllChange","onLabelRenderAdapter","requestMessageConfig","selectorList","modelKey","fieldNames","labelInValue","otherProps","_objectWithoutPropertiesLoose","_excluded","firstRenderSelectList","useRef","hasOwnProperty","_label$value$disabled","_extends","label","disabled","optionsItemLabelField","optionsItemValueField","optionsItemDisabledField","allOptionConfig","isTrue","isMultiple","valueIsEqual","mode","_useRequest","current","onRespChange","_hooks","useCallbackRef","selectedList","onInnerChange","_value","otherParams","targetList","forEach","push","filterTarget","arrayFind","selectorAllList","concat","loading","selectValue","filterOption","input","option","children","mergeString","_isString","toLowerCase","indexOf","_jsx","Select","showSearch","allowClear","dropdownMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","messageConfig","errorButton","Button","type","index","_jsxs","Option","showIcon","className","icon"],"mappings":"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"}