@flatbiz/antd 4.5.29 → 4.5.31
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.
- package/esm/cascader-wrapper/index.js +1 -1
- package/esm/cascader-wrapper/index.js.map +1 -1
- package/esm/local-loading/index.css +1 -1
- package/esm/local-loading/index.js +1 -1
- package/esm/local-loading/index.js.map +1 -1
- package/esm/selector-wrapper/index.js.map +1 -1
- package/esm/tree-selector-wrapper/index.js +1 -1
- package/esm/tree-selector-wrapper/index.js.map +1 -1
- package/index.d.ts +27 -19
- package/package.json +3 -3
|
@@ -3,5 +3,5 @@ import './../fba-hooks/index.css';
|
|
|
3
3
|
import './../request-status/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{a as r,_ as s}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as n}from"@wove/react/cjs/hooks";import{isArray as o}from"@dimjs/lang/cjs/is-array";import{get as i}from"@dimjs/utils/cjs/get";import{extend as u}from"@dimjs/utils/cjs/extend";import{cloneState as a}from"@dimjs/model";import{
|
|
6
|
+
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{a as r,_ as s}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as n}from"@wove/react/cjs/hooks";import{isArray as o}from"@dimjs/lang/cjs/is-array";import{get as i}from"@dimjs/utils/cjs/get";import{extend as u}from"@dimjs/utils/cjs/extend";import{cloneState as a}from"@dimjs/model";import{cloneObject as l,treeNodeParentsList as c}from"@flatbiz/utils";import{Cascader as f,Button as d,message as m}from"antd";import{forwardRef as v,useState as p,useImperativeHandle as g}from"react";import{fbaHooks as h}from"../fba-hooks/index.js";import{RequestStatus as q}from"../request-status/index.js";import{Model as C}from"@dimjs/model-react";import{jsx as L}from"react/jsx-runtime";import"../use-responsive-point-21b8c601.js";var R={selectorList:[],queryIsEmpty:false,requestStatus:"request-init"};var S={actions:{setSelectBoxList:function e(t){return function(e){e.selectorList=t.selectorList||[];e.requestStatus="request-success"}},changeRequestStatus:function e(t){return function(e){e.requestStatus=t}}},state:R};var j={};var w=function e(t){if(!j[t]){j[t]=C(S)}return j[t]};var y=["serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange"];var b=v((function(v,C){var R=v.serviceConfig,S=v.modelKey,j=v.fieldNames,b=v.isDynamicLoad,x=v.requestMessageConfig,k=v.onSelectorListChange,B=r(v,y);var N=p([]),P=N[0],E=N[1];var D=h.useSafeState(false),K=D[0],A=D[1];var I=w(S).useStore(),M=I[0],_=I[1];var z="request-progress-"+v.modelKey;var F=u(true,{label:"label",value:"value",children:"children"},j);var H=p(),O=H[0],G=H[1];var J=function e(t){if(R!=null&&R.onRequestResultAdapter){return R.onRequestResultAdapter(t)}if(j!=null&&j.list){t=i(t,j==null?void 0:j.list)}if(!o(t)){console.warn("接口返回数据不是数组类型,已被忽略",t);return[]}return t};var Q=n.useCallbackRef((function(){return new Promise((function(e,t){var r,s;if(!(R!=null&&R.onRequest)){return t(new Error("onRequest 调用接口服务不能为空"))}var n=function(){try{return e()}catch(e){return t(e)}};var o=function(e){try{A(false);window[z]=false;void _.changeRequestStatus("request-error");void m.error(e.message||"获取数据异常");return n()}catch(e){return t(e)}};try{A(true);window[z]=true;void _.changeRequestStatus("request-progress");return Promise.resolve(R.onRequest==null?void 0:R.onRequest(R.params)).then((function(e){try{r=e;s=J(r);if(b){s.map((function(e){e.isLeaf=e.isLeaf||false}))}A(false);window[z]=false;void _.setSelectBoxList({selectorList:s||[]});k==null?void 0:k(s||[]);return n()}catch(e){return o(e)}}),o)}catch(e){o(e)}}))}));h.useEffectCustom((function(){if(window[z])return;if(M.requestStatus==="request-success"){E(a(M.selectorList))}else{void Q()}}),[]);h.useEffectCustom((function(){var e=l(M.selectorList);if(v.value){var t=c(v.value,e,true,F);if(t.length===0){G([v.value])}else{G(t)}}else{G(undefined)}E(e)}),[M.selectorList,v.value]);g(C,(function(){return{getCascaderList:function e(){return M.selectorList}}}));var T=n.useCallbackRef((function(){void Q()}));var U=function e(t){return new Promise((function(e,r){var n,o,i,u;o=t[t.length-1];o.loading=true;return Promise.resolve(R==null||R.onRequest==null?void 0:R.onRequest(s({},R.params,(n={},n[F.value]=o[F.value],n)))).then((function(t){try{i=t;u=J(i);if(!u||u.length===0){o.isLeaf=true}else{u.map((function(e){e.isLeaf=e.isLeaf||false}));o.children=u}o.loading=false;void _.setSelectBoxList({selectorList:P||[]});k==null?void 0:k(P||[]);E([].concat(P));return e()}catch(e){return r(e)}}),r)}))};var V=n.useCallbackRef((function(e,t){void(v.onChange==null?void 0:v.onChange(e==null?void 0:e[e.length-1],t))}));var W=n.useCallbackRef((function(){void(v.onChange==null?void 0:v.onChange(undefined))}));return L(f,s({showSearch:true,allowClear:true},B,{popupClassName:t("cascader-wrapper-popup",B.popupClassName),notFoundContent:L(q,{status:M.requestStatus,loading:K,messageConfig:x,errorButton:L(d,{type:"primary",onClick:T,children:"重新获取数据"})}),loading:K,loadData:b?U:undefined,fieldNames:F,suffixIcon:M.requestStatus==="request-error"?L(e,{spin:K,onClick:T}):undefined,options:P,value:O,multiple:false,onChange:V,onClear:W}))}));export{b as CascaderWrapper};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/cascader-wrapper.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend, get } from '@dimjs/utils';\nimport { TAny, TPlainObject, treeLeafParentsArray, treeToTiledArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<TAny>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange' | 'fieldNames'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 参数Key映射\n * ```\n * 1. 默认值:value=value、label=label、children=children\n * 2. list 为 onRequest 返回数据中列表key值,可多级取值,例如: 'a.b.c'\n * 3. 配置 serviceConfig.onRequestResultAdapter后,fieldNames.list配置失效\n * 4. 如果没有配置list,可说明接口返回为数组\n * ```\n */\n fieldNames?: { list?: string; label?: string; value?: string; children?: string };\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<TAny[]>([]);\n\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n if (serviceConfig?.onRequestResultAdapter) {\n return serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n }\n if (fieldNames?.list) {\n respData = get(respData, fieldNames?.list);\n }\n if (!isArray(respData)) {\n console.warn('接口返回数据不是数组类型,已被忽略', respData);\n return [];\n }\n return respData;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n fbaHooks.useEffectCustom(() => {\n const cloneList = cloneState(state.selectorList);\n if (props.value) {\n const filterList = treeLeafParentsArray(\n props.value,\n treeToTiledArray(cloneList, fieldNamesMerge),\n true,\n );\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList.map((item) => item.value) as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: TAny[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await serviceConfig?.onRequest?.({\n ...serviceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as TAny)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n"],"names":["defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","state","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","key","Model","CascaderWrapper","forwardRef","props","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","options","setOptions","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","_extend","label","value","children","_useState2","valueList","setValueList","serviceRespDataAdapter","respData","onRequestResultAdapter","list","_get","_isArray","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","message","resolve","then","$await_2","map","item","isLeaf","useEffectCustom","cloneState","cloneList","filterList","treeLeafParentsArray","treeToTiledArray","length","undefined","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","_extends","$await_3","concat","onChange","values","selectList","onClear","_jsx","Cascader","showSearch","allowClear","popupClassName","_classNames","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","suffixIcon","_RedoOutlined","spin","multiple"],"mappings":";s1BAgBA,IAAMA,EAA2B,CAC/BC,aAAc,GACdC,aAAc,MACdC,cAAe,gBAGjB,IAAMC,EAAkE,CACtEC,QAAS,CACPC,iBAAkB,SAAAA,EAACC,GACjB,OAAO,SAACC,GACNA,EAAMP,aAAeM,EAAON,cAAgB,GAC5CO,EAAML,cAAgB,kBAEzB,EACDM,oBAAqB,SAAAA,EAACF,GACpB,OAAO,SAACC,GACNA,EAAML,cAAgBI,EAE1B,GAEFC,MAAOR,GAGT,IAAMU,EAA6F,CAAA,EAQ5F,IAAMC,EAAuB,SAAvBA,EAAwBC,GACnC,IAAKF,EAAsBE,GAAM,CAC/BF,EAAsBE,GAAOC,EAAMT,EACrC,CACA,OAAOM,EAAsBE,EAC/B,gHCiBO,IAAME,EAAkBC,GAAwD,SAACC,EAAOC,GAC7F,IACEC,EAOEF,EAPFE,cACAC,EAMEH,EANFG,SACAC,EAKEJ,EALFI,WACAC,EAIEL,EAJFK,cACAC,EAGEN,EAHFM,qBACAC,EAEEP,EAFFO,qBACGC,EAAUC,EACXT,EAAKU,GACT,IAAAC,EAA8BC,EAAiB,IAAxCC,EAAOF,EAAA,GAAEG,EAAUH,EAAA,GAE1B,IAAAI,EAA8BC,EAASC,aAAa,OAA7CC,EAAOH,EAAA,GAAEI,EAAUJ,EAAA,GAC1B,IAAAK,EAAyBzB,EAAqBQ,GAAUkB,WAAjD7B,EAAK4B,EAAA,GAAE/B,EAAO+B,EAAA,GACrB,IAAME,EAAa,oBAAuBtB,EAAMG,SAChD,IAAMoB,EAAkBC,EAAO,KAAM,CAAEC,MAAO,QAASC,MAAO,QAASC,SAAU,YAAcvB,GAC/F,IAAAwB,EAAkChB,IAA3BiB,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAE9B,IAAMG,EAAyB,SAAzBA,EAA0BC,GAC9B,GAAI9B,GAAa,MAAbA,EAAe+B,uBAAwB,CACzC,OAAO/B,EAAc+B,uBAAuBD,EAC9C,CACA,GAAI5B,GAAU,MAAVA,EAAY8B,KAAM,CACpBF,EAAWG,EAAIH,EAAU5B,GAAAA,UAAAA,EAAAA,EAAY8B,KACvC,CACA,IAAKE,EAAQJ,GAAW,CACtBK,QAAQC,KAAK,oBAAqBN,GAClC,MAAO,EACT,CACA,OAAOA,GAGT,IAAMO,EAAyBC,EAAMC,gBAAe,WAAA,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GAAA,IAQ1CC,EACAC,EARR,KAAK5C,GAAa,MAAbA,EAAe6C,WAAW,CAC7B,OAAAH,EAAM,IAAII,MAAM,wBAClB,CAxGJ,IAAIC,aAAJ,IAAI,OAAAN,GAAK,CAAC,MAAAO,GAAW,OAAON,EAAAM,EAAM,GAAlC,IAAIC,EAAA,SA0HSC,GA1Hb,IA2HMjC,EAAW,OACXkC,OAAO/B,GAAiB,WACnBjC,EAAQI,oBAAoB,sBAC5B6D,EAAQF,MAAMA,EAAME,SAAW,UA9H1C,OAAOL,GAAE,CAAC,MAAAC,GAAW,OAAON,EAAAM,EAAM,GAyG9B,IACE/B,EAAW,MACXkC,OAAO/B,GAAiB,UACnBjC,EAAQI,oBAAoB,oBAChB,OAAAiD,QAAAa,QAAMrD,EAAc6C,WAAd7C,UAAAA,EAAAA,EAAc6C,UAAY7C,EAAcX,SAA9CiE,eAAqDC,GA7G5E,IA6GYzB,EAAWyB,EACXX,EAAkBf,EAAuBC,GAC/C,GAAI3B,EAAe,CACjByC,EAAgBY,KAAI,SAACC,GACnBA,EAAKC,OAASD,EAAKC,QAAU,KAC/B,GACF,CACAzC,EAAW,OACXkC,OAAO/B,GAAiB,WACnBjC,EAAQC,iBAAiB,CAC5BL,aAAc6D,GAAmB,KAEnCvC,eAAAA,EAAuBuC,GAAmB,IAzHhD,OAAOG,GAAE,CAAC,MAAAC,GAAW,OAAOC,EAAAD,EAAM,CAAC,GAAAC,EA0H9B,CAAC,MAAOC,GAAOD,EAAPC,EAKT,CAAC,OAGHpC,EAAS6C,iBAAgB,WACvB,GAAIR,OAAO/B,GAAgB,OAC3B,GAAI9B,EAAML,gBAAkB,kBAAmB,CAC7C2B,EAAWgD,EAAWtE,EAAMP,cAC9B,KAAO,MACAsD,GACP,CACD,GAAE,IAEHvB,EAAS6C,iBAAgB,WACvB,IAAME,EAAYD,EAAWtE,EAAMP,cACnC,GAAIe,EAAM0B,MAAO,CACf,IAAMsC,EAAaC,EACjBjE,EAAM0B,MACNwC,EAAiBH,EAAWxC,GAC5B,MAEF,GAAIyC,EAAWG,SAAW,EAAG,CAC3BrC,EAAa,CAAC9B,EAAM0B,OACtB,KAAO,CACLI,EAAakC,EAAWN,KAAI,SAACC,GAAI,OAAKA,EAAKjC,KAAK,IAClD,CACF,KAAO,CACLI,EAAasC,UACf,CACAtD,EAAWiD,EACZ,GAAE,CAACvE,EAAMP,aAAce,EAAM0B,QAE9B2C,EAAoBpE,GAAK,WACvB,MAAO,CACLqE,gBAAiB,SAAAA,IACf,OAAO9E,EAAMP,YACf,EAEJ,IAEA,IAAMsF,EAAiB/B,EAAMC,gBAAe,gBACrCF,GACP,IAEA,IAAMiC,EAAW,SAAXA,EAAkBC,GAAP,OAAA,IAAA/B,SAAA,SAAAC,EAAAC,GAAA,IAAA8B,EACTC,EAEA3C,EAIAc,EANA6B,EAAeF,EAAgBA,EAAgBN,OAAS,GAC9DQ,EAAazD,QAAU,KACN,OAAAwB,QAAAa,QAAMrD,GAAa,MAAbA,EAAe6C,WAAf7C,UAAAA,EAAAA,EAAe6C,UAAS6B,EAC1C1E,CAAAA,EAAAA,EAAcX,QAAMmF,EAAA,CAAA,EAAAA,EACtBnD,EAAgBG,OAAQiD,EAAapD,EAAgBG,OAAMgD,MAF7ClB,eAGfqB,GAhLN,IA6KU7C,EAAW6C,EAIX/B,EAAkBf,EAAuBC,GAC/C,IAAKc,GAAmBA,EAAgBqB,SAAW,EAAG,CACpDQ,EAAaf,OAAS,IACxB,KAAO,CACLd,EAAgBY,KAAI,SAACC,GACnBA,EAAKC,OAASD,EAAKC,QAAU,KAC/B,IACAe,EAAahD,SAAWmB,CAC1B,CACA6B,EAAazD,QAAU,WAClB7B,EAAQC,iBAAiB,CAC5BL,aAAc4B,GAAW,KAE3BN,eAAAA,EAAuBM,GAAW,IAClCC,EAAUgE,GAAAA,OAAKjE,IAAU,OAAA8B,GA/LpB,CAAC,MAAAO,GAAW,OAAON,EAAAM,EAAM,CAAC,GAAAN,EAgL7B,GAgBH,EAED,IAAMmC,EAAWvC,EAAMC,gBAAe,SAACuC,EAAgCC,QAChEjF,EAAM+E,UAAQ,UAAA,EAAd/E,EAAM+E,SAAWC,GAAM,UAAA,EAANA,EAASA,EAAOb,OAAS,GAAIc,GACrD,IAEA,IAAMC,EAAU1C,EAAMC,gBAAe,gBAC9BzC,EAAM+E,UAAQ,UAAA,EAAd/E,EAAM+E,SAAWX,WACxB,IAEA,OACEe,EAACC,EAAQR,EAAA,CACPS,WAAY,KACZC,WAAY,MACP9E,EAAU,CACf+E,eAAgBC,EAAW,yBAA0BhF,EAAW+E,gBAChEE,gBACEN,EAACO,EAAa,CACZC,OAAQnG,EAAML,cACd+B,QAASA,EACT0E,cAAetF,EACfuF,YACEV,EAACW,EAAM,CAACC,KAAK,UAAUC,QAASzB,EAAe5C,SAAC,aAMtDT,QAASA,EACTsD,SAAUnE,EAAgBmE,EAAWJ,UACrChE,WAAYmB,EACZ0E,WACEzG,EAAML,gBAAkB,gBACtBgG,EAAAe,EAAA,CAAcC,KAAMjF,EAAS8E,QAASzB,IACpCH,UAENvD,QAASA,EACTa,MAAOG,EACPuE,SAAU,MACVrB,SAAUA,EACVG,QAASA,IAGf"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/cascader-wrapper/model.ts","@flatbiz/antd/src/cascader-wrapper/cascader-wrapper.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject } from '@flatbiz/utils';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n selectorList: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: { selectorList: TPlainObject[] };\n changeRequestStatus: ModelState['requestStatus'];\n};\n\nconst defaultState: ModelState = {\n selectorList: [],\n queryIsEmpty: false,\n requestStatus: 'request-init',\n};\n\nconst _SelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.selectorList = params.selectorList || [];\n state.requestStatus = 'request-success';\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst cascaderWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = selectorWrapperModel('key值').useStore();\n * ```\n */\nexport const cascaderWrapperModel = (key: string) => {\n if (!cascaderWrapperModels[key]) {\n cascaderWrapperModels[key] = Model(_SelectorWrapperModel);\n }\n return cascaderWrapperModels[key];\n};\n","import { RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend, get } from '@dimjs/utils';\nimport { cloneObject, TAny, TPlainObject, treeNodeParentsList } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Cascader, CascaderProps, message } from 'antd';\nimport { forwardRef, ReactElement, useImperativeHandle, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { cascaderWrapperModel } from './model';\nimport './style.less';\n\ntype CascaderWrapperServiceConfig = {\n params?: TPlainObject;\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type CascaderWrapperProps = Omit<\n CascaderProps<TAny>,\n 'loading' | 'notFoundContent' | 'options' | 'value' | 'multiple' | 'onChange' | 'fieldNames'\n> & {\n // 模型唯一值\n modelKey: string;\n /**\n * 参数Key映射\n * ```\n * 1. 默认值:value=value、label=label、children=children\n * 2. list 为 onRequest 返回数据中列表key值,可多级取值,例如: 'a.b.c'\n * 3. 配置 serviceConfig.onRequestResultAdapter后,fieldNames.list配置失效\n * 4. 如果没有配置list,可说明接口返回为数组\n * ```\n */\n fieldNames?: { list?: string; label?: string; value?: string; children?: string };\n /**\n * 请求服务需求的数据,当设置`selectorList`后无效果\n */\n serviceConfig?: CascaderWrapperServiceConfig;\n // label渲染适配器\n onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;\n onSelectorListChange?: (dataList: TPlainObject[]) => void;\n /**\n * 是否动态加载选项\n */\n isDynamicLoad?: boolean;\n value?: string | number;\n onChange?: (value?: string | number, selectedList?: TPlainObject[]) => void;\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n};\n\nexport type CascaderWrapperRefApi = {\n getCascaderList: () => TPlainObject[];\n};\n/**\n * 级联选择器包装组件,接收value和相应data都是叶子节点数据\n * @param props\n * @returns\n * ```\n * 1. 数据源中 value 不能重复\n * 2. 不支持多选\n * 3. modelKey的配置是为了缓存数据,只缓存初始化数据,如果isDynamicLoad=true,动态获取的数据不再缓存\n * 4. onChange操作第一个参数返回叶子节点value,第二个参数返回选中的多级数据\n * 5. isDynamicLoad=true 会在请求中添加当前选中option的fieldNames.value为key的数据\n * ```\n */\nexport const CascaderWrapper = forwardRef<CascaderWrapperRefApi, CascaderWrapperProps>((props, ref) => {\n const {\n serviceConfig,\n modelKey,\n fieldNames,\n isDynamicLoad,\n requestMessageConfig,\n onSelectorListChange,\n ...otherProps\n } = props;\n const [options, setOptions] = useState<TAny[]>([]);\n\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [state, actions] = cascaderWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNamesMerge = extend(true, { label: 'label', value: 'value', children: 'children' }, fieldNames);\n const [valueList, setValueList] = useState<string[]>();\n\n const serviceRespDataAdapter = (respData) => {\n if (serviceConfig?.onRequestResultAdapter) {\n return serviceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n }\n if (fieldNames?.list) {\n respData = get(respData, fieldNames?.list);\n }\n if (!isArray(respData)) {\n console.warn('接口返回数据不是数组类型,已被忽略', respData);\n return [];\n }\n return respData;\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!serviceConfig?.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const respData = await serviceConfig.onRequest?.(serviceConfig.params);\n const respAdapterData = serviceRespDataAdapter(respData);\n if (isDynamicLoad) {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n }\n setLoading(false);\n window[requestPreKey] = false;\n void actions.setSelectBoxList({\n selectorList: respAdapterData || [],\n });\n onSelectorListChange?.(respAdapterData || []);\n } catch (error) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n void message.error(error.message || '获取数据异常');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (window[requestPreKey]) return;\n if (state.requestStatus === 'request-success') {\n setOptions(cloneState(state.selectorList));\n } else {\n void startDataSourceRequest();\n }\n }, []);\n\n fbaHooks.useEffectCustom(() => {\n const cloneList = cloneObject(state.selectorList);\n if (props.value) {\n const filterList = treeNodeParentsList(props.value, cloneList, true, fieldNamesMerge);\n if (filterList.length === 0) {\n setValueList([props.value as string]);\n } else {\n setValueList(filterList as string[]);\n }\n } else {\n setValueList(undefined);\n }\n setOptions(cloneList);\n }, [state.selectorList, props.value]);\n\n useImperativeHandle(ref, () => {\n return {\n getCascaderList: () => {\n return state.selectorList;\n },\n };\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const loadData = async (selectedOptions: TAny[]) => {\n const targetOption = selectedOptions[selectedOptions.length - 1];\n targetOption.loading = true;\n const respData = await serviceConfig?.onRequest?.({\n ...serviceConfig.params,\n [fieldNamesMerge.value]: targetOption[fieldNamesMerge.value],\n });\n const respAdapterData = serviceRespDataAdapter(respData);\n if (!respAdapterData || respAdapterData.length === 0) {\n targetOption.isLeaf = true;\n } else {\n respAdapterData.map((item) => {\n item.isLeaf = item.isLeaf || false;\n });\n targetOption.children = respAdapterData;\n }\n targetOption.loading = false;\n void actions.setSelectBoxList({\n selectorList: options || [],\n });\n onSelectorListChange?.(options || []);\n setOptions([...options]);\n };\n\n const onChange = hooks.useCallbackRef((values: Array<string | number>, selectList) => {\n void props.onChange?.(values?.[values.length - 1], selectList);\n });\n\n const onClear = hooks.useCallbackRef(() => {\n void props.onChange?.(undefined);\n });\n\n return (\n <Cascader\n showSearch={true}\n allowClear={true}\n {...(otherProps as TAny)}\n popupClassName={classNames('cascader-wrapper-popup', otherProps.popupClassName)}\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={requestMessageConfig}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n loading={loading}\n loadData={isDynamicLoad ? loadData : undefined}\n fieldNames={fieldNamesMerge}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n options={options}\n value={valueList}\n multiple={false}\n onChange={onChange}\n onClear={onClear}\n />\n );\n});\n"],"names":["defaultState","selectorList","queryIsEmpty","requestStatus","_SelectorWrapperModel","actions","setSelectBoxList","params","state","changeRequestStatus","cascaderWrapperModels","cascaderWrapperModel","key","Model","CascaderWrapper","forwardRef","props","ref","serviceConfig","modelKey","fieldNames","isDynamicLoad","requestMessageConfig","onSelectorListChange","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","options","setOptions","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_cascaderWrapperModel","useStore","requestPreKey","fieldNamesMerge","_extend","label","value","children","_useState2","valueList","setValueList","serviceRespDataAdapter","respData","onRequestResultAdapter","list","_get","_isArray","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","_respData","respAdapterData","onRequest","Error","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","message","resolve","then","$await_2","map","item","isLeaf","useEffectCustom","cloneState","cloneList","cloneObject","filterList","treeNodeParentsList","length","undefined","useImperativeHandle","getCascaderList","onAgainRequest","loadData","selectedOptions","_extends2","targetOption","_extends","$await_3","concat","onChange","values","selectList","onClear","_jsx","Cascader","showSearch","allowClear","popupClassName","_classNames","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","suffixIcon","_RedoOutlined","spin","multiple"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.local-loading-error{align-items:center;display:flex;height:100%;justify-content:center;position:relative}.local-loading-error .ant-result-icon{margin-bottom:10px!important}.local-loading-error .ant-result-icon .anticon{font-size:30px!important}.local-loading-error .ant-result-title{font-size:16px!important}.local-loading-error .ant-result-extra{margin-top:10px!important}.local-loading-error .ant-result-error{padding:24px 16px!important}.local-loading-area{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:9}.fba-local-loading{overflow:hidden;position:relative}.local-loading-content{height:100%;overflow-y:auto}
|
|
1
|
+
.local-loading-error{align-items:center;display:flex;height:100%;justify-content:center;position:relative}.local-loading-error .ant-result-icon{margin-bottom:10px!important}.local-loading-error .ant-result-icon .anticon{font-size:30px!important}.local-loading-error .ant-result-title{font-size:16px!important}.local-loading-error .ant-result-extra{margin-top:10px!important}.local-loading-error .ant-result-error{padding:24px 16px!important}.local-loading-area{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:9}.fba-local-loading{overflow:hidden;position:relative}.local-loading-content{height:100%;overflow-y:auto}.local-loading-spin,.local-loading-spin-wrapper{align-items:center;background-color:var(--local-loading-spin-bgColor);border-radius:5px;display:flex;height:100%;justify-content:center;position:absolute;width:100%}
|
|
@@ -3,5 +3,5 @@ import './../fba-utils/index.css';
|
|
|
3
3
|
import './../fba-hooks/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import{fbaUtils as r}from"../fba-utils/index.js";import{createCtx as e}from"@wove/react/cjs/create-ctx";import{classNames as
|
|
6
|
+
import{fbaUtils as r}from"../fba-utils/index.js";import{createCtx as e}from"@wove/react/cjs/create-ctx";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{isDeepEqual as a}from"@dimjs/lang/cjs/is-deep-equal";import{hooks as i}from"@wove/react/cjs/hooks";import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{getValueOrDefault as o,toArray as s,isUndefinedOrNull as l}from"@flatbiz/utils";import{Result as c,Button as u,Spin as m}from"antd";import{forwardRef as d,useState as f,useRef as p,useMemo as v,useImperativeHandle as g,Fragment as h}from"react";import{fbaHooks as y}from"../fba-hooks/index.js";import{jsx as b,jsxs as j}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../use-responsive-point-21b8c601.js";var N=e(),C=N[0],P=N[1];var q=d((function(r,e){var d=r.serviceConfig,N=r.isAsync,C=r.children,q=r.errorRender,R=r.loadingSpinProps,w=r.textConfigs,x=r.showRequiredError;var k=f("init"),E=k[0],L=k[1];var T=f(),H=T[0],K=T[1];var z=r.loadingHeight===undefined?100:r.loadingHeight;var A=f(false),S=A[0],_=A[1];var B=p();var D=p(true);var F=y.usePrevious(d.params);var G=o(R==null?void 0:R.content,b("span",{}));var I=o(R==null?void 0:R.bgColor,"rgba(0,0,0,0.01)");var J=o(R==null?void 0:R.tip,"Loading");var M=w==null?void 0:w.requiredErrorText;var O=v((function(){var r;if(!d.params||s(d.invalidParamKey).length===0){return d.params}var e=t({},d.params);(r=d.invalidParamKey)==null?void 0:r.forEach((function(r){e[r]=undefined}));return e}),[d]);var Q=i.useCallbackRef((function(r){var e=d==null?void 0:d.requiredParamsKeys;if(e!=null&&e.length){var n=e.find((function(e){return l(r==null?void 0:r[e])}));if(n){return{complete:false,message:M||"LocalLoading渲染缺少必填参数:"+e.join("、")}}}return{complete:true}}));var U=v((function(){return Q(d.params)}),[Q,d.params]);var V=function r(e){return new Promise((function(r,n){var a=function(r){return function(e){try{_(false);return r&&r.call(this,e)}catch(r){return n(r)}}.bind(this)}.bind(this);var i,o;var s=function(){try{return r()}catch(r){return n(r)}};var l=function(r){try{console.error(r);L("error");B.current=r.message;D.current=false;return a(s)()}catch(r){return a(n)(r)}};try{i=t({},O,e);_(true);return Promise.resolve(d.onRequest(i)).then((function(r){try{o=r;L("success");K(o);D.current=false;return a(s)()}catch(r){return l(r)}}),l)}catch(r){l(r)}}))};y.useEffectCustomAsync((function(){return new Promise((function(r,e){if(U.complete){return Promise.resolve(V()).then(function(r){try{return n.call(this)}catch(r){return e(r)}}.bind(this),e)}function n(){return r()}return n.call(this)}))}),[]);y.useEffectCustom((function(){if(U.complete){if(F){if(!a(d.params,F)){if(E==="error"){L("init")}void V()}}}}),[F,d.params]);g(e,(function(){return{onRefresh:V}}));if(!U.complete){if(D.current||!x){return b(h,{})}return b(P,{value:{onRequest:V},children:j("div",{className:n("local-loading-error",r.className),children:[b("div",{className:"local-loading-area"}),b(c,{status:"error",subTitle:U.message})]})})}if(E==="error"){if(q){return q({message:B.current})}return b(P,{value:{onRequest:V},children:j("div",{className:n("local-loading-error",r.className),children:[b("div",{className:"local-loading-area"}),b(c,{status:"error",subTitle:B.current||"数据处理异常",extra:[b(u,{type:"primary",ghost:true,size:"small",onClick:function r(){L("init");void V()},children:"重新获取"},"console")]})]})})}if(E!=="success"&&!N){return b("div",{className:n("fba-local-loading-process",r.className),style:{height:z,display:"flex",justifyContent:"center",position:"relative",backgroundColor:"var(--block-bg-color)"},children:b(m,{spinning:S,tip:J,wrapperClassName:"local-loading-spin-wrapper",className:"local-loading-spin",style:{"--local-loading-spin-bgColor":I},children:G})})}return b(P,{value:{onRequest:V},children:j("div",{className:n("fba-local-loading",r.className),style:r.style,children:[S?b(m,{spinning:S,tip:J,wrapperClassName:"local-loading-spin-wrapper",className:"local-loading-spin",style:{"--local-loading-spin-bgColor":I},children:G}):null,b("div",{className:"local-loading-content",style:r.contentStyle,children:C(H)})]})})}));var R=r.attachPropertiesToComponent(q,{useLocalLoading:function r(){var e=C();return{onRequest:function r(n){e.onRequest(n)}}}});export{R as LocalLoading};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/context.ts","@flatbiz/antd/src/local-loading/local-loading.tsx","@flatbiz/antd/src/local-loading/index.ts"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useLocalLoadingCtx, LocalLoadingCtxProvider] = createCtx<{\n onRequest: (params?: TPlainObject) => void;\n}>();\n","import { isDeepEqual } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { TAny, toArray, TPlainObject } from '@flatbiz/utils';\nimport { Button, Result, Spin } from 'antd';\nimport {\n CSSProperties,\n forwardRef,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { LocalLoadingCtxProvider } from './context';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TAny>;\n params?: TPlainObject;\n /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */\n invalidParamKey?: string[];\n};\n\nexport interface LocalLoadingProps {\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number | string;\n className?: string;\n style?: CSSProperties;\n contentStyle?: CSSProperties;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: (params?: TPlainObject) => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 获取服务数据\n * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * ```\n */\nexport const LocalLoadingInner = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender } = props;\n const [status, setStatus] = useState<'success' | 'error' | 'init'>('init');\n const [respData, setRespData] = useState<TAny>();\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n const rootRef = useRef<HTMLDivElement>(null);\n const [loading, setLoading] = useState<boolean>(true);\n const errorRef = useRef<string>();\n\n const prevParams = fbaHooks.usePrevious(serviceConfig.params);\n\n // 用于直接发起接口调用,不能用于比较\n const serviceParams = useMemo(() => {\n if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {\n return serviceConfig.params;\n }\n const newParams = { ...serviceConfig.params };\n serviceConfig.invalidParamKey?.forEach((key) => {\n newParams[key] = undefined;\n });\n return newParams;\n }, [serviceConfig]);\n\n const onInitRequest = async (params?: TPlainObject) => {\n try {\n setLoading(true);\n const respData = await serviceConfig.onRequest({\n ...serviceParams,\n ...params,\n });\n setStatus('success');\n setRespData(respData);\n } catch (error: TAny) {\n console.error(error);\n setStatus('error');\n errorRef.current = error.message;\n } finally {\n setLoading(false);\n }\n };\n\n fbaHooks.useEffectCustomAsync(onInitRequest, []);\n\n fbaHooks.useEffectCustom(() => {\n if (prevParams) {\n if (!isDeepEqual(serviceConfig.params, prevParams)) {\n void onInitRequest();\n }\n }\n }, [prevParams, serviceConfig.params]);\n\n useImperativeHandle(ref, () => {\n return { onRefresh: onInitRequest };\n });\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender({ message: errorRef.current });\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\" ref={rootRef}></div>\n <Result\n status=\"error\"\n subTitle={errorRef.current || '数据处理异常'}\n extra={[\n <Button\n type=\"primary\"\n ghost\n key=\"console\"\n size=\"small\"\n onClick={() => {\n setStatus('init');\n void onInitRequest();\n }}\n >\n 重新获取\n </Button>,\n ]}\n />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status !== 'success' && !isAsync) {\n return (\n <div\n className={classNames('fba-local-loading-process', props.className)}\n style={{\n height: loadingHeight,\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n backgroundColor: 'var(--block-bg-color)',\n }}\n >\n <Spin\n spinning={loading}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n height: '100%',\n width: '100%',\n }}\n />\n </div>\n );\n }\n\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('fba-local-loading', props.className)} style={props.style}>\n {loading ? (\n <Spin\n spinning={true}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n height: '100%',\n width: '100%',\n }}\n />\n ) : null}\n <div className=\"local-loading-content\" style={props.contentStyle}>\n {children(respData)}\n </div>\n </div>\n </LocalLoadingCtxProvider>\n );\n});\n","import { TPlainObject } from '@flatbiz/utils';\nimport { fbaUtils } from '../fba-utils';\nimport { useLocalLoadingCtx } from './context';\nimport { LocalLoadingInner } from './local-loading';\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 获取服务数据\n * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * ```\n */\nexport const LocalLoading = fbaUtils.attachPropertiesToComponent(LocalLoadingInner, {\n useLocalLoading: () => {\n const ctx = useLocalLoadingCtx();\n return {\n onRequest: (params?: TPlainObject) => {\n ctx.onRequest(params);\n },\n };\n },\n});\n"],"names":["_createCtx","_createCtx2","useLocalLoadingCtx","LocalLoadingCtxProvider","LocalLoadingInner","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","_useState","useState","status","setStatus","_useState2","respData","setRespData","loadingHeight","undefined","rootRef","useRef","_useState3","loading","setLoading","errorRef","prevParams","fbaHooks","usePrevious","params","serviceParams","useMemo","_serviceConfig$invali","toArray","invalidParamKey","length","newParams","_extends","forEach","key","onInitRequest","Promise","$return","$error","$Try_1_Finally","$Try_1_Exit","$Try_1_Value","call","this","$boundEx","bind","_respData","$Try_1_Post","$Try_1_Catch","error","console","current","message","resolve","onRequest","then","$await_2","useEffectCustomAsync","useEffectCustom","_isDeepEqual","useImperativeHandle","onRefresh","_jsx","value","_jsxs","className","_classNames","Result","subTitle","extra","Button","type","ghost","size","onClick","style","height","display","justifyContent","position","backgroundColor","Spin","spinning","alignItems","width","contentStyle","LocalLoading","fbaUtils","attachPropertiesToComponent","useLocalLoading","ctx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/local-loading/context.ts","@flatbiz/antd/src/local-loading/local-loading.tsx","@flatbiz/antd/src/local-loading/index.ts"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useLocalLoadingCtx, LocalLoadingCtxProvider] = createCtx<{\n onRequest: (params?: TPlainObject) => void;\n}>();\n","import { isDeepEqual } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\nimport { getValueOrDefault, isUndefinedOrNull, TAny, toArray, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, Result, Spin } from 'antd';\nimport {\n CSSProperties,\n forwardRef,\n Fragment,\n ReactElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { LocalLoadingCtxProvider } from './context';\nimport './style.less';\n\nexport type LocalLoadingServiceConfig = {\n onRequest: (params?: TAny) => Promise<TAny>;\n params?: TPlainObject;\n /** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */\n invalidParamKey?: string[];\n /** 必填字段设置 */\n requiredParamsKeys?: string[];\n};\n\nexport interface LocalLoadingProps {\n className?: string;\n style?: CSSProperties;\n contentStyle?: CSSProperties;\n /** 接口数据配置 */\n serviceConfig: LocalLoadingServiceConfig;\n /** children 为函数,参数【respData】为接口返回数据 */\n children: (respData?: TAny) => ReactElement;\n /**\n * 是否异步,默认:false\n * ```\n * true(异步):onRequest、react dom渲染同步执行\n * false(同步):onRequest有结果了才渲染 react dom\n * ```\n */\n isAsync?: boolean;\n /** loading高度,默认值:100;isAsync = true 无效 */\n loadingHeight?: number | string;\n /** loading spin 属性设置 */\n loadingSpinProps?: {\n /** loading tip,默认值:Loading */\n tip?: string;\n /** loading 内容 */\n content?: ReactElement;\n /** 背景色,默认值:rgba(0,0,0,0.01) */\n bgColor?: string;\n };\n textConfigs?: {\n /** 必填异常文本 */\n requiredErrorText?: string;\n };\n /** 是否显示必填异常 */\n showRequiredError?: boolean;\n /** 自定义异常渲染处理 */\n errorRender?: (error?: TAny) => ReactElement;\n}\n\nexport type LocalLoadingRefApi = {\n onRefresh: (params?: TPlainObject) => void;\n};\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 获取服务数据\n * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 5. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 5. 通过 ref.onRequest 可主动发起服务调用\n * ```\n */\nexport const LocalLoadingInner = forwardRef<LocalLoadingRefApi, LocalLoadingProps>((props, ref) => {\n const { serviceConfig, isAsync, children, errorRender, loadingSpinProps, textConfigs, showRequiredError } =\n props;\n const [status, setStatus] = useState<'success' | 'error' | 'required_error' | 'init'>('init');\n const [respData, setRespData] = useState<TAny>();\n const loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;\n const [loading, setLoading] = useState<boolean>(false);\n const errorRef = useRef<string>();\n const hiddenRequiredErrorRenderRef = useRef(true);\n\n const prevParams = fbaHooks.usePrevious(serviceConfig.params);\n\n const loadingSpinContent = getValueOrDefault(loadingSpinProps?.content, <span />);\n const loadingSpinBgColor = getValueOrDefault(loadingSpinProps?.bgColor, 'rgba(0,0,0,0.01)');\n const loadingSpinTip = getValueOrDefault(loadingSpinProps?.tip, 'Loading');\n\n const requiredErrorText = textConfigs?.requiredErrorText;\n\n // 用于直接发起接口调用,不能用于比较\n const serviceParams = useMemo(() => {\n if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {\n return serviceConfig.params;\n }\n const newParams = { ...serviceConfig.params };\n serviceConfig.invalidParamKey?.forEach((key) => {\n newParams[key] = undefined;\n });\n return newParams;\n }, [serviceConfig]);\n\n // 判断必要参数是否完整\n const validateRequiredParamsComplete = hooks.useCallbackRef((params?: TPlainObject) => {\n const keys = serviceConfig?.requiredParamsKeys;\n if (keys?.length) {\n const target = keys.find((item) => {\n return isUndefinedOrNull(params?.[item]);\n });\n if (target) {\n return {\n complete: false,\n message: requiredErrorText || `LocalLoading渲染缺少必填参数:${keys.join('、')}`,\n };\n }\n }\n return { complete: true };\n });\n\n const completeResult = useMemo(() => {\n return validateRequiredParamsComplete(serviceConfig.params);\n }, [validateRequiredParamsComplete, serviceConfig.params]);\n\n const onInitRequest = async (params?: TPlainObject) => {\n try {\n const mergeProps = { ...serviceParams, ...params };\n setLoading(true);\n const respData = await serviceConfig.onRequest(mergeProps);\n setStatus('success');\n setRespData(respData);\n hiddenRequiredErrorRenderRef.current = false;\n } catch (error: TAny) {\n console.error(error);\n setStatus('error');\n errorRef.current = error.message;\n hiddenRequiredErrorRenderRef.current = false;\n } finally {\n setLoading(false);\n }\n };\n\n fbaHooks.useEffectCustomAsync(async () => {\n if (completeResult.complete) {\n await onInitRequest();\n }\n }, []);\n\n fbaHooks.useEffectCustom(() => {\n if (completeResult.complete) {\n if (prevParams) {\n if (!isDeepEqual(serviceConfig.params, prevParams)) {\n if (status === 'error') {\n setStatus('init');\n }\n void onInitRequest();\n }\n }\n }\n }, [prevParams, serviceConfig.params]);\n\n useImperativeHandle(ref, () => {\n return { onRefresh: onInitRequest };\n });\n\n if (!completeResult.complete) {\n if (hiddenRequiredErrorRenderRef.current || !showRequiredError) {\n return <Fragment />;\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result status=\"error\" subTitle={completeResult.message} />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status === 'error') {\n if (errorRender) {\n return errorRender({ message: errorRef.current });\n }\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('local-loading-error', props.className)}>\n <div className=\"local-loading-area\"></div>\n <Result\n status=\"error\"\n subTitle={errorRef.current || '数据处理异常'}\n extra={[\n <Button\n type=\"primary\"\n ghost\n key=\"console\"\n size=\"small\"\n onClick={() => {\n setStatus('init');\n void onInitRequest();\n }}\n >\n 重新获取\n </Button>,\n ]}\n />\n </div>\n </LocalLoadingCtxProvider>\n );\n }\n\n if (status !== 'success' && !isAsync) {\n return (\n <div\n className={classNames('fba-local-loading-process', props.className)}\n style={{\n height: loadingHeight,\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n backgroundColor: 'var(--block-bg-color)',\n }}\n >\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n </div>\n );\n }\n\n return (\n <LocalLoadingCtxProvider value={{ onRequest: onInitRequest }}>\n <div className={classNames('fba-local-loading', props.className)} style={props.style}>\n {loading ? (\n <Spin\n spinning={loading}\n tip={loadingSpinTip}\n wrapperClassName=\"local-loading-spin-wrapper\"\n className=\"local-loading-spin\"\n style={\n {\n '--local-loading-spin-bgColor': loadingSpinBgColor,\n } as CSSProperties\n }\n >\n {loadingSpinContent}\n </Spin>\n ) : null}\n <div className=\"local-loading-content\" style={props.contentStyle}>\n {children(respData)}\n </div>\n </div>\n </LocalLoadingCtxProvider>\n );\n});\n","import { TPlainObject } from '@flatbiz/utils';\nimport { fbaUtils } from '../fba-utils';\nimport { useLocalLoadingCtx } from './context';\nimport { LocalLoadingInner } from './local-loading';\n\n/**\n * 局部加载,包含接口数据处理逻辑\n * ```\n * 包括\n * 1. loading显示效果\n * 2. error显示效果\n * 3. 获取服务数据\n * 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用\n * 5. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段\n * 5. 通过 ref.onRequest 可主动发起服务调用\n * ```\n */\nexport const LocalLoading = fbaUtils.attachPropertiesToComponent(LocalLoadingInner, {\n useLocalLoading: () => {\n const ctx = useLocalLoadingCtx();\n return {\n onRequest: (params?: TPlainObject) => {\n ctx.onRequest(params);\n },\n };\n },\n});\n"],"names":["_createCtx","_createCtx2","useLocalLoadingCtx","LocalLoadingCtxProvider","LocalLoadingInner","forwardRef","props","ref","serviceConfig","isAsync","children","errorRender","loadingSpinProps","textConfigs","showRequiredError","_useState","useState","status","setStatus","_useState2","respData","setRespData","loadingHeight","undefined","_useState3","loading","setLoading","errorRef","useRef","hiddenRequiredErrorRenderRef","prevParams","fbaHooks","usePrevious","params","loadingSpinContent","getValueOrDefault","content","_jsx","loadingSpinBgColor","bgColor","loadingSpinTip","tip","requiredErrorText","serviceParams","useMemo","_serviceConfig$invali","toArray","invalidParamKey","length","newParams","_extends","forEach","key","validateRequiredParamsComplete","_hooks","useCallbackRef","keys","requiredParamsKeys","target","find","item","isUndefinedOrNull","complete","message","join","completeResult","onInitRequest","Promise","$return","$error","$Try_1_Finally","$Try_1_Exit","$Try_1_Value","call","this","$boundEx","bind","mergeProps","_respData","$Try_1_Post","$Try_1_Catch","error","console","current","resolve","onRequest","then","$await_3","useEffectCustomAsync","$await_4","$If_2","useEffectCustom","_isDeepEqual","useImperativeHandle","onRefresh","Fragment","value","_jsxs","className","_classNames","Result","subTitle","extra","Button","type","ghost","size","onClick","style","height","display","justifyContent","position","backgroundColor","Spin","spinning","wrapperClassName","contentStyle","LocalLoading","fbaUtils","attachPropertiesToComponent","useLocalLoading","ctx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.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 { isArray, isDeepEqual } from '@dimjs/lang';\nimport { get, json } from '@dimjs/utils';\nimport { isUndefinedOrNull, type TPlainObject } from '@flatbiz/utils';\nimport pubSub from 'pubsub-js';\nimport { useMemo, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { type TRequestStatus } from '../request-status';\nimport { type SelectorServiceConfig, type 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 fieldNames: SelectorWrapperProps['fieldNames'];\n}) => {\n const {\n cacheKey,\n serviceConfig,\n hasOuterSelectorList,\n outerSelectorList,\n onRespDataChange,\n onSelectorRequestError,\n onChange,\n useCache,\n fieldNames,\n } = options;\n const serviceRequestParams = serviceConfig?.params;\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys || [];\n const hasServiceRequestParams =\n 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(\n json.sort(serviceRequestParams)\n );\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(\n serviceRequestParamsStringify\n );\n const prevParams = fbaHooks.usePrevious(serviceRequestParams);\n\n const serviceRespDataAdapter = (respData) => {\n if (serviceConfig?.onRequestResultAdapter) {\n return serviceConfig?.onRequestResultAdapter(\n respData as unknown as TPlainObject\n );\n }\n if (fieldNames?.list) {\n const result = get(respData, fieldNames?.list);\n return isArray(result) ? result : [];\n }\n return 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?.(\n serviceRequestParams || {}\n );\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) =>\n isUndefinedOrNull(serviceRequestParams[key])\n )\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 if (useCache === false) {\n // 判断参数是否发生变化\n if (isDeepEqual(serviceRequestParams, prevParams)) {\n return;\n }\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig?.onRequest?.(\n serviceRequestParams || {}\n );\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 /**\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 try {\n const respAdapterData = await onRequest();\n setStateSelectorList(respAdapterData);\n setRequestStatus('request-success');\n onRespDataChange?.(respAdapterData);\n } catch (error) {\n console.error(error);\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n onSelectorRequestError?.(error);\n }\n }, [JSON.stringify(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 const mergeFieldNames = {\n label: 'label',\n value: 'value',\n disabled: 'disabled',\n ...fieldNames,\n };\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = mergeFieldNames;\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 fieldNames: mergeFieldNames,\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 popupMatchSelectWidth={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 ) : (\n otherProps.suffixIcon\n )\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","fieldNames","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","prevParams","serviceRespDataAdapter","respData","onRequestResultAdapter","list","result","_get","_isArray","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_7","useEffectCustomAsync","isEmpty","_dataList","_respAdapterData","find","isUndefinedOrNull","_isDeepEqual","$Try_3_Post","$Try_3_Catch","$await_8","$If_5","call","this","dataList","subscribe","_msg","_ref","$Try_4_Post","$Try_4_Catch","$await_9","onRefreshRequest","getVauleList","data","valueKey","valueList","toArray","map","item","_isObject","SelectorWrapper","props","showAllOption","onSelectorListChange","onSelectorListAllChange","onLabelRenderAdapter","requestMessageConfig","selectorList","modelKey","labelInValue","otherProps","_objectWithoutPropertiesLoose","_excluded","firstRenderSelectList","useRef","hasOwnProperty","mergeFieldNames","_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","popupMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","messageConfig","errorButton","Button","type","index","_jsxs","Option","showIcon","className","icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.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 { isArray, isDeepEqual } from '@dimjs/lang';\nimport { get, json } from '@dimjs/utils';\nimport { isUndefinedOrNull, type TPlainObject } from '@flatbiz/utils';\nimport pubSub from 'pubsub-js';\nimport { useMemo, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { type TRequestStatus } from '../request-status';\nimport { type SelectorServiceConfig, type 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 fieldNames: SelectorWrapperProps['fieldNames'];\n}) => {\n const {\n cacheKey,\n serviceConfig,\n hasOuterSelectorList,\n outerSelectorList,\n onRespDataChange,\n onSelectorRequestError,\n onChange,\n useCache,\n fieldNames,\n } = options;\n const serviceRequestParams = serviceConfig?.params;\n const requiredParamsKeys = serviceConfig?.requiredParamsKeys || [];\n const hasServiceRequestParams =\n 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(\n json.sort(serviceRequestParams)\n );\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(\n serviceRequestParamsStringify\n );\n const prevParams = fbaHooks.usePrevious(serviceRequestParams);\n\n const serviceRespDataAdapter = (respData) => {\n if (serviceConfig?.onRequestResultAdapter) {\n return serviceConfig?.onRequestResultAdapter(\n respData as unknown as TPlainObject\n );\n }\n if (fieldNames?.list) {\n const result = get(respData, fieldNames?.list);\n return isArray(result) ? result : [];\n }\n return 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?.(\n serviceRequestParams || {}\n );\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) =>\n isUndefinedOrNull(serviceRequestParams[key])\n )\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 if (useCache === false) {\n // 判断参数是否发生变化\n if (isDeepEqual(serviceRequestParams, prevParams)) {\n return;\n }\n try {\n setRequestStatus('request-progress');\n const respData = await serviceConfig?.onRequest?.(\n serviceRequestParams || {}\n );\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 /**\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 try {\n const respAdapterData = await onRequest();\n setStateSelectorList(respAdapterData);\n setRequestStatus('request-success');\n onRespDataChange?.(respAdapterData);\n } catch (error) {\n console.error(error);\n setRequestStatus('request-error');\n setStateSelectorList(undefined);\n onSelectorRequestError?.(error);\n }\n }, [JSON.stringify(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. 不支持搜索调用服务模式,可使用组件 SelectorWrapperSearch\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 const mergeFieldNames = {\n label: 'label',\n value: 'value',\n disabled: 'disabled',\n ...fieldNames,\n };\n\n const {\n label: optionsItemLabelField,\n value: optionsItemValueField,\n disabled: optionsItemDisabledField,\n } = mergeFieldNames;\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 fieldNames: mergeFieldNames,\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 popupMatchSelectWidth={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 ) : (\n otherProps.suffixIcon\n )\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","fieldNames","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","prevParams","serviceRespDataAdapter","respData","onRequestResultAdapter","list","result","_get","_isArray","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_7","useEffectCustomAsync","isEmpty","_dataList","_respAdapterData","find","isUndefinedOrNull","_isDeepEqual","$Try_3_Post","$Try_3_Catch","$await_8","$If_5","call","this","dataList","subscribe","_msg","_ref","$Try_4_Post","$Try_4_Catch","$await_9","onRefreshRequest","getVauleList","data","valueKey","valueList","toArray","map","item","_isObject","SelectorWrapper","props","showAllOption","onSelectorListChange","onSelectorListAllChange","onLabelRenderAdapter","requestMessageConfig","selectorList","modelKey","labelInValue","otherProps","_objectWithoutPropertiesLoose","_excluded","firstRenderSelectList","useRef","hasOwnProperty","mergeFieldNames","_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","popupMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","messageConfig","errorButton","Button","type","index","_jsxs","Option","showIcon","className","icon"],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@ import './../fba-hooks/index.css';
|
|
|
3
3
|
import './../request-status/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import t from"@ant-design/icons/es/icons/CaretDownFilled";import{
|
|
6
|
+
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import t from"@ant-design/icons/es/icons/CaretDownFilled";import{extend as l}from"@dimjs/utils/cjs/extend";import{hooks as a}from"@wove/react/cjs/hooks";import{isObject as n}from"@dimjs/lang/cjs/is-object";import{a as i,_ as o}from"../_rollupPluginBabelHelpers-a0769acd.js";import{toArray as u,treeToTiledMap as s,isNotEmptyArray as c,treeToArray as f,isUndefinedOrNull as d}from"@flatbiz/utils";import{TreeSelect as v,Button as p}from"antd";import{dequal as m}from"dequal";import{useState as h,useRef as S,useMemo as g,createElement as b}from"react";import{fbaHooks as C}from"../fba-hooks/index.js";import{RequestStatus as y}from"../request-status/index.js";import{Model as q}from"@dimjs/model-react";import{jsx as w}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var L={treeSelectorList:[],treeSelectorTiledMap:{},queryIsEmpty:false};var R={actions:{setSelectBoxList:function e(r){return function(e){e.treeSelectorList=r.treeSelectorList||[];e.treeSelectorTiledMap=r.treeSelectorTiledMap||{};e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.treeSelectorList=[];e.treeSelectorTiledMap={}}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:L};var T={};var j=function e(r){if(!T[r]){T[r]=q(R)}return T[r]};var k=function e(r,t){var l=[];var a=t[r];while(a){var n=a.pId;a=t[n];if(a){l.push(n)}}return l};var x=function e(r,t){if(r.length===0)return[];var l=[];r.forEach((function(e){var r=k(e,t);l.push.apply(l,r)}));return Array.from(new Set(l))};var E=["serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","treeSelectorList","requestMessageConfig","modelKey","value","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","selectedParentCheckedAllChildrenList","fieldNames","onChange","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys"];var M=function q(L){var R=L.serviceConfig,T=L.effectDependencyList,k=L.onTreeSelectorListChange,M=L.onTreeSelectorRequestError,I=L.treeSelectorList,A=L.requestMessageConfig,N=L.modelKey,D=L.value,P=L.labelInValue,O=L.labelInValueFieldNames,B=L.onTreeItemDataAdapter,K=L.selectedParentCheckedAllChildrenList,V=K===void 0?true:K,F=L.fieldNames,H=L.onChange,W=L.treeDefaultExpandAll,_=L.showAllOption,z=L.initRootExpand,G=L.treeDefaultExpandedKeys,J=i(L,E);var Q=Object.prototype.hasOwnProperty.call(L,"treeSelectorList");var U=R||{};var X=T||[];var Y=C.useSafeState(false),Z=Y[0],$=Y[1];var ee=h(),re=ee[0],te=ee[1];var le=j(N).useStore(),ae=le[0],ne=le[1];var ie="request-progress-"+N;var oe=J.treeCheckable||J.multiple;var ue=S(true);var se=g((function(){if(J.treeCheckStrictly)return true;return P}),[P,J.treeCheckStrictly]);var ce=g((function(){return o({label:"label",value:"value",children:"children",disabled:"disabled"},F)}),[F]);var fe=g((function(){return o({label:"label",value:"value"},O)}),[O]);var de=g((function(){if(_){var e=_===true;return{label:e?"全部":_.label,value:e?"":_.value}}return null}),[_]);var ve=h(),pe=ve[0],me=ve[1];var he=g((function(){return u(L.value).map((function(e){if(n(e)){return se?e[fe.value]:e[ce.value]}return e}))}),[ce.value,se,fe.value,L.value]);C.useEffectCustom((function(){if(ae.treeSelectorList.length>0){var e=[];if(ue.current){ue.current=false;if(G){e=G}else if(W){var r=Object.keys(ae.treeSelectorTiledMap).map((function(e){var r;return(r=ae.treeSelectorTiledMap[e])==null?void 0:r[ce.value]}));e=r}else if(z&&ae.treeSelectorList.length===1){e=[ae.treeSelectorList[0][ce.value]]}te(e)}else{if(!pe){var t=x(he,ae.treeSelectorTiledMap);te(t)}}}}),[D,ae.treeSelectorList]);var Se=function e(r){return r===""||d(r)};var ge=function e(r){var t=U.onRequestResultAdapter?U.onRequestResultAdapter(r):r;return t};var be=a.useCallbackRef((function(){return new Promise((function(e,r){var t,a,n,i,o;if(!U.onRequest){return r(new Error("onRequest 调用接口服务不能为空"))}t=U.requiredParamsKeys||[];a=l({},U.params);n=t.find((function(e){return Se(a[e])}));if(n){void ne.changeRequestStatus("no-dependencies-params");console.warn("TreeSelectorWrapper组件:参数:"+t.join("、")+"不能为空");return e()}var u=function(){try{return e()}catch(e){return r(e)}};var s=function(e){try{$(false);window[ie]=false;void ne.changeRequestStatus("request-error");M==null?void 0:M(e);return u()}catch(e){return r(e)}};try{$(true);window[ie]=true;void ne.changeRequestStatus("request-progress");return Promise.resolve(U.onRequest==null?void 0:U.onRequest(a)).then((function(e){try{i=e;o=ge(i);$(false);window[ie]=false;Ce(o||[]);return u()}catch(e){return s(e)}}),s)}catch(e){s(e)}}))}));a.useCustomCompareEffect((function(){if(Q)return;if(X.length){Ce([]);void be();return}var e=j(N).getState();if(e.requestStatus==="request-success"){return}if(!window[ie]){void be();return}}),X,m);var Ce=a.useCallbackRef((function(e){var r;if((e==null?void 0:e.length)===0&&ae.treeSelectorList.length===0){void ne.setSelectBoxList({treeSelectorList:[],treeSelectorTiledMap:{}});k==null?void 0:k([]);return}var t=de?(r={},r[ce.label]=de.label,r[ce.value]=de.value,r):undefined;var l=_?[t].concat(e):e;void ne.setSelectBoxList({treeSelectorList:l,treeSelectorTiledMap:s(l,{value:ce.value,children:ce.children},"pId")});k==null?void 0:k(e)}));C.useEffectCustom((function(){if(Q){Ce(I||[])}}),[I]);var ye=a.useCallbackRef((function(e){te(e)}));var qe=a.useCallbackRef((function(){void be()}));var we=a.useCallbackRef((function(e,r,t){var l=u(e);if(J.treeCheckStrictly){if(V&&t.checked){var a=ae.treeSelectorTiledMap[t==null?void 0:t.triggerValue];if(c(a[ce.children])){l=f([a],ce.children).map((function(e){return e[ce.value]}))}else{l=e==null?void 0:e.map((function(e){return e.value}))}}else{l=e==null?void 0:e.map((function(e){return e.value}))}}if(se){var n=l.map((function(e){var r;var t=ae.treeSelectorTiledMap[e];return r={},r[fe.label]=t[ce.label],r[fe.value]=t[ce.value],r}));if(oe){H==null?void 0:H(n,n,t)}else{H==null?void 0:H(n[0],n[0],t)}}else{if(oe){H==null?void 0:H(l,l,t)}else{H==null?void 0:H(l[0],l[0],t)}}}));var Le=a.useCallbackRef((function(e){if(!e)return null;return e.map((function(e){var r=(B==null?void 0:B(o({},e)))||e;var t=r[ce.children];var l=r[ce.value];var a=r[ce.label];var n=r[ce.disabled]?r[ce.disabled]:r.disabled;return b(v.TreeNode,o({},r,{disabled:n,value:l,title:a,key:""+l}),t&&t.length>0&&Le(t))}))}));var Re=function e(r){me(r);var t=[];if(!r){me(undefined);t=he}else{Object.keys(ae.treeSelectorTiledMap).forEach((function(e){var l=ae.treeSelectorTiledMap[e];var a=l==null?void 0:l[ce.label];if(a!=null&&a.includes(r)){t.push(l[ce.value])}}))}var l=x(t,ae.treeSelectorTiledMap);te(l)};var Te=oe?he:he[0];return w(v,o({searchValue:pe,dropdownStyle:{maxHeight:400,overflow:"auto"},showSearch:true,treeLine:{showLeafIcon:false},treeNodeFilterProp:"title",switcherIcon:w(t,{}),popupMatchSelectWidth:false},J,{className:r("v-tree-select-wrapper",J.className),popupClassName:r("v-tree-select-wrapper-dropdown",J.popupClassName),onChange:we,treeExpandedKeys:re,value:Te,onSearch:Re,loading:Z,onTreeExpand:ye,style:o({width:"100%"},J.style),suffixIcon:ae.requestStatus==="request-error"?w(e,{spin:Z,onClick:qe}):undefined,notFoundContent:w(y,{status:ae.requestStatus,messageConfig:A,loading:Z,errorButton:w(p,{type:"primary",onClick:qe,children:"重新获取数据"})}),children:Le(ae.treeSelectorList)}))};export{M as TreeSelectorWrapper};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/tree-selector-wrapper.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isUndefinedOrNull,\n type TAny,\n type TPlainObject,\n treeToArray,\n valueIsEqual,\n arrayFind,\n getValueOrDefault,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport './style.less';\n\nimport { usePrevious } from 'ahooks';\nimport { Button, TreeSelect, type TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\nimport { type DependencyList, useMemo, useRef, useState } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, type TRequestStatusProps } from '../request-status';\nimport { treeSelectorWrapperModel } from './model';\nimport { getExpandedKeys, getVauleList } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n> & {\n modelKey: string;\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n disabled?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (\n treeSelectorList?: TreeSelectProps['treeData']\n ) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * @deprecated 已过期,请使用onChange\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject\n ) => void;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject\n ) => void;\n /**\n * tree item 数据适配器,返回的数据会通过fieldNames配置取数据\n * ```\n * 1. 可用于设置disabled状态\n * onTreeItemDataAdapter: (dataItem) => {\n * if(dataItem.xx === xx){\n * dataItem['disabled] = true;\n * }\n * return dataItem;\n * }\n * 2. 可设置label数据显示\n * ```\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\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?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n};\n\n// type TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n// onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n// };\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n disabled: 'disabled',\n ...fieldNames,\n };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const isFirstUseValueRef = useRef(true);\n\n const prevValue = usePrevious(value);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n if (responseFirstRef.current && isUndefinedOrNull(value)) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n setTreeExpandedKeys(treeDefaultExpandedKeys);\n } else if (treeDefaultExpandAll) {\n const allValues = treeToArray(\n state.treeSelectorList,\n fieldNamesMerge.children\n ).map((item) => {\n return item[fieldNamesMerge.value];\n });\n setTreeExpandedKeys(allValues);\n return;\n } else if (initRootExpand && state.treeSelectorList.length) {\n setTreeExpandedKeys([\n state.treeSelectorList[0][fieldNamesMerge.value],\n ]);\n return;\n }\n }\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value !== prevValue) {\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(\n respData as unknown as TPlainObject\n )\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(\n `TreeSelectorWrapper组件:参数:${requiredParamsKeys.join(\n '、'\n )}不能为空`\n );\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(\n _respData\n ) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(\n newdataList || [],\n fieldNamesMerge.children\n ),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = (\n valueList: Array<string | number>,\n refresh?: boolean\n ) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(\n value,\n state.treeSelectorList,\n fieldNamesMerge\n );\n newTreeExpandedKeys = newTreeExpandedKeys.concat(\n targetList.map((item) => item.value)\n );\n });\n return newTreeExpandedKeys;\n };\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef(\n (item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n }\n );\n /**\n * labelInValue模式入参value item解析\n */\n // const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n // if (!item) return undefined;\n // return {\n // label: item?.[labelInValueFieldNamesMerge.label],\n // value: item?.[labelInValueFieldNamesMerge.value],\n // disabled: item?.['disabled'],\n // };\n // });\n\n const getResponseTreeNodeList = hooks.useCallbackRef(\n (changeValue: TAny, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, {\n value: 'value',\n label: 'label',\n });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(\n state.treeSelectorTiledArray,\n item,\n fieldNamesMerge.value\n ) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (\n otherProps.treeCheckStrictly &&\n selectedParentCheckedAllChildrenList\n ) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(\n state.treeSelectorTiledArray,\n triggerInfo.triggerValue,\n fieldNamesMerge.value\n )\n : null\n );\n if (\n triggerNode &&\n isArray(triggerNode.children) &&\n triggerNode.children.length > 0\n ) {\n // 判断为父节点\n const allChildrenList = treeToArray(\n triggerNode.children,\n fieldNamesMerge.children\n );\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (\n arrayFind(\n selectedTreeNodeList,\n parseItem?.value,\n fieldNamesMerge.value\n )\n )\n return false;\n return true;\n });\n selectedTreeNodeList =\n selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, [\n 'SHOW_ALL',\n 'SHOW_PARENT',\n ])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n }\n );\n\n const onRespChange = hooks.useCallbackRef(\n (values, selectedValues, triggerInfo) => {\n // setInnerOperateValue(values);\n onChange?.(values, selectedValues, triggerInfo);\n onChangeHandle?.(values, selectedValues, triggerInfo);\n }\n );\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef(\n (changeValue: TAny, _data, triggerInfo: TPlainObject) => {\n const { realTreeNodeList, realTreeNodeValueList } =\n getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(\n prev || []\n );\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n rawData: item,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(\n realTreeNodeValueList[0],\n realTreeNodeList[0],\n triggerInfo\n );\n }\n }\n }\n );\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const valueList = labelInValue\n ? getVauleList(value, labelInValueFieldNamesMerge)\n : getVauleList(value, fieldNamesMerge);\n if (valueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return valueList.map((item) => ({ label: item, value: item }));\n }\n return valueList.map((value) => {\n const target = arrayFind(\n state.treeSelectorTiledArray,\n value as string,\n fieldNamesMerge.value\n );\n const targetParseItem = parseDataSourceItem(target) as TPlainObject;\n return {\n label: getValueOrDefault(targetParseItem?.label, value),\n value: getValueOrDefault(targetParseItem?.value, value),\n };\n });\n }\n return valueList;\n }, [\n labelInValue,\n value,\n labelInValueFieldNamesMerge,\n fieldNamesMerge,\n otherProps.treeCheckStrictly,\n state.treeSelectorTiledArray,\n parseDataSourceItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames(\n 'v-tree-select-wrapper-dropdown',\n otherProps.popupClassName\n )}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledArray","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeys","value","treeList","fieldNames","_isArray","length","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","tempList","toArray","map","item","_isObject","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","onChange","onChangeHandle","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isFirstUseValueRef","prevValue","usePrevious","useEffectCustom","current","isUndefinedOrNull","allValues","treeToArray","valueList","expandedKeys","getTreeExpandedKeys","Array","from","Set","valueIsEmpty","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","_respData2","onRequest","Error","_extend","find","console","warn","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","allState","getState","dequal","dataList","_ref","tempItem","undefined","newdataList","concat","onTreeExpand","onAgainRequest","refresh","newTreeExpandedKeys","forEach","includes","targetList","parseDataSourceItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","target","arrayFind","push","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","filter","parseItem","realTreeNodeList","valueIsEqual","showCheckedStrategy","realTreeNodeValueList","onRespChange","values","selectedValues","onInnerChange","_data","_getResponseTreeNodeL","prev","mergeList","labelInValueList","_ref2","rawData","mapTree","itemAdapterData","_createElement","TreeSelect","TreeNode","title","renderValueList","targetParseItem","getValueOrDefault","treeSelectValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","className","_classNames","popupClassName","dropdownMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/selector.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledMap: TPlainObject;\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledMap = params.treeSelectorTiledMap || {};\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n state.treeSelectorTiledMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","export const getExpandedKeysByValue = (value: string | number, treeSelectorTiledMap) => {\n const tempList: Array<string | number> = [];\n let parentNode = treeSelectorTiledMap[value];\n while (parentNode) {\n const pId = parentNode.pId;\n parentNode = treeSelectorTiledMap[pId];\n if (parentNode) {\n tempList.push(pId);\n }\n }\n return tempList;\n};\n\nexport const getExpandedKeysByValues = (values: Array<string | number>, treeSelectorTiledMap) => {\n if (values.length === 0) return [];\n const expandedKeys: Array<string | number> = [];\n values.forEach((value) => {\n const targetList = getExpandedKeysByValue(value, treeSelectorTiledMap);\n expandedKeys.push(...targetList);\n });\n return Array.from(new Set(expandedKeys));\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isObject } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n toArray,\n treeToArray,\n treeToTiledMap,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, type TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\nimport { useMemo, useRef, useState, type DependencyList } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, type TRequestStatusProps } from '../request-status';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeysByValues } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n | 'onSearch'\n> & {\n modelKey: string;\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n disabled?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * tree item 数据适配器,返回的数据会通过fieldNames配置取数据\n * ```\n * 1. 可用于设置disabled状态\n * onTreeItemDataAdapter: (dataItem) => {\n * if(dataItem.xx === xx){\n * dataItem['disabled] = true;\n * }\n * return dataItem;\n * }\n * 2. 可设置label数据显示\n * ```\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\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?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * @deprecated 已弃用\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n};\n\n// type TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n// onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n// };\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = Object.prototype.hasOwnProperty.call(props, 'treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable || otherProps.multiple;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n disabled: 'disabled',\n ...fieldNames,\n };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [searchValue, setSearchValue] = useState<string>();\n\n const propsPureValue = useMemo(() => {\n return toArray<TAny>(props.value).map((item) => {\n if (isObject(item)) {\n return (labelInValue ? item[labelInValueFieldNamesMerge.value] : item[fieldNamesMerge.value]) as\n | string\n | number;\n }\n return item as string | number;\n });\n }, [fieldNamesMerge.value, labelInValue, labelInValueFieldNamesMerge.value, props.value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n let treeExpandedKeys: Array<string | number> = [];\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n treeExpandedKeys = treeDefaultExpandedKeys as Array<string | number>;\n } else if (treeDefaultExpandAll) {\n const allValues = Object.keys(state.treeSelectorTiledMap).map(\n (item) => state.treeSelectorTiledMap[item]?.[fieldNamesMerge.value] as string | number,\n );\n treeExpandedKeys = allValues;\n } else if (initRootExpand && state.treeSelectorList.length === 1) {\n treeExpandedKeys = [state.treeSelectorList[0][fieldNamesMerge.value]];\n }\n setTreeExpandedKeys(treeExpandedKeys);\n } else {\n if (!searchValue) {\n const expandedKeys = getExpandedKeysByValues(propsPureValue, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeys);\n }\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledMap: treeToTiledMap(\n newdataList,\n {\n value: fieldNamesMerge.value,\n children: fieldNamesMerge.children,\n },\n 'pId',\n ),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: TAny, _data, triggerInfo: TPlainObject) => {\n let resultValueList = toArray<TAny>(changeValue);\n if (otherProps.treeCheckStrictly) {\n if (selectedParentCheckedAllChildrenList && triggerInfo.checked) {\n const target = state.treeSelectorTiledMap[triggerInfo?.triggerValue];\n if (isNotEmptyArray(target[fieldNamesMerge.children])) {\n resultValueList = treeToArray([target], fieldNamesMerge.children).map((item) => {\n return item[fieldNamesMerge.value];\n });\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n }\n if (labelInValue) {\n const resultItemList = resultValueList.map((item) => {\n const target = state.treeSelectorTiledMap[item];\n return {\n [labelInValueFieldNamesMerge.label]: target[fieldNamesMerge.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNamesMerge.value],\n };\n });\n if (isMultiple) {\n onChange?.(resultItemList, resultItemList, triggerInfo);\n } else {\n onChange?.(resultItemList[0], resultItemList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onChange?.(resultValueList, resultValueList, triggerInfo);\n } else {\n onChange?.(resultValueList[0], resultValueList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n const onSearch = (searchValue?: string) => {\n setSearchValue(searchValue);\n let targetKeyList: Array<string | number> = [];\n if (!searchValue) {\n setSearchValue(undefined);\n targetKeyList = propsPureValue;\n } else {\n Object.keys(state.treeSelectorTiledMap).forEach((item) => {\n const target = state.treeSelectorTiledMap[item];\n const label = target?.[fieldNamesMerge.label] as string;\n if (label?.includes(searchValue)) {\n targetKeyList.push(target[fieldNamesMerge.value]);\n }\n });\n }\n\n const expandedKeysMerge = getExpandedKeysByValues(targetKeyList, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeysMerge);\n };\n\n const treeValue = isMultiple ? propsPureValue : propsPureValue[0];\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n searchValue={searchValue}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n popupMatchSelectWidth={false}\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeValue}\n onSearch={onSearch}\n loading={loading}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledMap","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeysByValue","value","tempList","parentNode","pId","push","getExpandedKeysByValues","values","length","expandedKeys","forEach","targetList","apply","Array","from","Set","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","fieldNames","onChange","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","Object","prototype","hasOwnProperty","call","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","multiple","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","_useState2","searchValue","setSearchValue","propsPureValue","toArray","map","item","_isObject","useEffectCustom","current","allValues","keys","_state$treeSelectorTi","valueIsEmpty","isUndefinedOrNull","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","_respData2","onRequest","Error","_extend","find","console","warn","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","allState","getState","dequal","dataList","_ref","tempItem","undefined","newdataList","concat","treeToTiledMap","onTreeExpand","onAgainRequest","onInnerChange","changeValue","_data","triggerInfo","resultValueList","checked","target","triggerValue","isNotEmptyArray","treeToArray","resultItemList","_ref2","mapTree","data","itemAdapterData","_createElement","TreeSelect","TreeNode","title","onSearch","targetKeyList","includes","expandedKeysMerge","treeValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","popupMatchSelectWidth","className","_classNames","popupClassName","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1852,7 +1852,7 @@ export type SelectorWrapperProps = Omit<SelectProps, "onSearch" | "notFoundConte
|
|
|
1852
1852
|
/**
|
|
1853
1853
|
* 选择器包装组件
|
|
1854
1854
|
* ```
|
|
1855
|
-
* 1.
|
|
1855
|
+
* 1. 不支持搜索调用服务模式,可使用组件 SelectorWrapperSearch
|
|
1856
1856
|
* ```
|
|
1857
1857
|
*/
|
|
1858
1858
|
export declare const SelectorWrapper: (props: SelectorWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -4102,8 +4102,13 @@ export type LocalLoadingServiceConfig = {
|
|
|
4102
4102
|
params?: TPlainObject;
|
|
4103
4103
|
/** 标记serviceConfig.params中无效参数,被设置的params key 不传入服务接口入参 */
|
|
4104
4104
|
invalidParamKey?: string[];
|
|
4105
|
+
/** 必填字段设置 */
|
|
4106
|
+
requiredParamsKeys?: string[];
|
|
4105
4107
|
};
|
|
4106
4108
|
export interface LocalLoadingProps {
|
|
4109
|
+
className?: string;
|
|
4110
|
+
style?: CSSProperties;
|
|
4111
|
+
contentStyle?: CSSProperties;
|
|
4107
4112
|
/** 接口数据配置 */
|
|
4108
4113
|
serviceConfig: LocalLoadingServiceConfig;
|
|
4109
4114
|
/** children 为函数,参数【respData】为接口返回数据 */
|
|
@@ -4116,13 +4121,25 @@ export interface LocalLoadingProps {
|
|
|
4116
4121
|
* ```
|
|
4117
4122
|
*/
|
|
4118
4123
|
isAsync?: boolean;
|
|
4119
|
-
/** 自定义异常渲染处理 */
|
|
4120
|
-
errorRender?: (error?: TAny) => ReactElement;
|
|
4121
4124
|
/** loading高度,默认值:100;isAsync = true 无效 */
|
|
4122
4125
|
loadingHeight?: number | string;
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
+
/** loading spin 属性设置 */
|
|
4127
|
+
loadingSpinProps?: {
|
|
4128
|
+
/** loading tip,默认值:Loading */
|
|
4129
|
+
tip?: string;
|
|
4130
|
+
/** loading 内容 */
|
|
4131
|
+
content?: ReactElement;
|
|
4132
|
+
/** 背景色,默认值:rgba(0,0,0,0.01) */
|
|
4133
|
+
bgColor?: string;
|
|
4134
|
+
};
|
|
4135
|
+
textConfigs?: {
|
|
4136
|
+
/** 必填异常文本 */
|
|
4137
|
+
requiredErrorText?: string;
|
|
4138
|
+
};
|
|
4139
|
+
/** 是否显示必填异常 */
|
|
4140
|
+
showRequiredError?: boolean;
|
|
4141
|
+
/** 自定义异常渲染处理 */
|
|
4142
|
+
errorRender?: (error?: TAny) => ReactElement;
|
|
4126
4143
|
}
|
|
4127
4144
|
export type LocalLoadingRefApi = {
|
|
4128
4145
|
onRefresh: (params?: TPlainObject) => void;
|
|
@@ -4135,6 +4152,8 @@ export type LocalLoadingRefApi = {
|
|
|
4135
4152
|
* 2. error显示效果
|
|
4136
4153
|
* 3. 获取服务数据
|
|
4137
4154
|
* 4. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用
|
|
4155
|
+
* 5. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段
|
|
4156
|
+
* 5. 通过 ref.onRequest 可主动发起服务调用
|
|
4138
4157
|
* ```
|
|
4139
4158
|
*/
|
|
4140
4159
|
export declare const LocalLoading: import("react").ForwardRefExoticComponent<LocalLoadingProps & import("react").RefAttributes<LocalLoadingRefApi>> & {
|
|
@@ -6101,7 +6120,7 @@ export type TreeSelectorServiceConfig = {
|
|
|
6101
6120
|
*/
|
|
6102
6121
|
onRequestResultAdapter?: (respData: TAny) => TPlainObject[];
|
|
6103
6122
|
};
|
|
6104
|
-
export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys" | "treeData" | "loading" | "onTreeExpand" | "onChange" | "value" | "fieldNames" | "defaultValue" | "treeDataSimpleMode"> & {
|
|
6123
|
+
export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys" | "treeData" | "loading" | "onTreeExpand" | "onChange" | "value" | "fieldNames" | "defaultValue" | "treeDataSimpleMode" | "onSearch"> & {
|
|
6105
6124
|
modelKey: string;
|
|
6106
6125
|
fieldNames?: {
|
|
6107
6126
|
label?: string;
|
|
@@ -6139,16 +6158,6 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
|
|
|
6139
6158
|
* ```
|
|
6140
6159
|
*/
|
|
6141
6160
|
showAllOption?: true | TPlainObject<string | number>;
|
|
6142
|
-
/**
|
|
6143
|
-
* @deprecated 已过期,请使用onChange
|
|
6144
|
-
* 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点
|
|
6145
|
-
* 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点
|
|
6146
|
-
* 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择
|
|
6147
|
-
* 4. selectAllDataList 返回的数据都包含父节点
|
|
6148
|
-
* 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的
|
|
6149
|
-
* 6. triggerInfo 当前操作节点数据
|
|
6150
|
-
*/
|
|
6151
|
-
onChangeHandle?: (selectedValue?: TreeSelectorWrapperValue, selectedData?: TPlainObject[] | TPlainObject, triggerInfo?: TPlainObject) => void;
|
|
6152
6161
|
/**
|
|
6153
6162
|
* 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点
|
|
6154
6163
|
* 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点
|
|
@@ -6190,6 +6199,7 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
|
|
|
6190
6199
|
*/
|
|
6191
6200
|
labelInValue?: boolean;
|
|
6192
6201
|
/**
|
|
6202
|
+
* @deprecated 已弃用
|
|
6193
6203
|
* ```
|
|
6194
6204
|
* lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }
|
|
6195
6205
|
* ```
|
|
@@ -6207,8 +6217,6 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
|
|
|
6207
6217
|
};
|
|
6208
6218
|
/**
|
|
6209
6219
|
* 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现
|
|
6210
|
-
* @param props
|
|
6211
|
-
* @returns
|
|
6212
6220
|
* ```
|
|
6213
6221
|
* 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效
|
|
6214
6222
|
* 2. 父节点默认不返回,需要返回请设置showCheckedStrategy
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flatbiz/antd",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.31",
|
|
4
4
|
"description": "flat-biz ui components",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"typings": "index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@dimjs/model": ">=1.2.3",
|
|
32
32
|
"@dimjs/model-react": ">=1.2.3",
|
|
33
33
|
"@dimjs/utils": ">=1.5.1",
|
|
34
|
-
"@flatbiz/utils": ">=4.0.
|
|
34
|
+
"@flatbiz/utils": ">=4.0.29",
|
|
35
35
|
"@wove/react": ">=1.2.23",
|
|
36
36
|
"antd": ">=5.11.0",
|
|
37
37
|
"dayjs": ">=1.11.9",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@dimjs/model": "^1.2.3",
|
|
46
46
|
"@dimjs/model-react": "^1.2.3",
|
|
47
47
|
"@dimjs/utils": "^1.5.1",
|
|
48
|
-
"@flatbiz/utils": "^4.0.
|
|
48
|
+
"@flatbiz/utils": "^4.0.29",
|
|
49
49
|
"@wove/react": "^1.2.23",
|
|
50
50
|
"antd": "5.11.0",
|
|
51
51
|
"dayjs": "1.11.9",
|