@flatbiz/antd 4.5.26 → 4.5.27
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.
|
@@ -16,5 +16,5 @@ import './../form-item-wrapper/index.css';
|
|
|
16
16
|
import './../tips-wrapper/index.css';
|
|
17
17
|
import './index.css';
|
|
18
18
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
19
|
-
import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as
|
|
19
|
+
import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as i}from"@wove/react/cjs/hooks";import{toArray as o,isUndefinedOrNull as t}from"@flatbiz/utils";import{Form as a,Empty as l}from"antd";import{useRef as d,useMemo as s,Fragment as m,createElement as u,isValidElement as p}from"react";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{CardWrapper as f}from"../card-wrapper/index.js";import{DeleteNode as v}from"../delete-node/index.js";import{EasyForm as g}from"../easy-form/index.js";import{fbaUtils as y}from"../fba-utils/index.js";import{FormItemHidden as j}from"../form-item-hidden/index.js";import{FormItemWrapper as h}from"../form-item-wrapper/index.js";import{TipsWrapper as x}from"../tips-wrapper/index.js";import{jsx as b,jsxs as F}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"@dimjs/model";import"@ant-design/icons/es/icons/CloseCircleFilled";import"@ant-design/icons/es/icons/DeleteOutlined";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../box-grid/index.js";import"@dimjs/lang/cjs/is-number";import"ahooks";import"../form-wrapper/index.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var k=function k(w){var C=a.useFormInstance();var P=o(w.formListName);var R=d();var N=i.useForceUpdate();var I=w.formListCompleteName||P;var E=i.useCallbackRef((function(e,r){return new Promise((function(n,i){return Promise.resolve(C.validateFields(r.map((function(r){return[].concat(e,o(r))})))).then((function(e){try{return n()}catch(e){return i(e)}}),i)}))}));var D=i.useCallbackRef((function(e){return C.getFieldValue(e)}));var q=i.useCallbackRef((function(e,r){y.setFormFieldsAndTriggerValuesChange(C,r.map((function(r){return{name:[].concat(I,[e],o(r.name)),value:r.value}})));N()}));var L=s((function(){return w.columns.map((function(e){var r;var i=e.title;var a=i;if(e.tips){a=b(x,{tipType:"popover",popoverProps:{content:e.tips},children:i})}var l=e.required;if(!l&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){l=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}var d=o(e["dataIndex"]);return{render:function r(i,o,s){var p;var c=C.getFieldValue([].concat(I,[o.name]));var f=C.getFieldValue([].concat(I,[o.name],d));if(t(e.render)){return b(m,{children:f})}var v=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(c,i):e==null?void 0:e.editable;var g=[].concat(I,[o.name]);var y={index:i,editable:v,add:s.add,remove:s.remove,move:s.move,rowFormItemName:o.name,rowFormItemCompleteName:g,setCurrentRowField:q.bind(null,o.name),validateRowFields:E.bind(null,g),getCurrentRowData:D.bind(null,g),forceUpdate:N};if(e.hidden!=null&&e.hidden(c,i)){return b(j,{name:[o.name].concat(d)},o.key)}var x=typeof e.formItemProps==="function"?e.formItemProps(y):e.formItemProps;if(!((p=x)!=null&&(p=p.rules)!=null&&p.length)&&l){x=n({},x,{rules:[{required:true,message:""}]})}if(v===true){return u(h,n({},x,{name:[o.name].concat(d),label:a,span:e.gridNumber,key:o.key}),e.render==null?void 0:e.render(y))}return b(h,n({label:a,span:e.gridNumber},x,{children:e.render==null?void 0:e.render(y)}),o.key)}}}))}),[w.columns,C,I,q,E,D,N]);var V=r("editable-card",w.className);return b("div",{className:V,style:w.style,children:b(a.List,{name:P,rules:w.rules,children:function r(i,o,t){var d=t.errors;R.current=o;return F("div",{style:{borderRadius:"6px",border:d!=null&&d.length?"1px solid #ff4d4f":"1px solid transparent"},children:[w.contentBeforeRender==null?void 0:w.contentBeforeRender(o,i.length),i.map((function(e,r){var t;var a=w.onCustomGroupName?w.onCustomGroupName(r):r+1;var l={index:r,fields:i,fieldItem:e,operation:o,required:w.required,key:""+e.key};if(w.onCustomWrapper){var d;return w.onCustomWrapper(b(g,n({nonuseFormWrapper:true},w.cardEasyFormProps,{style:n({padding:0,margin:0},(d=w.cardEasyFormProps)==null?void 0:d.style),children:L.map((function(r,n){return r.render(n,e,o)}))}),e.key),l)}var s=w.cardExtraRender==null?void 0:w.cardExtraRender(l);return b(f,{className:w.cardClassName,title:a,size:"small",style:n({padding:0,margin:"0 0 15px 0"},w.cardStyle),bodyStyle:{paddingBottom:0},extra:p(s)?s:F("div",{style:{display:"inline-flex",alignItems:"center",gap:"8px"},children:[s==null?void 0:s["before"],b(v,{style:{color:"red"},hidden:w.required&&i.length===1,onDelete:function e(){o.remove(r)}}),s==null?void 0:s["after"]]}),children:b(g,n({nonuseFormWrapper:true},w.cardEasyFormProps,{style:n({padding:0,margin:0},(t=w.cardEasyFormProps)==null?void 0:t.style),children:L.map((function(r,n){return r.render(n,e,o)}))}),e.key)},e.key)})),i.length===0?b("div",{className:"editable-card-empty",children:b(l,{image:l.PRESENTED_IMAGE_SIMPLE})}):null,b(c,{block:true,hidden:w.hiddenFooterBtn,type:"dashed",icon:b(e,{}),style:{marginTop:i.length?15:0},onClick:function e(){var r=w.addRowDefaultValues==null?void 0:w.addRowDefaultValues();o.add(n({},r))},children:"新增"}),w.contentAfterRender==null?void 0:w.contentAfterRender(o,i.length),d.length?b(a.ErrorList,{errors:[b("div",{style:{color:"#ff4d4f",padding:"5px"},children:d},"0")]}):null]})}})})};export{k as EditableCard};
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-card/editable-card.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\n\nimport type { TAny } from '@flatbiz/utils';\nimport { isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form, FormListFieldData, type FormListOperation } from 'antd';\nimport type { ReactElement } from 'react';\nimport { Fragment, isValidElement, useMemo, useRef } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { CardWrapper } from '../card-wrapper';\nimport { DeleteNode } from '../delete-node';\nimport { EasyForm } from '../easy-form';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemHidden } from '../form-item-hidden';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type { EditableCardDataIndex, EditableCardOperation, EditableCardProps } from './type';\n\n/**\n * 使用FormList实现可编辑卡片\n * ```\n * 1. EditableCard有两种模式,正常 & 禁用\n * 2. 必须在外部包裹Form组件\n * 3. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowField 方法\n * 4. 可使用DragEditableCard组件实现拖拽排序\n * 5. 设置EditableCard disabled后,通过 LabelValueRender 组件展示数据,可通过 disabledRenderProps 配置布局\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * ```\n */\nexport const EditableCard = (props: EditableCardProps) => {\n const form = Form.useFormInstance();\n const formListName = toArray<string | number>(props.formListName);\n const formListOperationRef = useRef<FormListOperation>();\n const fieldsRef = useRef<FormListFieldData[]>();\n const forceUpdate = hooks.useForceUpdate();\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableCardDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n const getCurrentRowData = hooks.useCallbackRef((formItemPrevName: Array<string | number>) => {\n return form.getFieldValue(formItemPrevName);\n });\n\n const setCurrentRowField = hooks.useCallbackRef(\n (\n formItemPrevName: string | number,\n dataIndexConfigs: {\n name: EditableCardDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n forceUpdate();\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n let titleRender: ReactElement | string | undefined = title;\n if (column.tips) {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tips }}>\n {title}\n </TipsWrapper>\n );\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n const dataIndex = toArray<string>(column['dataIndex']);\n\n return {\n render: (index, fieldData: FormListFieldData, operation: FormListOperation) => {\n const record = form.getFieldValue([...formListCompleteName, fieldData.name]);\n const value = form.getFieldValue([...formListCompleteName, fieldData.name, ...dataIndex]);\n if (isUndefinedOrNull(column.render)) {\n return <Fragment>{value}</Fragment>;\n }\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n\n const rowFormItemCompleteName = [...formListCompleteName, fieldData.name];\n\n const renderOperationProps: EditableCardOperation = {\n index,\n editable,\n add: operation.add,\n remove: operation.remove,\n move: operation.move,\n rowFormItemName: fieldData.name,\n rowFormItemCompleteName,\n setCurrentRowField: setCurrentRowField.bind(null, fieldData.name),\n validateRowFields: validateRowFields.bind(null, rowFormItemCompleteName),\n getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName),\n forceUpdate,\n };\n\n if (column.hidden?.(record, index)) {\n return <FormItemHidden name={[fieldData.name, ...dataIndex]} key={fieldData.key} />;\n }\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n if (editable === true) {\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[fieldData.name, ...dataIndex]}\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n >\n {column.render?.(renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return (\n <FormItemWrapper\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n {...formItemProps}\n >\n {column.render?.(renderOperationProps)}\n </FormItemWrapper>\n );\n },\n };\n });\n }, [\n props.columns,\n form,\n formListCompleteName,\n setCurrentRowField,\n validateRowFields,\n getCurrentRowData,\n forceUpdate,\n ]);\n\n const className = classNames('editable-card', props.className);\n\n fbaHooks.useEffectCustom(() => {\n if (props.required && !fieldsRef.current?.length) {\n setTimeout(() => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: [...formListCompleteName],\n value: [{ ...props.addRowDefaultValues?.() }],\n },\n ]);\n }, 30);\n }\n }, []);\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n fieldsRef.current = fields;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.contentBeforeRender?.(formListOperation, fields.length)}\n {fields.map((fieldItem, index) => {\n const title = props.onCustomGroupName ? props.onCustomGroupName(index) : index + 1;\n\n const extraData = {\n index,\n fields,\n fieldItem,\n operation: formListOperation,\n required: props.required,\n key: `${fieldItem.key}`,\n };\n if (props.onCustomWrapper) {\n return props.onCustomWrapper(\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>,\n extraData,\n );\n }\n\n const cardExtraRenderResult = props.cardExtraRender?.(extraData);\n\n return (\n <CardWrapper\n key={fieldItem.key}\n className={props.cardClassName}\n title={title}\n size=\"small\"\n style={{\n padding: 0,\n margin: '0 0 15px 0',\n ...props.cardStyle,\n }}\n bodyStyle={{ paddingBottom: 0 }}\n // styles={{ body: { paddingBottom: 0 } }}\n extra={\n isValidElement(cardExtraRenderResult) ? (\n cardExtraRenderResult\n ) : (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n {cardExtraRenderResult?.['before']}\n <DeleteNode\n style={{ color: 'red' }}\n hidden={props.required && fields.length === 1}\n onDelete={() => {\n formListOperation.remove(index);\n }}\n />\n {cardExtraRenderResult?.['after']}\n </div>\n )\n }\n >\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>\n </CardWrapper>\n );\n })}\n {fields.length === 0 ? (\n <div className=\"editable-card-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : null}\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: fields.length ? 15 : 0 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n formListOperation.add({ ...defaultValues });\n }}\n >\n 新增\n </ButtonWrapper>\n {props.contentAfterRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableCard","props","form","Form","useFormInstance","formListName","toArray","formListOperationRef","useRef","fieldsRef","forceUpdate","_hooks","useForceUpdate","formListCompleteName","validateRowFields","useCallbackRef","formItemPrevName","nameList","Promise","$return","$error","resolve","validateFields","map","item","concat","then","$await_1","$boundEx","getCurrentRowData","getFieldValue","setCurrentRowField","dataIndexConfigs","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","columns","useMemo","column","_column$formItemProps","title","titleRender","tips","_jsx","TipsWrapper","tipType","popoverProps","content","children","required","formItemProps","rules","length","find","dataIndex","render","index","fieldData","operation","_formItemProps","record","isUndefinedOrNull","Fragment","editable","rowFormItemCompleteName","renderOperationProps","add","remove","move","rowFormItemName","bind","hidden","FormItemHidden","key","_extends","message","_createElement","FormItemWrapper","label","span","gridNumber","className","_classNames","fbaHooks","useEffectCustom","_fieldsRef$current","current","setTimeout","addRowDefaultValues","style","List","fields","formListOperation","_ref","errors","_jsxs","borderRadius","border","contentBeforeRender","fieldItem","_props$cardEasyFormPr2","onCustomGroupName","extraData","onCustomWrapper","_props$cardEasyFormPr","EasyForm","nonuseFormWrapper","cardEasyFormProps","padding","margin","cardExtraRenderResult","cardExtraRender","CardWrapper","cardClassName","size","cardStyle","bodyStyle","paddingBottom","extra","isValidElement","display","alignItems","gap","DeleteNode","color","onDelete","Empty","image","PRESENTED_IMAGE_SIMPLE","ButtonWrapper","block","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","contentAfterRender","ErrorList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-card/editable-card.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\n\nimport type { TAny } from '@flatbiz/utils';\nimport { isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form, FormListFieldData, type FormListOperation } from 'antd';\nimport type { ReactElement } from 'react';\nimport { Fragment, isValidElement, useMemo, useRef } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { CardWrapper } from '../card-wrapper';\nimport { DeleteNode } from '../delete-node';\nimport { EasyForm } from '../easy-form';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemHidden } from '../form-item-hidden';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type { EditableCardDataIndex, EditableCardOperation, EditableCardProps } from './type';\n\n/**\n * 使用FormList实现可编辑卡片\n * ```\n * 1. EditableCard有两种模式,正常 & 禁用\n * 2. 必须在外部包裹Form组件\n * 3. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowField 方法\n * 4. 可使用DragEditableCard组件实现拖拽排序\n * 5. 设置EditableCard disabled后,通过 LabelValueRender 组件展示数据,可通过 disabledRenderProps 配置布局\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * ```\n */\nexport const EditableCard = (props: EditableCardProps) => {\n const form = Form.useFormInstance();\n const formListName = toArray<string | number>(props.formListName);\n const formListOperationRef = useRef<FormListOperation>();\n const forceUpdate = hooks.useForceUpdate();\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableCardDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n const getCurrentRowData = hooks.useCallbackRef((formItemPrevName: Array<string | number>) => {\n return form.getFieldValue(formItemPrevName);\n });\n\n const setCurrentRowField = hooks.useCallbackRef(\n (\n formItemPrevName: string | number,\n dataIndexConfigs: {\n name: EditableCardDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n forceUpdate();\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n let titleRender: ReactElement | string | undefined = title;\n if (column.tips) {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tips }}>\n {title}\n </TipsWrapper>\n );\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n const dataIndex = toArray<string>(column['dataIndex']);\n\n return {\n render: (index, fieldData: FormListFieldData, operation: FormListOperation) => {\n const record = form.getFieldValue([...formListCompleteName, fieldData.name]);\n const value = form.getFieldValue([...formListCompleteName, fieldData.name, ...dataIndex]);\n if (isUndefinedOrNull(column.render)) {\n return <Fragment>{value}</Fragment>;\n }\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n\n const rowFormItemCompleteName = [...formListCompleteName, fieldData.name];\n\n const renderOperationProps: EditableCardOperation = {\n index,\n editable,\n add: operation.add,\n remove: operation.remove,\n move: operation.move,\n rowFormItemName: fieldData.name,\n rowFormItemCompleteName,\n setCurrentRowField: setCurrentRowField.bind(null, fieldData.name),\n validateRowFields: validateRowFields.bind(null, rowFormItemCompleteName),\n getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName),\n forceUpdate,\n };\n\n if (column.hidden?.(record, index)) {\n return <FormItemHidden name={[fieldData.name, ...dataIndex]} key={fieldData.key} />;\n }\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n if (editable === true) {\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[fieldData.name, ...dataIndex]}\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n >\n {column.render?.(renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return (\n <FormItemWrapper\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n {...formItemProps}\n >\n {column.render?.(renderOperationProps)}\n </FormItemWrapper>\n );\n },\n };\n });\n }, [\n props.columns,\n form,\n formListCompleteName,\n setCurrentRowField,\n validateRowFields,\n getCurrentRowData,\n forceUpdate,\n ]);\n\n const className = classNames('editable-card', props.className);\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.contentBeforeRender?.(formListOperation, fields.length)}\n {fields.map((fieldItem, index) => {\n const title = props.onCustomGroupName ? props.onCustomGroupName(index) : index + 1;\n\n const extraData = {\n index,\n fields,\n fieldItem,\n operation: formListOperation,\n required: props.required,\n key: `${fieldItem.key}`,\n };\n if (props.onCustomWrapper) {\n return props.onCustomWrapper(\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>,\n extraData,\n );\n }\n\n const cardExtraRenderResult = props.cardExtraRender?.(extraData);\n\n return (\n <CardWrapper\n key={fieldItem.key}\n className={props.cardClassName}\n title={title}\n size=\"small\"\n style={{\n padding: 0,\n margin: '0 0 15px 0',\n ...props.cardStyle,\n }}\n bodyStyle={{ paddingBottom: 0 }}\n // styles={{ body: { paddingBottom: 0 } }}\n extra={\n isValidElement(cardExtraRenderResult) ? (\n cardExtraRenderResult\n ) : (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n {cardExtraRenderResult?.['before']}\n <DeleteNode\n style={{ color: 'red' }}\n hidden={props.required && fields.length === 1}\n onDelete={() => {\n formListOperation.remove(index);\n }}\n />\n {cardExtraRenderResult?.['after']}\n </div>\n )\n }\n >\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>\n </CardWrapper>\n );\n })}\n {fields.length === 0 ? (\n <div className=\"editable-card-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : null}\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: fields.length ? 15 : 0 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n formListOperation.add({ ...defaultValues });\n }}\n >\n 新增\n </ButtonWrapper>\n {props.contentAfterRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableCard","props","form","Form","useFormInstance","formListName","toArray","formListOperationRef","useRef","forceUpdate","_hooks","useForceUpdate","formListCompleteName","validateRowFields","useCallbackRef","formItemPrevName","nameList","Promise","$return","$error","resolve","validateFields","map","item","concat","then","$await_1","$boundEx","getCurrentRowData","getFieldValue","setCurrentRowField","dataIndexConfigs","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","columns","useMemo","column","_column$formItemProps","title","titleRender","tips","_jsx","TipsWrapper","tipType","popoverProps","content","children","required","formItemProps","rules","length","find","dataIndex","render","index","fieldData","operation","_formItemProps","record","isUndefinedOrNull","Fragment","editable","rowFormItemCompleteName","renderOperationProps","add","remove","move","rowFormItemName","bind","hidden","FormItemHidden","key","_extends","message","_createElement","FormItemWrapper","label","span","gridNumber","className","_classNames","style","List","fields","formListOperation","_ref","errors","current","_jsxs","borderRadius","border","contentBeforeRender","fieldItem","_props$cardEasyFormPr2","onCustomGroupName","extraData","onCustomWrapper","_props$cardEasyFormPr","EasyForm","nonuseFormWrapper","cardEasyFormProps","padding","margin","cardExtraRenderResult","cardExtraRender","CardWrapper","cardClassName","size","cardStyle","bodyStyle","paddingBottom","extra","isValidElement","display","alignItems","gap","DeleteNode","color","onDelete","Empty","image","PRESENTED_IMAGE_SIMPLE","ButtonWrapper","block","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","contentAfterRender","ErrorList"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend, get } from '@dimjs/utils';\n\nimport { isUndefinedOrNull, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport { getDefaultExpandAllKeys, getExpandedKeys, getVauleList, onTreeDrop } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n // /**\n // * 是否必选,最后一个不能取消\n // */\n // required?: boolean;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n ...otherProps\n } = props;\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (!isUndefinedOrNull(value)) {\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(expandedKeys))));\n }\n }\n }, [value, state.treeList, valueList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n if (newServiceConfig.onRequestResultAdapter) {\n return newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n }\n if (fieldNames.list) {\n return get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(respData)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return respData;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n const respDataListNew = respData || [];\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?, operateInfo?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList, operateInfo);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList, operateInfo);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList, operateInfo);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList, operateInfo);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode], operateInfo);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target], operateInfo);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n }\n return list;\n }, [fieldNames.children, fieldNames.label, searchResultType, state.treeList, treeSearchValue]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitleNew.substring(0, index);\n const afterStr = strTitleNew.slice(index + treeSearchValue.length);\n const centerStr = strTitleNew.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList as TPlainObject[], fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n","import { attachPropertiesToComponent, TPlainObject } from '@flatbiz/utils';\nimport { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport { TreeWrapper as TreeWrapperInner, TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","childrenValue","map","getExpandedKeys","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","parentId","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","innerOperateValueRef","valueList","useEffectCustom","current","expandedKeys","getTreeExpandedKeys","Array","from","Set","concat","valueIsEmpty","serviceResponseHandle","respData","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","forEach","includes","targetKeys","useUpdateEffect","targetList","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","onChangeExpandedKeys","onSelectAll","temp","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","operateInfo","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","push","prev","mergeList","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","originalDataList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","strTitleNew","beforeStr","substring","afterStr","slice","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","_respData3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","onClick","defaultProps","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend, get } from '@dimjs/utils';\n\nimport { isUndefinedOrNull, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport { getDefaultExpandAllKeys, getExpandedKeys, getVauleList, onTreeDrop } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean;[key: string]: TAny }) => ReactElement;\n // /**\n // * 是否必选,最后一个不能取消\n // */\n // required?: boolean;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n ...otherProps\n } = props;\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (!isUndefinedOrNull(value)) {\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(expandedKeys))));\n }\n }\n }, [value, state.treeList, valueList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n if (newServiceConfig.onRequestResultAdapter) {\n return newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n }\n if (fieldNames.list) {\n return get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(respData)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return respData;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n const respDataListNew = respData || [];\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n onSelectorTreeListChange?.(allState.treeList);\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n } else {\n onSelectorTreeListChange?.(allState.treeList);\n }\n }, newEffectDependencyList);\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) {\n onChangeSelectorList(selectorTreeList || []);\n }\n }, [selectorTreeList]);\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeList.length === 0) {\n void actions.changeRequestStatus({ status: 'request-success' });\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?, operateInfo?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList, operateInfo);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList, operateInfo);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList, operateInfo);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList, operateInfo);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode], operateInfo);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target], operateInfo);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n }\n return list as TPlainObject[];\n }, [fieldNames.children, fieldNames.label, searchResultType, state.treeList, treeSearchValue]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = adapterItem[fieldNames.label] as string;\n let titleDom;\n if (treeSearchValue) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitleNew.substring(0, index);\n const afterStr = strTitleNew.slice(index + treeSearchValue.length);\n const centerStr = strTitleNew.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList as TPlainObject[], fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n","import { attachPropertiesToComponent, TPlainObject } from '@flatbiz/utils';\nimport { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport { TreeWrapper as TreeWrapperInner, TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","childrenValue","map","getExpandedKeys","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","parentId","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","innerOperateValueRef","valueList","useEffectCustom","current","expandedKeys","getTreeExpandedKeys","Array","from","Set","concat","valueIsEmpty","serviceResponseHandle","respData","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","forEach","includes","targetKeys","useUpdateEffect","targetList","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","onChangeExpandedKeys","onSelectAll","temp","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","operateInfo","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","push","prev","mergeList","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","originalDataList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","strTitleNew","beforeStr","substring","afterStr","slice","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","_respData3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","onClick","defaultProps","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flatbiz/antd",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.27",
|
|
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.24",
|
|
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.24",
|
|
49
49
|
"@wove/react": "^1.2.23",
|
|
50
50
|
"antd": "5.11.0",
|
|
51
51
|
"dayjs": "1.11.9",
|