@flatbiz/antd 4.5.43 → 4.5.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/label-value-render/index.js +1 -1
- package/esm/label-value-render/index.js.map +1 -1
- package/esm/tree-modal-selector/index.js +1 -1
- package/esm/tree-modal-selector/index.js.map +1 -1
- package/esm/tree-selector-wrapper/index.js +1 -1
- package/esm/tree-selector-wrapper/index.js.map +1 -1
- package/esm/tree-wrapper/index.js +1 -1
- package/esm/tree-wrapper/index.js.map +1 -1
- package/index.d.ts +24 -0
- package/package.json +1 -1
|
@@ -6,5 +6,5 @@ import './../text-symbol-wrapper/index.css';
|
|
|
6
6
|
import './../tips-wrapper/index.css';
|
|
7
7
|
import './index.css';
|
|
8
8
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
9
|
-
import{hooks as e}from"@wove/react/cjs/hooks";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as l,useMemo as t,isValidElement as a}from"react";import{arrayTotal as n,isUndefinedOrNull as s,isNumber as o}from"@flatbiz/utils";import{BoxGrid as u}from"../box-grid/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{TextOverflow as
|
|
9
|
+
import{hooks as e}from"@wove/react/cjs/hooks";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{useState as l,useMemo as t,isValidElement as a}from"react";import{arrayTotal as n,isUndefinedOrNull as s,isNumber as o}from"@flatbiz/utils";import{BoxGrid as u}from"../box-grid/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{TextOverflow as v}from"../text-overflow/index.js";import{TextSymbolWrapper as p}from"../text-symbol-wrapper/index.js";import{TipsWrapper as f}from"../tips-wrapper/index.js";import{jsx as c,jsxs as m}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-number";import"ahooks";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"antd";import"@dimjs/lang/cjs/is-string";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var h=function e(r){var l=[];var t=0;var a=[];for(var s=0;s<r.length;s++){var o=r[s];var u=o.grid;var d=i({},o,{grid:u});if(t+u<=24&&u>0){t+=u;a.push(d)}else{l.push(a);t=u;a=[d]}}if(a.length>0){l.push(a)}if(l.length>0){l=l.map((function(e,r){if(e.length===1){e[0].grid=24}else{var i=n(e,"grid");var t=e[e.length-1];if(i<24){t.grid=24-i+t.grid}}if(r===l.length-1){return e.map((function(e){e.isLast=true;return e}))}return e}))}var v=[];l.forEach((function(e){v=v.concat(e)}));return v};var x=function n(x){var g=d.useResponsivePoint()||"";var b=l(),y=b[0],j=b[1];var k=x.column,w=x.forceColumn,C=x.labelAlign,T=x.labelWidth,z=x.options,N=x.border,B=x.bordered,S=x.width,P=x.size,L=P===void 0?"default":P,R=x.direction,q=R===void 0?"auto":R,E=x.gutter,H=x.hiddenValueHover;var W=k&&[1,2,3,4,6].includes(k)?k:4;var _=!s(B)?B:N;var A=t((function(){if(q==="horizontal"||q==="vertical")return q;if(g==="xs"||y==="xs")return"vertical";return"horizontal"}),[y,q,g]);var O=t((function(){if(A==="vertical")return true;return s(x.ellipsis)?true:x.ellipsis}),[A,x.ellipsis]);var Q=T?o(T)?T+"px":T:"100px";var V=t((function(){if(w){var e=24/w;return{xs:e,sm:e,md:e,lg:e,xl:e,xxl:e}}var r={1:{xs:24,sm:24,md:24,lg:24,xl:24,xxl:24},2:{xs:24,sm:12,md:12,lg:12,xl:12,xxl:12},3:{xs:24,sm:12,md:12,lg:8,xl:8,xxl:8},4:{xs:24,sm:12,md:12,lg:6,xl:6,xxl:6},6:{xs:24,sm:12,md:8,lg:6,xl:4,xxl:4}};return r[W]}),[W,w]);var D=t((function(){if(!y)return undefined;var e=[];z.forEach((function(r){if(!r.hidden){var l=undefined;if(r.span){var t=r.span>W?W:r.span;l=t*(24/W);if(y==="xs"){l=24}else if(y==="sm"){l=l>12?l:12}}e.push(i({},r,{grid:l?l:V[y]}))}}));return h(e.filter(Boolean))}),[y,W,V,z]);var F=!_&&A!=="vertical";var G=function e(){return D==null?void 0:D.map((function(e,l){var t=A==="vertical"?true:s(e.ellipsis)?O:e.ellipsis;var n=e.label;if(e.tips&&t){n=c(f,{tipType:"tooltip",tooltipProps:{title:e.tips},children:c(v,{text:n,hideTip:e.hideTip})})}else if(e.tips){n=c(f,{tipType:"tooltip",tooltipProps:{title:e.tips},children:n})}else if(t){n=c(v,{text:n,hideTip:e.hideTip})}var o=F?{display:"flex",gap:3}:{};return m(u.Col,i({},V,{span:e.grid,className:r("label-value-tr",{"label-value-last-tr":e.isLast}),children:[m("div",{className:"label-value-label",style:i({},o,x.labelStyle,e.labelStyle),children:[e.required?c("div",{style:{paddingLeft:8,position:"relative",width:"100%"},children:c(p,{text:n,symbolType:"required"})}):n,F?c("div",{children:":"}):null]}),!a(e.value)&&t&&!e.valueNoWrapper?c("div",{className:"label-value-value",style:i({},x.valueStyle,e.valueStyle),children:c(v,{text:e.value,onClick:e.onClick,hideTip:e.hideTip})}):c("div",{className:"label-value-value",style:i({wordBreak:"break-all"},x.valueStyle,e.valueStyle),children:e.onClick?c("a",{onClick:e.onClick,children:e.value}):e.value})]}),l)})).filter(Boolean)};var I=e.useCallbackRef((function(e){j(e)}));var J=t((function(){if(["xs","sm"].includes(g)||!S){return{}}return{width:S}}),[g,S]);var K=function(){if(C)return C;if(_)return"left";if(A==="horizontal")return"right";return"left"}();return c(u.Row,{style:i({},J,x.style,{"--lvr-label-width":A==="horizontal"?Q:undefined}),className:r("label-value-render","lvr-"+A,"lvr-size-"+L,"lvr-label-"+K,{"lvr-border":_},{"lvr-hidden-hover":H},x.className),gutter:_?[0,0]:E||[10,0],onBoxBreakpointChange:I,children:G()})};export{x as LabelValueRender};
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-render/utils.ts","@flatbiz/antd/src/label-value-render/label-value.tsx"],"sourcesContent":["import { arrayTotal } from '@flatbiz/utils';\nimport { TLabelValueRenderItem } from './types';\n\nexport const getRenderGrid = (dataList: TLabelValueRenderItem[]) => {\n let results: TLabelValueRenderItem[][] = [];\n\n let currentSum = 0;\n let currentArr: TLabelValueRenderItem[] = [];\n for (let i = 0; i < dataList.length; i++) {\n const item = dataList[i];\n const grid = item.grid;\n const temp = {\n ...item,\n grid: grid,\n } as TLabelValueRenderItem;\n if (currentSum + grid <= 24 && grid > 0) {\n currentSum += grid;\n currentArr.push(temp);\n } else {\n results.push(currentArr);\n currentSum = grid;\n currentArr = [temp];\n }\n }\n\n if (currentArr.length > 0) {\n results.push(currentArr);\n }\n if (results.length > 0) {\n results = results.map((item, index) => {\n if (item.length === 1) {\n item[0].grid = 24;\n } else {\n const total = arrayTotal(item, 'grid');\n const lastItem = item[item.length - 1];\n if (total < 24) {\n lastItem.grid = 24 - total + lastItem.grid;\n }\n }\n if (index === results.length - 1) {\n return item.map((temp) => {\n temp.isLast = true;\n return temp;\n });\n }\n return item;\n });\n }\n\n let resultsFt: TLabelValueRenderItem[] = [];\n results.forEach((item) => {\n resultsFt = resultsFt.concat(item);\n });\n return resultsFt;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, isValidElement, ReactElement, useMemo, useState } from 'react';\n\nimport { isNumber, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { BoxGrid } from '../box-grid';\nimport { TBoxBreakpoint } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflow } from '../text-overflow';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport { TLabelValueItem, TLabelValueRenderItem } from './types';\nimport { getRenderGrid } from './utils';\n\nexport type LabelValueRenderProps = {\n className?: string;\n style?: CSSProperties;\n /**\n * 定义一行显示几列, 默认值:4\n * ```\n * 1. label+value 一组为一列\n * 2. 当外层宽度尺寸大于 992px(lg) 时,一行显示几列\n * 3. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响,响应式布局\n * 4. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 5. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4 | 6;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4 | 6;\n /** 数据源配置 */\n options: TLabelValueItem[];\n /**\n * 超过宽度将自动省略,默认值:true\n * ```\n * 1. 当 direction = vertical时,强制为true\n * ```\n */\n ellipsis?: boolean;\n /**\n * 是否添加边框\n * @deprecated 已过期,请使用 bordered\n */\n border?: boolean;\n /** 是否添加边框 */\n bordered?: boolean;\n /** label对齐方式 */\n labelAlign?: 'left' | 'right' | 'center';\n /** label 宽度,默认值:100 */\n labelWidth?: number | 'auto';\n width?: number;\n /** label 样式 */\n labelStyle?: CSSProperties;\n /** value 样式 */\n valueStyle?: CSSProperties;\n\n size?: 'default' | 'small';\n /**\n * label&value 方向布局\n * ```\n * 1. auto表示当响应式为xs(小屏幕)时为vertical,其他情况为horizontal\n * ```\n */\n direction?: 'vertical' | 'horizontal' | 'auto';\n /**\n * 网格布局间距,默认值:[10, 0]\n * ```\n * 1. border = true 无效\n * ```\n */\n gutter?: [number, number];\n\n /** 隐藏 value hover效果 */\n hiddenValueHover?: boolean;\n};\n\n/**\n * label+value 列表布局\n * ```\n * 1. 可设置超出隐藏、必填标识、设置隐藏、添加说明标签等功能\n * 2. 可自定义设置占用网格列数\n * 3. 内置响应式布局\n * ```\n */\nexport const LabelValueRender = (props: LabelValueRenderProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [breakpoint, setBreakpoint] = useState<TBoxBreakpoint>();\n\n const {\n column,\n forceColumn,\n labelAlign,\n labelWidth,\n options,\n border,\n bordered,\n width,\n size = 'default',\n direction = 'auto',\n gutter,\n hiddenValueHover,\n } = props;\n\n const columnNew = column && [1, 2, 3, 4, 6].includes(column) ? column : 4;\n\n const borderedNew = !isUndefinedOrNull(bordered) ? bordered : border;\n\n const directionNew = useMemo(() => {\n if (direction === 'horizontal' || direction === 'vertical') return direction;\n if (screenType === 'xs' || breakpoint === 'xs') return 'vertical';\n return 'horizontal';\n }, [breakpoint, direction, screenType]);\n\n const ellipsis = useMemo(() => {\n if (directionNew === 'vertical') return true;\n return isUndefinedOrNull(props.ellipsis) ? true : props.ellipsis;\n }, [directionNew, props.ellipsis]);\n\n const labelWidthNew = labelWidth ? (isNumber(labelWidth) ? `${labelWidth}px` : labelWidth) : '100px';\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n };\n return columnMap[columnNew];\n }, [columnNew, forceColumn]);\n\n const renderList = useMemo(() => {\n if (!breakpoint) return undefined;\n const dataListNew: TLabelValueRenderItem[] = [];\n options.forEach((item) => {\n if (!item.hidden) {\n let grid: number | undefined = undefined;\n if (item.span) {\n const itemSpan = item.span > columnNew ? columnNew : item.span;\n grid = itemSpan * (24 / columnNew);\n if (breakpoint === 'xs') {\n grid = 24;\n } else if (breakpoint === 'sm') {\n grid = grid > 12 ? grid : 12;\n }\n }\n dataListNew.push({\n ...item,\n grid: grid ? grid : gridSize[breakpoint],\n });\n }\n });\n return getRenderGrid(dataListNew.filter(Boolean));\n }, [breakpoint, columnNew, gridSize, options]);\n\n const showColon = !borderedNew && directionNew !== 'vertical';\n\n const getFormRowChildren = () => {\n return renderList\n ?.map((item, index) => {\n const ellipsisFt =\n directionNew === 'vertical' ? true : isUndefinedOrNull(item.ellipsis) ? ellipsis : item.ellipsis;\n\n let labelContent: ReactElement | string = item.label;\n // let labelContent: ReactElement | string = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // if (colon) {\n // labelContent = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // }\n\n if (item.tips && ellipsisFt) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />\n </TipsWrapper>\n );\n } else if (item.tips) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n {labelContent}\n </TipsWrapper>\n );\n } else if (ellipsisFt) {\n labelContent = <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />;\n }\n\n const innerlabelStyle = showColon ? { display: 'flex', gap: 3 } : {};\n return (\n <BoxGrid.Col\n key={index}\n {...gridSize}\n span={item.grid}\n className={classNames('label-value-tr', {\n 'label-value-last-tr': item.isLast,\n })}\n >\n <div\n className=\"label-value-label\"\n style={{\n ...innerlabelStyle,\n ...props.labelStyle,\n }}\n >\n {item.required ? (\n <div\n style={{\n paddingLeft: 8,\n position: 'relative',\n width: '100%',\n }}\n >\n <TextSymbolWrapper text={labelContent} symbolType=\"required\" />\n </div>\n ) : (\n labelContent\n )}\n {showColon ? <div>:</div> : null}\n </div>\n {!isValidElement(item.value) && ellipsisFt && !item.valueNoWrapper ? (\n <div className=\"label-value-value\" style={props.valueStyle}>\n <TextOverflow text={item.value as string} onClick={item.onClick} hideTip={item.hideTip} />\n </div>\n ) : (\n <div\n className=\"label-value-value\"\n style={{\n wordBreak: 'break-all',\n ...props.valueStyle,\n }}\n >\n {item.onClick ? <a onClick={item.onClick}>{item.value}</a> : item.value}\n </div>\n )}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const onBoxBreakpointChange = hooks.useCallbackRef((breakpoint: TBoxBreakpoint) => {\n setBreakpoint(breakpoint);\n });\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const align = (function () {\n if (labelAlign) return labelAlign;\n if (borderedNew) return 'left';\n if (directionNew === 'horizontal') return 'right';\n return 'left';\n })();\n\n return (\n <BoxGrid.Row\n style={\n {\n ...innerStyle,\n ...props.style,\n '--lvr-label-width': directionNew === 'horizontal' ? labelWidthNew : undefined,\n } as TAny\n }\n className={classNames(\n 'label-value-render',\n `lvr-${directionNew}`,\n `lvr-size-${size}`,\n `lvr-label-${align}`,\n { 'lvr-border': borderedNew },\n { 'lvr-hidden-hover': hiddenValueHover },\n props.className,\n )}\n gutter={borderedNew ? [0, 0] : gutter || [10, 0]}\n onBoxBreakpointChange={onBoxBreakpointChange}\n >\n {getFormRowChildren()}\n </BoxGrid.Row>\n );\n};\n"],"names":["getRenderGrid","dataList","results","currentSum","currentArr","i","length","item","grid","temp","_extends","push","map","index","total","arrayTotal","lastItem","isLast","resultsFt","forEach","concat","LabelValueRender","props","screenType","fbaHooks","useResponsivePoint","_useState","useState","breakpoint","setBreakpoint","column","forceColumn","labelAlign","labelWidth","options","border","bordered","width","_props$size","size","_props$direction","direction","gutter","hiddenValueHover","columnNew","includes","borderedNew","isUndefinedOrNull","directionNew","useMemo","ellipsis","labelWidthNew","isNumber","gridSize","num","xs","sm","md","lg","xl","xxl","columnMap","renderList","undefined","dataListNew","hidden","span","itemSpan","filter","Boolean","showColon","getFormRowChildren","ellipsisFt","labelContent","label","tips","_jsx","TipsWrapper","tipType","tooltipProps","title","children","TextOverflow","text","hideTip","innerlabelStyle","display","gap","_jsxs","BoxGrid","Col","className","_classNames","style","labelStyle","required","paddingLeft","position","TextSymbolWrapper","symbolType","isValidElement","value","valueNoWrapper","valueStyle","onClick","wordBreak","onBoxBreakpointChange","_hooks","useCallbackRef","innerStyle","align","Row"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/label-value-render/utils.ts","@flatbiz/antd/src/label-value-render/label-value.tsx"],"sourcesContent":["import { arrayTotal } from '@flatbiz/utils';\nimport { TLabelValueRenderItem } from './types';\n\nexport const getRenderGrid = (dataList: TLabelValueRenderItem[]) => {\n let results: TLabelValueRenderItem[][] = [];\n\n let currentSum = 0;\n let currentArr: TLabelValueRenderItem[] = [];\n for (let i = 0; i < dataList.length; i++) {\n const item = dataList[i];\n const grid = item.grid;\n const temp = {\n ...item,\n grid: grid,\n } as TLabelValueRenderItem;\n if (currentSum + grid <= 24 && grid > 0) {\n currentSum += grid;\n currentArr.push(temp);\n } else {\n results.push(currentArr);\n currentSum = grid;\n currentArr = [temp];\n }\n }\n\n if (currentArr.length > 0) {\n results.push(currentArr);\n }\n if (results.length > 0) {\n results = results.map((item, index) => {\n if (item.length === 1) {\n item[0].grid = 24;\n } else {\n const total = arrayTotal(item, 'grid');\n const lastItem = item[item.length - 1];\n if (total < 24) {\n lastItem.grid = 24 - total + lastItem.grid;\n }\n }\n if (index === results.length - 1) {\n return item.map((temp) => {\n temp.isLast = true;\n return temp;\n });\n }\n return item;\n });\n }\n\n let resultsFt: TLabelValueRenderItem[] = [];\n results.forEach((item) => {\n resultsFt = resultsFt.concat(item);\n });\n return resultsFt;\n};\n","import { classNames } from '@dimjs/utils';\nimport { CSSProperties, isValidElement, ReactElement, useMemo, useState } from 'react';\n\nimport { isNumber, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { BoxGrid } from '../box-grid';\nimport { TBoxBreakpoint } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { TextOverflow } from '../text-overflow';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport { TLabelValueItem, TLabelValueRenderItem } from './types';\nimport { getRenderGrid } from './utils';\n\nexport type LabelValueRenderProps = {\n className?: string;\n style?: CSSProperties;\n /**\n * 定义一行显示几列, 默认值:4\n * ```\n * 1. label+value 一组为一列\n * 2. 当外层宽度尺寸大于 992px(lg) 时,一行显示几列\n * 3. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响,响应式布局\n * 4. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 5. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4 | 6;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4 | 6;\n /** 数据源配置 */\n options: TLabelValueItem[];\n /**\n * 超过宽度将自动省略,默认值:true\n * ```\n * 1. 当 direction = vertical时,强制为true\n * ```\n */\n ellipsis?: boolean;\n /**\n * 是否添加边框\n * @deprecated 已过期,请使用 bordered\n */\n border?: boolean;\n /** 是否添加边框 */\n bordered?: boolean;\n /** label对齐方式 */\n labelAlign?: 'left' | 'right' | 'center';\n /** label 宽度,默认值:100 */\n labelWidth?: number | 'auto';\n width?: number;\n /** label 样式 */\n labelStyle?: CSSProperties;\n /** value 样式 */\n valueStyle?: CSSProperties;\n\n size?: 'default' | 'small';\n /**\n * label&value 方向布局\n * ```\n * 1. auto表示当响应式为xs(小屏幕)时为vertical,其他情况为horizontal\n * ```\n */\n direction?: 'vertical' | 'horizontal' | 'auto';\n /**\n * 网格布局间距,默认值:[10, 0]\n * ```\n * 1. border = true 无效\n * ```\n */\n gutter?: [number, number];\n\n /** 隐藏 value hover效果 */\n hiddenValueHover?: boolean;\n};\n\n/**\n * label+value 列表布局\n * ```\n * 1. 可设置超出隐藏、必填标识、设置隐藏、添加说明标签等功能\n * 2. 可自定义设置占用网格列数\n * 3. 内置响应式布局\n * ```\n */\nexport const LabelValueRender = (props: LabelValueRenderProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [breakpoint, setBreakpoint] = useState<TBoxBreakpoint>();\n\n const {\n column,\n forceColumn,\n labelAlign,\n labelWidth,\n options,\n border,\n bordered,\n width,\n size = 'default',\n direction = 'auto',\n gutter,\n hiddenValueHover,\n } = props;\n\n const columnNew = column && [1, 2, 3, 4, 6].includes(column) ? column : 4;\n\n const borderedNew = !isUndefinedOrNull(bordered) ? bordered : border;\n\n const directionNew = useMemo(() => {\n if (direction === 'horizontal' || direction === 'vertical') return direction;\n if (screenType === 'xs' || breakpoint === 'xs') return 'vertical';\n return 'horizontal';\n }, [breakpoint, direction, screenType]);\n\n const ellipsis = useMemo(() => {\n if (directionNew === 'vertical') return true;\n return isUndefinedOrNull(props.ellipsis) ? true : props.ellipsis;\n }, [directionNew, props.ellipsis]);\n\n const labelWidthNew = labelWidth ? (isNumber(labelWidth) ? `${labelWidth}px` : labelWidth) : '100px';\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n 6: { xs: 24, sm: 12, md: 8, lg: 6, xl: 4, xxl: 4 },\n };\n return columnMap[columnNew];\n }, [columnNew, forceColumn]);\n\n const renderList = useMemo(() => {\n if (!breakpoint) return undefined;\n const dataListNew: TLabelValueRenderItem[] = [];\n options.forEach((item) => {\n if (!item.hidden) {\n let grid: number | undefined = undefined;\n if (item.span) {\n const itemSpan = item.span > columnNew ? columnNew : item.span;\n grid = itemSpan * (24 / columnNew);\n if (breakpoint === 'xs') {\n grid = 24;\n } else if (breakpoint === 'sm') {\n grid = grid > 12 ? grid : 12;\n }\n }\n dataListNew.push({\n ...item,\n grid: grid ? grid : gridSize[breakpoint],\n });\n }\n });\n return getRenderGrid(dataListNew.filter(Boolean));\n }, [breakpoint, columnNew, gridSize, options]);\n\n const showColon = !borderedNew && directionNew !== 'vertical';\n\n const getFormRowChildren = () => {\n return renderList\n ?.map((item, index) => {\n const ellipsisFt =\n directionNew === 'vertical' ? true : isUndefinedOrNull(item.ellipsis) ? ellipsis : item.ellipsis;\n\n let labelContent: ReactElement | string = item.label;\n // let labelContent: ReactElement | string = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // if (colon) {\n // labelContent = isValidElement(item.label)\n // ? item.label\n // : `${item.label}${colon}`;\n // }\n\n if (item.tips && ellipsisFt) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />\n </TipsWrapper>\n );\n } else if (item.tips) {\n labelContent = (\n <TipsWrapper tipType=\"tooltip\" tooltipProps={{ title: item.tips }}>\n {labelContent}\n </TipsWrapper>\n );\n } else if (ellipsisFt) {\n labelContent = <TextOverflow text={labelContent as unknown as string} hideTip={item.hideTip} />;\n }\n\n const innerlabelStyle = showColon ? { display: 'flex', gap: 3 } : {};\n return (\n <BoxGrid.Col\n key={index}\n {...gridSize}\n span={item.grid}\n className={classNames('label-value-tr', {\n 'label-value-last-tr': item.isLast,\n })}\n >\n <div\n className=\"label-value-label\"\n style={{\n ...innerlabelStyle,\n ...props.labelStyle,\n ...item.labelStyle,\n }}\n >\n {item.required ? (\n <div\n style={{\n paddingLeft: 8,\n position: 'relative',\n width: '100%',\n }}\n >\n <TextSymbolWrapper text={labelContent} symbolType=\"required\" />\n </div>\n ) : (\n labelContent\n )}\n {showColon ? <div>:</div> : null}\n </div>\n {!isValidElement(item.value) && ellipsisFt && !item.valueNoWrapper ? (\n <div\n className=\"label-value-value\"\n style={{\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n <TextOverflow text={item.value as string} onClick={item.onClick} hideTip={item.hideTip} />\n </div>\n ) : (\n <div\n className=\"label-value-value\"\n style={{\n wordBreak: 'break-all',\n ...props.valueStyle,\n ...item.valueStyle,\n }}\n >\n {item.onClick ? <a onClick={item.onClick}>{item.value}</a> : item.value}\n </div>\n )}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const onBoxBreakpointChange = hooks.useCallbackRef((breakpoint: TBoxBreakpoint) => {\n setBreakpoint(breakpoint);\n });\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const align = (function () {\n if (labelAlign) return labelAlign;\n if (borderedNew) return 'left';\n if (directionNew === 'horizontal') return 'right';\n return 'left';\n })();\n\n return (\n <BoxGrid.Row\n style={\n {\n ...innerStyle,\n ...props.style,\n '--lvr-label-width': directionNew === 'horizontal' ? labelWidthNew : undefined,\n } as TAny\n }\n className={classNames(\n 'label-value-render',\n `lvr-${directionNew}`,\n `lvr-size-${size}`,\n `lvr-label-${align}`,\n { 'lvr-border': borderedNew },\n { 'lvr-hidden-hover': hiddenValueHover },\n props.className,\n )}\n gutter={borderedNew ? [0, 0] : gutter || [10, 0]}\n onBoxBreakpointChange={onBoxBreakpointChange}\n >\n {getFormRowChildren()}\n </BoxGrid.Row>\n );\n};\n"],"names":["getRenderGrid","dataList","results","currentSum","currentArr","i","length","item","grid","temp","_extends","push","map","index","total","arrayTotal","lastItem","isLast","resultsFt","forEach","concat","LabelValueRender","props","screenType","fbaHooks","useResponsivePoint","_useState","useState","breakpoint","setBreakpoint","column","forceColumn","labelAlign","labelWidth","options","border","bordered","width","_props$size","size","_props$direction","direction","gutter","hiddenValueHover","columnNew","includes","borderedNew","isUndefinedOrNull","directionNew","useMemo","ellipsis","labelWidthNew","isNumber","gridSize","num","xs","sm","md","lg","xl","xxl","columnMap","renderList","undefined","dataListNew","hidden","span","itemSpan","filter","Boolean","showColon","getFormRowChildren","ellipsisFt","labelContent","label","tips","_jsx","TipsWrapper","tipType","tooltipProps","title","children","TextOverflow","text","hideTip","innerlabelStyle","display","gap","_jsxs","BoxGrid","Col","className","_classNames","style","labelStyle","required","paddingLeft","position","TextSymbolWrapper","symbolType","isValidElement","value","valueNoWrapper","valueStyle","onClick","wordBreak","onBoxBreakpointChange","_hooks","useCallbackRef","innerStyle","align","Row"],"mappings":";q2BAGO,IAAMA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAIC,EAAqC,GAEzC,IAAIC,EAAa,EACjB,IAAIC,EAAsC,GAC1C,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAASK,OAAQD,IAAK,CACxC,IAAME,EAAON,EAASI,GACtB,IAAMG,EAAOD,EAAKC,KAClB,IAAMC,EAAIC,EAAA,CAAA,EACLH,EAAI,CACPC,KAAMA,IAER,GAAIL,EAAaK,GAAQ,IAAMA,EAAO,EAAG,CACvCL,GAAcK,EACdJ,EAAWO,KAAKF,EAClB,KAAO,CACLP,EAAQS,KAAKP,GACbD,EAAaK,EACbJ,EAAa,CAACK,EAChB,CACF,CAEA,GAAIL,EAAWE,OAAS,EAAG,CACzBJ,EAAQS,KAAKP,EACf,CACA,GAAIF,EAAQI,OAAS,EAAG,CACtBJ,EAAUA,EAAQU,KAAI,SAACL,EAAMM,GAC3B,GAAIN,EAAKD,SAAW,EAAG,CACrBC,EAAK,GAAGC,KAAO,EACjB,KAAO,CACL,IAAMM,EAAQC,EAAWR,EAAM,QAC/B,IAAMS,EAAWT,EAAKA,EAAKD,OAAS,GACpC,GAAIQ,EAAQ,GAAI,CACdE,EAASR,KAAO,GAAKM,EAAQE,EAASR,IACxC,CACF,CACA,GAAIK,IAAUX,EAAQI,OAAS,EAAG,CAChC,OAAOC,EAAKK,KAAI,SAACH,GACfA,EAAKQ,OAAS,KACd,OAAOR,CACT,GACF,CACA,OAAOF,CACT,GACF,CAEA,IAAIW,EAAqC,GACzChB,EAAQiB,SAAQ,SAACZ,GACfW,EAAYA,EAAUE,OAAOb,EAC/B,IACA,OAAOW,CACT,MCkDaG,EAAmB,SAAnBA,EAAoBC,GAC/B,IAAMC,EAAaC,EAASC,sBAAwB,GACpD,IAAAC,EAAoCC,IAA7BC,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAEhC,IACEI,EAYER,EAZFQ,OACAC,EAWET,EAXFS,YACAC,EAUEV,EAVFU,WACAC,EASEX,EATFW,WACAC,EAQEZ,EARFY,QACAC,EAOEb,EAPFa,OACAC,EAMEd,EANFc,SACAC,EAKEf,EALFe,MAAKC,EAKHhB,EAJFiB,KAAAA,EAAID,SAAG,EAAA,UAASA,EAAAE,EAIdlB,EAHFmB,UAAAA,EAASD,SAAG,EAAA,OAAMA,EAClBE,EAEEpB,EAFFoB,OACAC,EACErB,EADFqB,iBAGF,IAAMC,EAAYd,GAAU,CAAC,EAAG,EAAG,EAAG,EAAG,GAAGe,SAASf,GAAUA,EAAS,EAExE,IAAMgB,GAAeC,EAAkBX,GAAYA,EAAWD,EAE9D,IAAMa,EAAeC,GAAQ,WAC3B,GAAIR,IAAc,cAAgBA,IAAc,WAAY,OAAOA,EACnE,GAAIlB,IAAe,MAAQK,IAAe,KAAM,MAAO,WACvD,MAAO,YACR,GAAE,CAACA,EAAYa,EAAWlB,IAE3B,IAAM2B,EAAWD,GAAQ,WACvB,GAAID,IAAiB,WAAY,OAAO,KACxC,OAAOD,EAAkBzB,EAAM4B,UAAY,KAAO5B,EAAM4B,QACzD,GAAE,CAACF,EAAc1B,EAAM4B,WAExB,IAAMC,EAAgBlB,EAAcmB,EAASnB,GAAiBA,EAAiBA,KAAAA,EAAc,QAE7F,IAAMoB,EAAWJ,GAAQ,WACvB,GAAIlB,EAAa,CACf,IAAMuB,EAAM,GAAKvB,EACjB,MAAO,CAAEwB,GAAID,EAAKE,GAAIF,EAAKG,GAAIH,EAAKI,GAAIJ,EAAKK,GAAIL,EAAKM,IAAKN,EAC7D,CACA,IAAMO,EAAY,CAChB,EAAG,CAAEN,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,IAClD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,IAClD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,GAChD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,GAChD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,IAAK,IAEjD,OAAOC,EAAUjB,EACnB,GAAG,CAACA,EAAWb,IAEf,IAAM+B,EAAab,GAAQ,WACzB,IAAKrB,EAAY,OAAOmC,UACxB,IAAMC,EAAuC,GAC7C9B,EAAQf,SAAQ,SAACZ,GACf,IAAKA,EAAK0D,OAAQ,CAChB,IAAIzD,EAA2BuD,UAC/B,GAAIxD,EAAK2D,KAAM,CACb,IAAMC,EAAW5D,EAAK2D,KAAOtB,EAAYA,EAAYrC,EAAK2D,KAC1D1D,EAAO2D,GAAY,GAAKvB,GACxB,GAAIhB,IAAe,KAAM,CACvBpB,EAAO,EACT,MAAO,GAAIoB,IAAe,KAAM,CAC9BpB,EAAOA,EAAO,GAAKA,EAAO,EAC5B,CACF,CACAwD,EAAYrD,KAAID,KACXH,EAAI,CACPC,KAAMA,EAAOA,EAAO6C,EAASzB,KAEjC,CACF,IACA,OAAO5B,EAAcgE,EAAYI,OAAOC,SACzC,GAAE,CAACzC,EAAYgB,EAAWS,EAAUnB,IAErC,IAAMoC,GAAaxB,GAAeE,IAAiB,WAEnD,IAAMuB,EAAqB,SAArBA,IACJ,OAAOT,GAAAA,UAAAA,EAAAA,EACHlD,KAAI,SAACL,EAAMM,GACX,IAAM2D,EACJxB,IAAiB,WAAa,KAAOD,EAAkBxC,EAAK2C,UAAYA,EAAW3C,EAAK2C,SAE1F,IAAIuB,EAAsClE,EAAKmE,MAU/C,GAAInE,EAAKoE,MAAQH,EAAY,CAC3BC,EACEG,EAACC,EAAW,CAACC,QAAQ,UAAUC,aAAc,CAAEC,MAAOzE,EAAKoE,MAAOM,SAChEL,EAACM,EAAY,CAACC,KAAMV,EAAmCW,QAAS7E,EAAK6E,WAG3E,MAAO,GAAI7E,EAAKoE,KAAM,CACpBF,EACEG,EAACC,EAAW,CAACC,QAAQ,UAAUC,aAAc,CAAEC,MAAOzE,EAAKoE,MAAOM,SAC/DR,GAGN,MAAM,GAAID,EAAY,CACrBC,EAAeG,EAACM,EAAY,CAACC,KAAMV,EAAmCW,QAAS7E,EAAK6E,SACtF,CAEA,IAAMC,EAAkBf,EAAY,CAAEgB,QAAS,OAAQC,IAAK,GAAM,GAClE,OACEC,EAACC,EAAQC,IAAGhF,KAEN2C,EAAQ,CACZa,KAAM3D,EAAKC,KACXmF,UAAWC,EAAW,iBAAkB,CACtC,sBAAuBrF,EAAKU,SAC3BgE,UAEHO,EAAA,MAAA,CACEG,UAAU,oBACVE,MAAKnF,EACA2E,GAAAA,EACA/D,EAAMwE,WACNvF,EAAKuF,YACRb,SAED1E,CAAAA,EAAKwF,SACJnB,EAAA,MAAA,CACEiB,MAAO,CACLG,YAAa,EACbC,SAAU,WACV5D,MAAO,QACP4C,SAEFL,EAACsB,EAAiB,CAACf,KAAMV,EAAc0B,WAAW,eAGpD1B,EAEDH,EAAYM,EAAA,MAAA,CAAAK,SAAK,MAAU,SAE5BmB,EAAe7F,EAAK8F,QAAU7B,IAAejE,EAAK+F,eAClD1B,EAAA,MAAA,CACEe,UAAU,oBACVE,MAAKnF,EAAA,CAAA,EACAY,EAAMiF,WACNhG,EAAKgG,YACRtB,SAEFL,EAACM,EAAY,CAACC,KAAM5E,EAAK8F,MAAiBG,QAASjG,EAAKiG,QAASpB,QAAS7E,EAAK6E,YAGjFR,EAAA,MAAA,CACEe,UAAU,oBACVE,MAAKnF,EAAA,CACH+F,UAAW,aACRnF,EAAMiF,WACNhG,EAAKgG,YACRtB,SAED1E,EAAKiG,QAAU5B,EAAA,IAAA,CAAG4B,QAASjG,EAAKiG,QAAQvB,SAAE1E,EAAK8F,QAAa9F,EAAK8F,WAjDjExF,EAsDX,IACCuD,OAAOC,UAGZ,IAAMqC,EAAwBC,EAAMC,gBAAe,SAAChF,GAClDC,EAAcD,EAChB,IAEA,IAAMiF,EAAa5D,GAAQ,WAEzB,GAAI,CAAC,KAAM,MAAMJ,SAAStB,KAAgBc,EAAO,CAC/C,MAAO,EACT,CACA,MAAO,CAAEA,MAAAA,EACX,GAAG,CAACd,EAAYc,IAEhB,IAAMyE,EAAS,WACb,GAAI9E,EAAY,OAAOA,EACvB,GAAIc,EAAa,MAAO,OACxB,GAAIE,IAAiB,aAAc,MAAO,QAC1C,MAAO,MACT,CALe,GAOf,OACE4B,EAACa,EAAQsB,IAAG,CACVlB,MAAKnF,EAAA,CAAA,EAEEmG,EACAvF,EAAMuE,MAAK,CACd,oBAAqB7C,IAAiB,aAAeG,EAAgBY,YAGzE4B,UAAWC,EACT,qBAAoB,OACb5C,EACKT,YAAAA,EACCuE,aAAAA,EACb,CAAE,aAAchE,GAChB,CAAE,mBAAoBH,GACtBrB,EAAMqE,WAERjD,OAAQI,EAAc,CAAC,EAAG,GAAKJ,GAAU,CAAC,GAAI,GAC9CgE,sBAAuBA,EAAsBzB,SAE5CV,KAGP"}
|
|
@@ -18,5 +18,5 @@ import './../dropdown-menu-wrapper/index.css';
|
|
|
18
18
|
import './../input-search-wrapper/index.css';
|
|
19
19
|
import './index.css';
|
|
20
20
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
21
|
-
import{a as e,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as o}from"@wove/react/cjs/hooks";import{isObject as r}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as a,toArray as n}from"@flatbiz/utils";import{Select as t}from"antd";import{useRef as
|
|
21
|
+
import{a as e,_ as i}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as o}from"@wove/react/cjs/hooks";import{isObject as r}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as a,toArray as n}from"@flatbiz/utils";import{Select as t,message as l}from"antd";import{useRef as s,useState as m,useEffect as u}from"react";import{TreeModal as d}from"../tree-modal/index.js";import{jsx as p}from"react/jsx-runtime";import"ahooks";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"../flex-layout/index.js";import"@dimjs/utils/cjs/class-names";import"@ant-design/icons/es/icons/CloseOutlined";import"../css-node-hover/index.js";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../text-overflow/index.js";import"@dimjs/lang/cjs/is-string";import"../tree-wrapper/index.js";import"@dimjs/model-react";import"@dimjs/utils/cjs/array";import"@ant-design/icons/es/icons/CaretDownFilled";import"@ant-design/icons/es/icons/MoreOutlined";import"@dimjs/utils/cjs/extend";import"@dimjs/utils/cjs/get";import"@dimjs/model";import"../button-operate/index.js";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"../dropdown-menu-wrapper/index.js";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"react-dom/client";import"@wove/react/cjs/create-ctx";import"../input-search-wrapper/index.js";import"../request-status/index.js";import"@dimjs/utils/cjs/tree";import"dequal";var c=["placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg"];var j=function j(v){var f,g;var x=v.placeholder,h=v.maxTagCount,C=v.labelInValue,b=v.maxCount,y=v.overMaxCountMsg,w=e(v,c);var k=a(x)?"请选择":x;var M=s({});var F=((f=w.fieldNames)==null?void 0:f.label)||"label";var O=((g=w.fieldNames)==null?void 0:g.value)||"value";var _=m(),z=_[0],D=_[1];u((function(){var e;var i=((e=n(v.value))==null?void 0:e.map((function(e){var i;var o=r(e)?e:{label:e,value:e};return{value:o.value,label:((i=M.current[o.value])==null?void 0:i[F])||o.value}})))||[];D(i)}),[F,v.value]);var I=function e(i){var o=n(i).length?i:undefined;if(w.isMultiple==false){v.onChange==null||v.onChange(o==null?void 0:o[0])}else{if(o&&b!==undefined&&o.length>b){void l.error(y?y:"最多选择"+b+"项");return}v.onChange==null||v.onChange(o)}};var N=function e(i){D(i);if(C){I(i);return}I(i==null?void 0:i.map((function(e){return e.value})))};var T=function e(i){D(i);if(C){I(i);return}I(i==null?void 0:i.map((function(e){return e.value})))};var V=o.useCallbackRef((function(e,i){M.current=i;var o=z==null?void 0:z.map((function(e){var o=i[e.value];return o?{label:o[F],value:o[O]}:undefined})).filter(Boolean);D(o)}));return p(d,i({},w,{forceRender:true,onChange:T,onDataSourceChange:V,children:p(t,{labelInValue:true,style:{width:"100%"},placeholder:k,maxTagCount:h,mode:"multiple",open:false,value:z,onChange:N})}))};export{j as TreeModalSelector};
|
|
22
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-modal-selector/selector.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, toArray, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Select } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { TreeModal } from '../tree-modal';\nimport type { TreeModalProps, TreeModelSelectItem } from '../tree-modal/types';\nexport type TreeModalSelectorProps = Omit<TreeModalProps, 'children' | 'forceRender' | 'onChange'> & {\n placeholder?: string;\n /**\n * 1. 可指定数量\n * 2. 可设置 responsive,一行自适应显示\n */\n maxTagCount?: number | 'responsive';\n /** 是否返回label+value模式 */\n labelInValue?: boolean;\n onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;\n};\n\n/**\n * 树弹框选择器\n * ```\n * 1. 可通过 treeProps.checkableType 配置多选节点模式(包括返回所有节点、只返回叶子节点、叶子节点&父节点全选只返回父节点),默认只返回叶子节点\n * 2. demo: https://fex.qa.tcshuke.com/docs/admin/main/selector/tree\n * ```\n */\nexport const TreeModalSelector = (props: TreeModalSelectorProps) => {\n const { placeholder, maxTagCount, labelInValue, ...otherProps } = props;\n const placeholderFt = isUndefinedOrNull(placeholder) ? '请选择' : placeholder;\n\n const dataSourceMapRef = useRef<TPlainObject>({});\n\n const labelKey = otherProps.fieldNames?.label || 'label';\n const valueKey = otherProps.fieldNames?.value || 'value';\n\n const [showValues, setShowValues] = useState<TreeModelSelectItem[]>();\n\n useEffect(() => {\n const dataList =\n toArray(props.value)?.map((item) => {\n const objItems = (isObject(item) ? item : { label: item, value: item }) as TreeModelSelectItem;\n return {\n value: objItems.value,\n label: dataSourceMapRef.current[objItems.value]?.[labelKey] || objItems.value,\n } as TreeModelSelectItem;\n }) || [];\n setShowValues(dataList);\n }, [labelKey, props.value]);\n\n const onInnerChange = (value: TreeModelSelectItem[]) => {\n const valueFt = toArray(value).length ? value : undefined;\n if (otherProps.isMultiple == false) {\n props.onChange?.(valueFt?.[0]);\n } else {\n props.onChange?.(valueFt);\n }\n };\n\n const onSelectChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n\n onInnerChange(value?.map((item) => item.value));\n };\n const treeModalChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n onInnerChange(value?.map((item) => item.value));\n };\n\n const onDataSourceChange = hooks.useCallbackRef((_treeDataList: TPlainObject[], mapData: TPlainObject) => {\n dataSourceMapRef.current = mapData;\n const result = showValues\n ?.map((item) => {\n const target = mapData[item.value];\n return target ? { label: target[labelKey], value: target[valueKey] } : undefined;\n })\n .filter(Boolean) as TreeModelSelectItem[];\n setShowValues(result);\n });\n\n return (\n <TreeModal\n {...otherProps}\n forceRender={true}\n onChange={treeModalChange}\n onDataSourceChange={onDataSourceChange}\n >\n <Select\n labelInValue\n style={{ width: '100%' }}\n placeholder={placeholderFt}\n maxTagCount={maxTagCount}\n mode=\"multiple\"\n open={false}\n value={showValues}\n onChange={onSelectChange}\n />\n </TreeModal>\n );\n};\n"],"names":["TreeModalSelector","props","_otherProps$fieldName","_otherProps$fieldName2","placeholder","maxTagCount","labelInValue","otherProps","_objectWithoutPropertiesLoose","_excluded","placeholderFt","isUndefinedOrNull","dataSourceMapRef","useRef","labelKey","fieldNames","label","valueKey","value","_useState","useState","showValues","setShowValues","useEffect","_toArray","dataList","toArray","map","item","_dataSourceMapRef$cur","objItems","_isObject","current","onInnerChange","valueFt","length","undefined","isMultiple","onChange","onSelectChange","treeModalChange","onDataSourceChange","_hooks","useCallbackRef","_treeDataList","mapData","result","target","filter","Boolean","_jsx","TreeModal","_extends","forceRender","children","Select","style","width","mode","open"],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-modal-selector/selector.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, toArray, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { message, Select } from 'antd';\nimport { useEffect, useRef, useState } from 'react';\nimport { TreeModal } from '../tree-modal';\nimport type { TreeModalProps, TreeModelSelectItem } from '../tree-modal/types';\nexport type TreeModalSelectorProps = Omit<TreeModalProps, 'children' | 'forceRender' | 'onChange'> & {\n placeholder?: string;\n /**\n * 1. 可指定数量\n * 2. 可设置 responsive,一行自适应显示\n */\n maxTagCount?: number | 'responsive';\n /** 是否返回label+value模式 */\n labelInValue?: boolean;\n onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;\n\n /** 最大选择数量 */\n maxCount?: number;\n /** 超过最大选择数量提示文本 */\n overMaxCountMsg?: string;\n};\n\n/**\n * 树弹框选择器\n * ```\n * 1. 可通过 treeProps.checkableType 配置多选节点模式(包括返回所有节点、只返回叶子节点、叶子节点&父节点全选只返回父节点),默认只返回叶子节点\n * 2. demo: https://fex.qa.tcshuke.com/docs/admin/main/selector/tree\n * ```\n */\nexport const TreeModalSelector = (props: TreeModalSelectorProps) => {\n const { placeholder, maxTagCount, labelInValue, maxCount, overMaxCountMsg, ...otherProps } = props;\n const placeholderFt = isUndefinedOrNull(placeholder) ? '请选择' : placeholder;\n\n const dataSourceMapRef = useRef<TPlainObject>({});\n\n const labelKey = otherProps.fieldNames?.label || 'label';\n const valueKey = otherProps.fieldNames?.value || 'value';\n\n const [showValues, setShowValues] = useState<TreeModelSelectItem[]>();\n\n useEffect(() => {\n const dataList =\n toArray(props.value)?.map((item) => {\n const objItems = (isObject(item) ? item : { label: item, value: item }) as TreeModelSelectItem;\n return {\n value: objItems.value,\n label: dataSourceMapRef.current[objItems.value]?.[labelKey] || objItems.value,\n } as TreeModelSelectItem;\n }) || [];\n setShowValues(dataList);\n }, [labelKey, props.value]);\n\n const onInnerChange = (value: TreeModelSelectItem[]) => {\n const valueFt = toArray(value).length ? value : undefined;\n if (otherProps.isMultiple == false) {\n props.onChange?.(valueFt?.[0]);\n } else {\n if (valueFt && maxCount !== undefined && valueFt.length > maxCount) {\n void message.error(overMaxCountMsg ? overMaxCountMsg : `最多选择${maxCount}项`);\n return;\n }\n\n props.onChange?.(valueFt);\n }\n };\n\n const onSelectChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n\n onInnerChange(value?.map((item) => item.value));\n };\n const treeModalChange = (value) => {\n setShowValues(value);\n if (labelInValue) {\n onInnerChange(value);\n return;\n }\n onInnerChange(value?.map((item) => item.value));\n };\n\n const onDataSourceChange = hooks.useCallbackRef((_treeDataList: TPlainObject[], mapData: TPlainObject) => {\n dataSourceMapRef.current = mapData;\n const result = showValues\n ?.map((item) => {\n const target = mapData[item.value];\n return target ? { label: target[labelKey], value: target[valueKey] } : undefined;\n })\n .filter(Boolean) as TreeModelSelectItem[];\n setShowValues(result);\n });\n\n return (\n <TreeModal\n {...otherProps}\n forceRender={true}\n onChange={treeModalChange}\n onDataSourceChange={onDataSourceChange}\n >\n <Select\n labelInValue\n style={{ width: '100%' }}\n placeholder={placeholderFt}\n maxTagCount={maxTagCount}\n mode=\"multiple\"\n open={false}\n value={showValues}\n onChange={onSelectChange}\n />\n </TreeModal>\n );\n};\n"],"names":["TreeModalSelector","props","_otherProps$fieldName","_otherProps$fieldName2","placeholder","maxTagCount","labelInValue","maxCount","overMaxCountMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","placeholderFt","isUndefinedOrNull","dataSourceMapRef","useRef","labelKey","fieldNames","label","valueKey","value","_useState","useState","showValues","setShowValues","useEffect","_toArray","dataList","toArray","map","item","_dataSourceMapRef$cur","objItems","_isObject","current","onInnerChange","valueFt","length","undefined","isMultiple","onChange","message","error","onSelectChange","treeModalChange","onDataSourceChange","_hooks","useCallbackRef","_treeDataList","mapData","result","target","filter","Boolean","_jsx","TreeModal","_extends","forceRender","children","Select","style","width","mode","open"],"mappings":";imEA+BaA,EAAoB,SAApBA,EAAqBC,GAAkC,IAAAC,EAAAC,EAClE,IAAQC,EAAqFH,EAArFG,YAAaC,EAAwEJ,EAAxEI,YAAaC,EAA2DL,EAA3DK,aAAcC,EAA6CN,EAA7CM,SAAUC,EAAmCP,EAAnCO,gBAAoBC,EAAUC,EAAKT,EAAKU,GAClG,IAAMC,EAAgBC,EAAkBT,GAAe,MAAQA,EAE/D,IAAMU,EAAmBC,EAAqB,CAAA,GAE9C,IAAMC,IAAWd,EAAAO,EAAWQ,aAAXf,UAAAA,EAAAA,EAAuBgB,QAAS,QACjD,IAAMC,IAAWhB,EAAAM,EAAWQ,aAAXd,UAAAA,EAAAA,EAAuBiB,QAAS,QAEjD,IAAAC,EAAoCC,IAA7BC,EAAUF,EAAA,GAAEG,EAAaH,EAAA,GAEhCI,GAAU,WAAM,IAAAC,EACd,IAAMC,IACJD,EAAAE,EAAQ3B,EAAMmB,qBAAdM,EAAsBG,KAAI,SAACC,GAAS,IAAAC,EAClC,IAAMC,EAAYC,EAASH,GAAQA,EAAO,CAAEZ,MAAOY,EAAMV,MAAOU,GAChE,MAAO,CACLV,MAAOY,EAASZ,MAChBF,QAAOa,EAAAjB,EAAiBoB,QAAQF,EAASZ,qBAAlCW,EAA2Cf,KAAagB,EAASZ,MAE3E,MAAK,GACRI,EAAcG,EACf,GAAE,CAACX,EAAUf,EAAMmB,QAEpB,IAAMe,EAAgB,SAAhBA,EAAiBf,GACrB,IAAMgB,EAAUR,EAAQR,GAAOiB,OAASjB,EAAQkB,UAChD,GAAI7B,EAAW8B,YAAc,MAAO,CAClCtC,EAAMuC,UAANvC,MAAAA,EAAMuC,SAAWJ,GAAAA,UAAAA,EAAAA,EAAU,GAC7B,KAAO,CACL,GAAIA,GAAW7B,IAAa+B,WAAaF,EAAQC,OAAS9B,EAAU,MAC7DkC,EAAQC,MAAMlC,EAAkBA,EAAe,OAAUD,EAAQ,KACtE,MACF,CAEAN,EAAMuC,UAANvC,MAAAA,EAAMuC,SAAWJ,EACnB,GAGF,IAAMO,EAAiB,SAAjBA,EAAkBvB,GACtBI,EAAcJ,GACd,GAAId,EAAc,CAChB6B,EAAcf,GACd,MACF,CAEAe,EAAcf,GAAAA,UAAAA,EAAAA,EAAOS,KAAI,SAACC,GAAI,OAAKA,EAAKV,KAAK,MAE/C,IAAMwB,EAAkB,SAAlBA,EAAmBxB,GACvBI,EAAcJ,GACd,GAAId,EAAc,CAChB6B,EAAcf,GACd,MACF,CACAe,EAAcf,GAAAA,UAAAA,EAAAA,EAAOS,KAAI,SAACC,GAAI,OAAKA,EAAKV,KAAK,MAG/C,IAAMyB,EAAqBC,EAAMC,gBAAe,SAACC,EAA+BC,GAC9EnC,EAAiBoB,QAAUe,EAC3B,IAAMC,EAAS3B,GAAAA,UAAAA,EAAAA,EACXM,KAAI,SAACC,GACL,IAAMqB,EAASF,EAAQnB,EAAKV,OAC5B,OAAO+B,EAAS,CAAEjC,MAAOiC,EAAOnC,GAAWI,MAAO+B,EAAOhC,IAAcmB,SACzE,IACCc,OAAOC,SACV7B,EAAc0B,EAChB,IAEA,OACEI,EAACC,EAASC,KACJ/C,EAAU,CACdgD,YAAa,KACbjB,SAAUI,EACVC,mBAAoBA,EAAmBa,SAEvCJ,EAACK,EAAM,CACLrD,aAAY,KACZsD,MAAO,CAAEC,MAAO,QAChBzD,YAAaQ,EACbP,YAAaA,EACbyD,KAAK,WACLC,KAAM,MACN3C,MAAOG,EACPiB,SAAUG,MAIlB"}
|
|
@@ -3,5 +3,5 @@ import './../fba-hooks/index.css';
|
|
|
3
3
|
import './../request-status/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import t from"@ant-design/icons/es/icons/CaretDownFilled";import{extend as
|
|
6
|
+
import e from"@ant-design/icons/es/icons/RedoOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import t from"@ant-design/icons/es/icons/CaretDownFilled";import{extend as n}from"@dimjs/utils/cjs/extend";import{hooks as l}from"@wove/react/cjs/hooks";import{isArray as a}from"@dimjs/lang/cjs/is-array";import{get as i}from"@dimjs/utils/cjs/get";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{a as u,_ as s}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{toArray as c,treeToTiledMap as f,isNotEmptyArray as d,treeToArray as v,isUndefinedOrNull as p}from"@flatbiz/utils";import{usePrevious as m}from"ahooks";import{TreeSelect as h,Button as S}from"antd";import{dequal as g}from"dequal";import{useState as C,useRef as b,useMemo as y,createElement as q}from"react";import{fbaHooks as L}from"../fba-hooks/index.js";import{RequestStatus as w}from"../request-status/index.js";import{Model as R}from"@dimjs/model-react";import{jsx as T}from"react/jsx-runtime";import"../use-responsive-point-21b8c601.js";var j={treeSelectorList:[],treeSelectorTiledMap:{},queryIsEmpty:false};var k={actions:{setSelectBoxList:function e(r){return function(e){e.treeSelectorList=r.treeSelectorList||[];e.treeSelectorTiledMap=r.treeSelectorTiledMap||{};e.requestStatus="request-success"}},resetSelectBoxList:function e(){return function(e){e.treeSelectorList=[];e.treeSelectorTiledMap={}}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r}}},state:j};var x={};var M=function e(r){if(!x[r]){x[r]=R(k)}return x[r]};var E=function e(r,t){var n=[];var l=t[r];while(l){var a=l.pId;l=t[a];if(l){n.push(a)}}return n};var I=function e(r,t){if(r.length===0)return[];var n=[];r.forEach((function(e){var r=E(e,t);n.push.apply(n,r)}));return Array.from(new Set(n))};var N=["serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","treeSelectorList","requestMessageConfig","modelKey","value","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","selectedParentCheckedAllChildrenList","fieldNames","onChange","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","executeOnChangeInRenderFirstValue"];var A=function R(j){var k=j.serviceConfig,x=j.effectDependencyList,E=j.onTreeSelectorListChange,A=j.onTreeSelectorRequestError,O=j.treeSelectorList,D=j.requestMessageConfig,P=j.modelKey,V=j.value,F=j.labelInValue,B=j.labelInValueFieldNames,K=j.onTreeItemDataAdapter,H=j.selectedParentCheckedAllChildrenList,J=H===void 0?true:H,W=j.fieldNames,_=j.onChange,z=j.treeDefaultExpandAll,G=j.showAllOption,Q=j.initRootExpand,U=j.treeDefaultExpandedKeys,X=j.executeOnChangeInRenderFirstValue,Y=u(j,N);var Z=Object.prototype.hasOwnProperty.call(j,"treeSelectorList");var $=k||{};var ee=x||[];var re=L.useSafeState(false),te=re[0],ne=re[1];var le=C(),ae=le[0],ie=le[1];var oe=M(P).useStore(),ue=oe[0],se=oe[1];var ce="request-progress-"+P;var fe=Y.treeCheckable||Y.multiple;var de=b(true);var ve=y((function(){if(Y.treeCheckStrictly)return true;return F}),[F,Y.treeCheckStrictly]);var pe=y((function(){return s({label:"label",value:"value",children:"children",disabled:"disabled"},W)}),[W]);var me=y((function(){return s({label:"label",value:"value"},B)}),[B]);var he=y((function(){if(G){var e=G===true;return{label:e?"全部":G.label,value:e?"":G.value}}return null}),[G]);var Se=C(),ge=Se[0],Ce=Se[1];var be=L.useMemoCustom((function(){return c(V).map((function(e){if(o(e)){return ve?e[me.value]:e[pe.value]}return e}))}),[pe.value,ve,me.value,j.value]);var ye=m(be);L.useEffectCustom((function(){if(ue.treeSelectorList.length>0){if(de.current&&X&&ve){var e=[];var r=[];be.forEach((function(t){var n=ue.treeSelectorTiledMap[t];if(n){var l;r.push(n);e.push((l={},l[me.label]=n[pe.label],l[me.value]=n[pe.value],l))}}));if(fe){j.onChange==null||j.onChange(e?e:undefined,r)}else{j.onChange==null||j.onChange(e?e[0]:undefined,r[0])}}var t=[];if(de.current){de.current=false;if(U){t=U}else if(z){var n=Object.keys(ue.treeSelectorTiledMap).map((function(e){var r;return(r=ue.treeSelectorTiledMap[e])==null?void 0:r[pe.value]}));t=n}else if(Q&&ue.treeSelectorList.length===1){t=[ue.treeSelectorList[0][pe.value]]}ie(t)}}}),[be,ue.treeSelectorList]);L.useEffectCustom((function(){if(!de.current&&be.length>0){if(ue.treeSelectorList.length>0&&JSON.stringify(be)!==JSON.stringify(ye)){if(!ge){var e=I(be,ue.treeSelectorTiledMap);ie(e)}}}}),[be,ue.treeSelectorList]);var qe=function e(r){return r===""||p(r)};var Le=function e(r){var t=r;if($.onRequestResultAdapter){t=$.onRequestResultAdapter(r)}else if(pe.list){t=i(r,pe.list)}if(t&&!a(t)){console.warn("待渲染数据为非数组结构",t);return[]}return t||[]};var we=l.useCallbackRef((function(){return new Promise((function(e,r){var t,l,a,i,o;if(!$.onRequest){return r(new Error("onRequest 调用接口服务不能为空"))}t=$.requiredParamsKeys||[];l=n({},$.params);a=t.find((function(e){return qe(l[e])}));if(a){void se.changeRequestStatus("no-dependencies-params");console.warn("TreeSelectorWrapper组件:参数:"+t.join("、")+"不能为空");return e()}var u=function(){try{return e()}catch(e){return r(e)}};var s=function(e){try{ne(false);window[ce]=false;void se.changeRequestStatus("request-error");A==null||A(e);return u()}catch(e){return r(e)}};try{ne(true);window[ce]=true;void se.changeRequestStatus("request-progress");return Promise.resolve($.onRequest==null?void 0:$.onRequest(l)).then((function(e){try{i=e;o=Le(i);ne(false);window[ce]=false;Re(o||[]);return u()}catch(e){return s(e)}}),s)}catch(e){s(e)}}))}));l.useCustomCompareEffect((function(){if(Z)return;if(ee.length){Re([]);void we();return}var e=M(P).getState();if(e.requestStatus==="request-success"){return}if(!window[ce]){void we();return}}),ee,g);var Re=l.useCallbackRef((function(e){var r;if((e==null?void 0:e.length)===0&&ue.treeSelectorList.length===0){void se.setSelectBoxList({treeSelectorList:[],treeSelectorTiledMap:{}});E==null||E([]);return}var t=he?(r={},r[pe.label]=he.label,r[pe.value]=he.value,r):undefined;var n=G?[t].concat(e):e;void se.setSelectBoxList({treeSelectorList:n,treeSelectorTiledMap:f(n,{value:pe.value,children:pe.children},"pId")});E==null||E(e)}));L.useEffectCustom((function(){if(Z){Re(O||[])}}),[O]);var Te=l.useCallbackRef((function(e){ie(e)}));var je=l.useCallbackRef((function(){void we()}));var ke=l.useCallbackRef((function(e,r,t){var n=c(e);if(Y.treeCheckStrictly){if(J&&t.checked){var l=ue.treeSelectorTiledMap[t==null?void 0:t.triggerValue];if(d(l[pe.children])){n=v([l],pe.children).map((function(e){return e[pe.value]}))}else{n=e==null?void 0:e.map((function(e){return e.value}))}}else{n=e==null?void 0:e.map((function(e){return e.value}))}}if(ve){var a=n.map((function(e){var r;var t=ue.treeSelectorTiledMap[e];return r={},r[me.label]=t[pe.label],r[me.value]=t[pe.value],r}));if(fe){_==null||_(a,a,t)}else{_==null||_(a[0],a[0],t)}}else{var i=n.map((function(e){return ue.treeSelectorTiledMap[e]}));if(fe){_==null||_(n,i,t)}else{_==null||_(n[0],i[0],t)}}}));var xe=l.useCallbackRef((function(e){if(!e)return null;return e.map((function(e){var r=(K==null?void 0:K(s({},e)))||e;var t=r[pe.children];var n=r[pe.value];var l=r[pe.label];var a=r[pe.disabled]?r[pe.disabled]:r.disabled;return q(h.TreeNode,s({},r,{disabled:a,value:n,title:l,key:""+n}),t&&t.length>0&&xe(t))}))}));var Me=function e(r){Ce(r);var t=[];if(!r){Ce(undefined);t=be}else{Object.keys(ue.treeSelectorTiledMap).forEach((function(e){var n=ue.treeSelectorTiledMap[e];var l=n==null?void 0:n[pe.label];if(l!=null&&l.includes(r)){t.push(n[pe.value])}}))}var n=I(t,ue.treeSelectorTiledMap);ie(n)};var Ee=fe?be:be[0];return T(h,s({searchValue:ge,dropdownStyle:{maxHeight:400,overflow:"auto"},showSearch:true,treeLine:{showLeafIcon:false},treeNodeFilterProp:"title",switcherIcon:T(t,{}),popupMatchSelectWidth:false},Y,{className:r("v-tree-select-wrapper",Y.className),popupClassName:r("v-tree-select-wrapper-dropdown",Y.popupClassName),onChange:ke,treeExpandedKeys:ae,value:Ee,onSearch:Me,loading:te,onTreeExpand:Te,style:s({width:"100%"},Y.style),suffixIcon:ue.requestStatus==="request-error"?T(e,{spin:te,onClick:je}):undefined,notFoundContent:T(w,{status:ue.requestStatus,messageConfig:D,loading:te,errorButton:T(S,{type:"primary",onClick:je,children:"重新获取数据"})}),children:xe(ue.treeSelectorList)}))};export{A as TreeSelectorWrapper};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/selector.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledMap: TPlainObject;\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledMap = params.treeSelectorTiledMap || {};\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n state.treeSelectorTiledMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","export const getExpandedKeysByValue = (value: string | number, treeSelectorTiledMap) => {\n const tempList: Array<string | number> = [];\n let parentNode = treeSelectorTiledMap[value];\n while (parentNode) {\n const pId = parentNode.pId;\n parentNode = treeSelectorTiledMap[pId];\n if (parentNode) {\n tempList.push(pId);\n }\n }\n return tempList;\n};\n\nexport const getExpandedKeysByValues = (values: Array<string | number>, treeSelectorTiledMap) => {\n if (values.length === 0) return [];\n const expandedKeys: Array<string | number> = [];\n values.forEach((value) => {\n const targetList = getExpandedKeysByValue(value, treeSelectorTiledMap);\n expandedKeys.push(...targetList);\n });\n return Array.from(new Set(expandedKeys));\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isObject } from '@dimjs/lang';\nimport { classNames, extend, get } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n toArray,\n treeToArray,\n treeToTiledMap,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, type TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\nimport { useMemo, useRef, useState, type DependencyList } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, type TRequestStatusProps } from '../request-status';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeysByValues } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n | 'onSearch'\n> & {\n modelKey: string;\n fieldNames?: {\n /**\n * 1. list 为 onRequest 返回数据中列表key值,可多级取值,例如: 'a.b.c'\n * 2. 配置 serviceConfig.onRequestResultAdapter 后此配置失效\n */\n list?: string;\n label?: string;\n value?: string;\n children?: string;\n disabled?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * tree item 数据适配器,返回的数据会通过fieldNames配置取数据\n * ```\n * 1. 可用于设置disabled状态\n * onTreeItemDataAdapter: (dataItem) => {\n * if(dataItem.xx === xx){\n * dataItem['disabled] = true;\n * }\n * return dataItem;\n * }\n * 2. 可设置label数据显示\n * ```\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n /** 自定义异常提示文案 */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * @deprecated 已弃用\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n};\n\n// type TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n// onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n// };\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = Object.prototype.hasOwnProperty.call(props, 'treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable || otherProps.multiple;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n disabled: 'disabled',\n ...fieldNames,\n };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [searchValue, setSearchValue] = useState<string>();\n\n const propsPureValue = useMemo(() => {\n return toArray<TAny>(props.value).map((item) => {\n if (isObject(item)) {\n return (labelInValue ? item[labelInValueFieldNamesMerge.value] : item[fieldNamesMerge.value]) as\n | string\n | number;\n }\n return item as string | number;\n });\n }, [fieldNamesMerge.value, labelInValue, labelInValueFieldNamesMerge.value, props.value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n let treeExpandedKeys: Array<string | number> = [];\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n treeExpandedKeys = treeDefaultExpandedKeys as Array<string | number>;\n } else if (treeDefaultExpandAll) {\n const allValues = Object.keys(state.treeSelectorTiledMap).map(\n (item) => state.treeSelectorTiledMap[item]?.[fieldNamesMerge.value] as string | number,\n );\n treeExpandedKeys = allValues;\n } else if (initRootExpand && state.treeSelectorList.length === 1) {\n treeExpandedKeys = [state.treeSelectorList[0][fieldNamesMerge.value]];\n }\n setTreeExpandedKeys(treeExpandedKeys);\n } else {\n if (!searchValue) {\n const expandedKeys = getExpandedKeysByValues(propsPureValue, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeys);\n }\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n let result = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNamesMerge.list) {\n result = get(respData, fieldNamesMerge.list);\n }\n if (result && !isArray(result)) {\n console.warn('待渲染数据为非数组结构', result);\n return [];\n }\n return result || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledMap: treeToTiledMap(\n newdataList,\n {\n value: fieldNamesMerge.value,\n children: fieldNamesMerge.children,\n },\n 'pId',\n ),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: TAny, _data, triggerInfo: TPlainObject) => {\n let resultValueList = toArray<TAny>(changeValue);\n if (otherProps.treeCheckStrictly) {\n if (selectedParentCheckedAllChildrenList && triggerInfo.checked) {\n const target = state.treeSelectorTiledMap[triggerInfo?.triggerValue];\n if (isNotEmptyArray(target[fieldNamesMerge.children])) {\n resultValueList = treeToArray([target], fieldNamesMerge.children).map((item) => {\n return item[fieldNamesMerge.value];\n });\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n }\n if (labelInValue) {\n const resultItemList = resultValueList.map((item) => {\n const target = state.treeSelectorTiledMap[item];\n return {\n [labelInValueFieldNamesMerge.label]: target[fieldNamesMerge.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNamesMerge.value],\n };\n });\n if (isMultiple) {\n onChange?.(resultItemList, resultItemList, triggerInfo);\n } else {\n onChange?.(resultItemList[0], resultItemList[0], triggerInfo);\n }\n } else {\n const resultItemList = resultValueList.map((item) => {\n return state.treeSelectorTiledMap[item];\n });\n if (isMultiple) {\n onChange?.(resultValueList, resultItemList, triggerInfo);\n } else {\n onChange?.(resultValueList[0], resultItemList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n const onSearch = (searchValue?: string) => {\n setSearchValue(searchValue);\n let targetKeyList: Array<string | number> = [];\n if (!searchValue) {\n setSearchValue(undefined);\n targetKeyList = propsPureValue;\n } else {\n Object.keys(state.treeSelectorTiledMap).forEach((item) => {\n const target = state.treeSelectorTiledMap[item];\n const label = target?.[fieldNamesMerge.label] as string;\n if (label?.includes(searchValue)) {\n targetKeyList.push(target[fieldNamesMerge.value]);\n }\n });\n }\n\n const expandedKeysMerge = getExpandedKeysByValues(targetKeyList, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeysMerge);\n };\n\n const treeValue = isMultiple ? propsPureValue : propsPureValue[0];\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n searchValue={searchValue}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n popupMatchSelectWidth={false}\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeValue}\n onSearch={onSearch}\n loading={loading}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledMap","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeysByValue","value","tempList","parentNode","pId","push","getExpandedKeysByValues","values","length","expandedKeys","forEach","targetList","apply","Array","from","Set","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","fieldNames","onChange","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","Object","prototype","hasOwnProperty","call","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","multiple","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","_useState2","searchValue","setSearchValue","propsPureValue","toArray","map","item","_isObject","useEffectCustom","current","allValues","keys","_state$treeSelectorTi","valueIsEmpty","isUndefinedOrNull","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","_isArray","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","onRequest","Error","_extend","find","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","allState","getState","dequal","dataList","_ref","tempItem","undefined","newdataList","concat","treeToTiledMap","onTreeExpand","onAgainRequest","onInnerChange","changeValue","_data","triggerInfo","resultValueList","checked","target","triggerValue","isNotEmptyArray","treeToArray","resultItemList","_ref2","mapTree","data","itemAdapterData","_createElement","TreeSelect","TreeNode","title","onSearch","targetKeyList","includes","expandedKeysMerge","treeValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","popupMatchSelectWidth","className","_classNames","popupClassName","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/selector.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledMap: TPlainObject;\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledMap = params.treeSelectorTiledMap || {};\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n state.treeSelectorTiledMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","export const getExpandedKeysByValue = (value: string | number, treeSelectorTiledMap) => {\n const tempList: Array<string | number> = [];\n let parentNode = treeSelectorTiledMap[value];\n while (parentNode) {\n const pId = parentNode.pId;\n parentNode = treeSelectorTiledMap[pId];\n if (parentNode) {\n tempList.push(pId);\n }\n }\n return tempList;\n};\n\nexport const getExpandedKeysByValues = (values: Array<string | number>, treeSelectorTiledMap) => {\n if (values.length === 0) return [];\n const expandedKeys: Array<string | number> = [];\n values.forEach((value) => {\n const targetList = getExpandedKeysByValue(value, treeSelectorTiledMap);\n expandedKeys.push(...targetList);\n });\n return Array.from(new Set(expandedKeys));\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray, isObject } from '@dimjs/lang';\nimport { classNames, extend, get } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n toArray,\n treeToArray,\n treeToTiledMap,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { usePrevious } from 'ahooks';\nimport { Button, TreeSelect, type TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\nimport { useMemo, useRef, useState, type DependencyList } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, type TRequestStatusProps } from '../request-status';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\nimport { getExpandedKeysByValues } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n | 'onSearch'\n> & {\n modelKey: string;\n fieldNames?: {\n /**\n * 1. list 为 onRequest 返回数据中列表key值,可多级取值,例如: 'a.b.c'\n * 2. 配置 serviceConfig.onRequestResultAdapter 后此配置失效\n */\n list?: string;\n label?: string;\n value?: string;\n children?: string;\n disabled?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`treeSelectorList`后无效果\n */\n serviceConfig?: TreeSelectorServiceConfig;\n /**\n * 当设置treeSelectorList后,serviceConfig 将失效\n */\n treeSelectorList?: TreeSelectProps['treeData'];\n /**\n * treeSelectorList发生变更时触发\n */\n onTreeSelectorListChange?: (treeSelectorList?: TreeSelectProps['treeData']) => void;\n /**\n * 通过服务获取数据异常回调,当设置`treeSelectorList`后无效果\n */\n onTreeSelectorRequestError?: (error: Error) => void;\n /**\n * 添加全部选项\n * ```\n * 1. showAllOption = true,添加默认全部选项(value值为空字符串)\n * 2. 可自定义全部选项,例如:{ label: '全部', value: 'all' }\n * 3. 自定义字段会通过fieldNames转换后使用\n * 4. 多选操作时,最好不要设置全部选项\n * ```\n */\n showAllOption?: true | TPlainObject<string | number>;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * tree item 数据适配器,返回的数据会通过fieldNames配置取数据\n * ```\n * 1. 可用于设置disabled状态\n * onTreeItemDataAdapter: (dataItem) => {\n * if(dataItem.xx === xx){\n * dataItem['disabled] = true;\n * }\n * return dataItem;\n * }\n * 2. 可设置label数据显示\n * ```\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n /** 自定义异常提示文案 */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * @deprecated 已弃用\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = Object.prototype.hasOwnProperty.call(props, 'treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable || otherProps.multiple;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n disabled: 'disabled',\n ...fieldNames,\n };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const [searchValue, setSearchValue] = useState<string>();\n\n const propsPureValue = fbaHooks.useMemoCustom(() => {\n return toArray<TAny>(value).map((item) => {\n if (isObject(item)) {\n return (labelInValue ? item[labelInValueFieldNamesMerge.value] : item[fieldNamesMerge.value]) as\n | string\n | number;\n }\n return item as string | number;\n });\n }, [fieldNamesMerge.value, labelInValue, labelInValueFieldNamesMerge.value, props.value]);\n\n const prevPropsPureValue = usePrevious(propsPureValue);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n if (responseFirstRef.current && executeOnChangeInRenderFirstValue && labelInValue) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n propsPureValue.forEach((item) => {\n const target = state.treeSelectorTiledMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNamesMerge.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNamesMerge.value],\n });\n }\n });\n if (isMultiple) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n let treeExpandedKeys: Array<string | number> = [];\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n treeExpandedKeys = treeDefaultExpandedKeys as Array<string | number>;\n } else if (treeDefaultExpandAll) {\n const allValues = Object.keys(state.treeSelectorTiledMap).map(\n (item) => state.treeSelectorTiledMap[item]?.[fieldNamesMerge.value] as string | number,\n );\n treeExpandedKeys = allValues;\n } else if (initRootExpand && state.treeSelectorList.length === 1) {\n treeExpandedKeys = [state.treeSelectorList[0][fieldNamesMerge.value]];\n }\n setTreeExpandedKeys(treeExpandedKeys);\n }\n // else {\n // responseFirstRef.current = false;\n // if (!searchValue) {\n // const expandedKeys = getExpandedKeysByValues(\n // propsPureValue,\n // state.treeSelectorTiledMap\n // );\n // setTreeExpandedKeys(expandedKeys);\n // }\n // }\n }\n }, [propsPureValue, state.treeSelectorList]);\n\n fbaHooks.useEffectCustom(() => {\n if (!responseFirstRef.current && propsPureValue.length > 0) {\n if (\n state.treeSelectorList.length > 0 &&\n JSON.stringify(propsPureValue) !== JSON.stringify(prevPropsPureValue)\n ) {\n if (!searchValue) {\n const expandedKeys = getExpandedKeysByValues(propsPureValue, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeys);\n }\n }\n }\n }, [propsPureValue, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n let result = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNamesMerge.list) {\n result = get(respData, fieldNamesMerge.list);\n }\n if (result && !isArray(result)) {\n console.warn('待渲染数据为非数组结构', result);\n return [];\n }\n return result || [];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledMap: {},\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledMap: treeToTiledMap(\n newdataList,\n {\n value: fieldNamesMerge.value,\n children: fieldNamesMerge.children,\n },\n 'pId',\n ),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n /**\n * 根据treeCheckable、treeCheckStrictly、showCheckedStrategy等设置情况,判断返回数据是否包含父节点\n * 1. 当 treeCheckable = true,changeValue 数据格式为 { label,value }[]\n */\n const onInnerChange = hooks.useCallbackRef((changeValue: TAny, _data, triggerInfo: TPlainObject) => {\n let resultValueList = toArray<TAny>(changeValue);\n if (otherProps.treeCheckStrictly) {\n if (selectedParentCheckedAllChildrenList && triggerInfo.checked) {\n const target = state.treeSelectorTiledMap[triggerInfo?.triggerValue];\n if (isNotEmptyArray(target[fieldNamesMerge.children])) {\n resultValueList = treeToArray([target], fieldNamesMerge.children).map((item) => {\n return item[fieldNamesMerge.value];\n });\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n } else {\n resultValueList = changeValue?.map((item) => item.value);\n }\n }\n if (labelInValue) {\n const resultItemList = resultValueList.map((item) => {\n const target = state.treeSelectorTiledMap[item];\n return {\n [labelInValueFieldNamesMerge.label]: target[fieldNamesMerge.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNamesMerge.value],\n };\n });\n if (isMultiple) {\n onChange?.(resultItemList, resultItemList, triggerInfo);\n } else {\n onChange?.(resultItemList[0], resultItemList[0], triggerInfo);\n }\n } else {\n const resultItemList = resultValueList.map((item) => {\n return state.treeSelectorTiledMap[item];\n });\n if (isMultiple) {\n onChange?.(resultValueList, resultItemList, triggerInfo);\n } else {\n onChange?.(resultValueList[0], resultItemList[0], triggerInfo);\n }\n }\n });\n\n const mapTree = hooks.useCallbackRef((data) => {\n if (!data) return null;\n return data.map((item) => {\n const itemAdapterData = onTreeItemDataAdapter?.({ ...item }) || item;\n const children = itemAdapterData[fieldNamesMerge.children];\n const value = itemAdapterData[fieldNamesMerge.value];\n const label = itemAdapterData[fieldNamesMerge.label];\n const disabled = itemAdapterData[fieldNamesMerge.disabled]\n ? itemAdapterData[fieldNamesMerge.disabled]\n : itemAdapterData.disabled;\n return (\n <TreeSelect.TreeNode\n {...itemAdapterData}\n disabled={disabled}\n value={value}\n title={label}\n key={`${value}`}\n >\n {children && children.length > 0 && mapTree(children)}\n </TreeSelect.TreeNode>\n );\n });\n });\n\n const onSearch = (searchValue?: string) => {\n setSearchValue(searchValue);\n let targetKeyList: Array<string | number> = [];\n if (!searchValue) {\n setSearchValue(undefined);\n targetKeyList = propsPureValue;\n } else {\n Object.keys(state.treeSelectorTiledMap).forEach((item) => {\n const target = state.treeSelectorTiledMap[item];\n const label = target?.[fieldNamesMerge.label] as string;\n if (label?.includes(searchValue)) {\n targetKeyList.push(target[fieldNamesMerge.value]);\n }\n });\n }\n\n const expandedKeysMerge = getExpandedKeysByValues(targetKeyList, state.treeSelectorTiledMap);\n setTreeExpandedKeys(expandedKeysMerge);\n };\n\n const treeValue = isMultiple ? propsPureValue : propsPureValue[0];\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n searchValue={searchValue}\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n popupMatchSelectWidth={false}\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeValue}\n onSearch={onSearch}\n loading={loading}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledMap","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeysByValue","value","tempList","parentNode","pId","push","getExpandedKeysByValues","values","length","expandedKeys","forEach","targetList","apply","Array","from","Set","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","fieldNames","onChange","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","Object","prototype","hasOwnProperty","call","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","multiple","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","_useState2","searchValue","setSearchValue","propsPureValue","useMemoCustom","toArray","map","item","_isObject","prevPropsPureValue","usePrevious","useEffectCustom","current","dataList","originalList","target","_dataList$push","undefined","allValues","keys","_state$treeSelectorTi","JSON","stringify","valueIsEmpty","isUndefinedOrNull","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","_isArray","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","onRequest","Error","_extend","find","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","allState","getState","dequal","_ref","tempItem","newdataList","concat","treeToTiledMap","onTreeExpand","onAgainRequest","onInnerChange","changeValue","_data","triggerInfo","resultValueList","checked","triggerValue","isNotEmptyArray","treeToArray","resultItemList","_ref2","mapTree","data","itemAdapterData","_createElement","TreeSelect","TreeNode","title","onSearch","targetKeyList","includes","expandedKeysMerge","treeValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","popupMatchSelectWidth","className","_classNames","popupClassName","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":";sgCAsBA,IAAMA,EAA2B,CAC/BC,iBAAkB,GAClBC,qBAAsB,CAAE,EACxBC,aAAc,OAGhB,IAAMC,EAAqE,CACzEC,QAAS,CACPC,iBAAkB,SAAlBA,EAAmBC,GACjB,OAAO,SAACC,GACNA,EAAMP,iBAAmBM,EAAON,kBAAoB,GACpDO,EAAMN,qBAAuBK,EAAOL,sBAAwB,CAAA,EAC5DM,EAAMC,cAAgB,kBAEzB,EACDC,mBAAoB,SAApBA,IACE,OAAO,SAACF,GACNA,EAAMP,iBAAmB,GACzBO,EAAMN,qBAAuB,GAEhC,EACDS,oBAAqB,SAArBA,EAAsBJ,GACpB,OAAO,SAACC,GACNA,EAAMC,cAAgBF,EAE1B,GAEFC,MAAOR,GAGT,IAAMY,EAAiG,CAAA,EAQhG,IAAMC,EAA2B,SAA3BA,EAA4BC,GACvC,IAAKF,EAA0BE,GAAM,CACnCF,EAA0BE,GAAOC,EAAMX,EACzC,CACA,OAAOQ,EAA0BE,EACnC,ECjEO,IAAME,EAAyB,SAAzBA,EAA0BC,EAAwBf,GAC7D,IAAMgB,EAAmC,GACzC,IAAIC,EAAajB,EAAqBe,GACtC,MAAOE,EAAY,CACjB,IAAMC,EAAMD,EAAWC,IACvBD,EAAajB,EAAqBkB,GAClC,GAAID,EAAY,CACdD,EAASG,KAAKD,EAChB,CACF,CACA,OAAOF,CACT,EAEO,IAAMI,EAA0B,SAA1BA,EAA2BC,EAAgCrB,GACtE,GAAIqB,EAAOC,SAAW,EAAG,MAAO,GAChC,IAAMC,EAAuC,GAC7CF,EAAOG,SAAQ,SAACT,GACd,IAAMU,EAAaX,EAAuBC,EAAOf,GACjDuB,EAAaJ,KAAIO,MAAjBH,EAAqBE,EACvB,IACA,OAAOE,MAAMC,KAAK,IAAIC,IAAIN,GAC5B,+ZCyJaO,EAAsB,SAAtBA,EAAuBC,GAClC,IACEC,EAoBED,EApBFC,cACAC,EAmBEF,EAnBFE,qBACAC,EAkBEH,EAlBFG,yBACAC,EAiBEJ,EAjBFI,2BACApC,EAgBEgC,EAhBFhC,iBACAqC,EAeEL,EAfFK,qBACAC,EAcEN,EAdFM,SACAtB,EAaEgB,EAbFhB,MACcuB,EAYZP,EAZFQ,aACAC,EAWET,EAXFS,uBACAC,EAUEV,EAVFU,sBAAqBC,EAUnBX,EATFY,qCAAAA,EAAoCD,SAAG,EAAA,KAAIA,EAC3CE,EAQEb,EARFa,WACAC,EAOEd,EAPFc,SACAC,EAMEf,EANFe,qBACAC,EAKEhB,EALFgB,cACAC,EAIEjB,EAJFiB,eACAC,EAGElB,EAHFkB,wBACAC,EAEEnB,EAFFmB,kCACGC,EAAUC,EACXrB,EAAKsB,GAKT,IAAMC,EAAsBC,OAAOC,UAAUC,eAAeC,KAAK3B,EAAO,oBACxE,IAAM4B,EAAmB3B,GAAiB,GAC1C,IAAM4B,GAA0B3B,GAAwB,GACxD,IAAA4B,GAA8BC,EAASC,aAAa,OAA7CC,GAAOH,GAAA,GAAEI,GAAUJ,GAAA,GAC1B,IAAAK,GAAgDC,IAAzCC,GAAgBF,GAAA,GAAEG,GAAmBH,GAAA,GAC5C,IAAAI,GAAyB3D,EAAyB0B,GAAUkC,WAArDjE,GAAKgE,GAAA,GAAEnE,GAAOmE,GAAA,GACrB,IAAME,uBAAoCnC,EAC1C,IAAMoC,GAAatB,EAAWuB,eAAiBvB,EAAWwB,SAC1D,IAAMC,GAAmBC,EAAO,MAKhC,IAAMtC,GAAeuC,GAAQ,WAC3B,GAAI3B,EAAW4B,kBAAmB,OAAO,KACzC,OAAOzC,CACR,GAAE,CAACA,EAAea,EAAW4B,oBAE9B,IAAMC,GAAkBF,GAAQ,WAC9B,OAAAG,EAAA,CACEC,MAAO,QACPnE,MAAO,QACPoE,SAAU,WACVC,SAAU,YACPxC,EAEP,GAAG,CAACA,IAEJ,IAAMyC,GAA8BP,GAAQ,WAC1C,OAAAG,EAAA,CAASC,MAAO,QAASnE,MAAO,SAAYyB,EAC9C,GAAG,CAACA,IAEJ,IAAM8C,GAAkBR,GAAQ,WAC9B,GAAI/B,EAAe,CACjB,IAAMwC,EAASxC,IAAkB,KACjC,MAAO,CACLmC,MAAOK,EAAS,KAAOxC,EAAcmC,MACrCnE,MAAOwE,EAAS,GAAKxC,EAAchC,MAEvC,CACA,OAAO,IACT,GAAG,CAACgC,IAEJ,IAAAyC,GAAsCrB,IAA/BsB,GAAWD,GAAA,GAAEE,GAAcF,GAAA,GAElC,IAAMG,GAAiB7B,EAAS8B,eAAc,WAC5C,OAAOC,EAAc9E,GAAO+E,KAAI,SAACC,GAC/B,GAAIC,EAASD,GAAO,CAClB,OAAQxD,GAAewD,EAAKV,GAA4BtE,OAASgF,EAAKf,GAAgBjE,MAGxF,CACA,OAAOgF,CACT,GACF,GAAG,CAACf,GAAgBjE,MAAOwB,GAAc8C,GAA4BtE,MAAOgB,EAAMhB,QAElF,IAAMkF,GAAqBC,EAAYP,IAEvC7B,EAASqC,iBAAgB,WACvB,GAAI7F,GAAMP,iBAAiBuB,OAAS,EAAG,CACrC,GAAIsD,GAAiBwB,SAAWlD,GAAqCX,GAAc,CACjF,IAAM8D,EAA2B,GACjC,IAAMC,EAA+B,GACrCX,GAAenE,SAAQ,SAACuE,GACtB,IAAMQ,EAASjG,GAAMN,qBAAqB+F,GAC1C,GAAIQ,EAAQ,CAAA,IAAAC,EACVF,EAAanF,KAAKoF,GAClBF,EAASlF,MAAIqF,KAAAA,EACVnB,GAA4BH,OAAQqB,EAAOvB,GAAgBE,OAAMsB,EACjEnB,GAA4BtE,OAAQwF,EAAOvB,GAAgBjE,OAAMyF,GAEtE,CACF,IACA,GAAI/B,GAAY,CACd1C,EAAMc,UAANd,MAAAA,EAAMc,SAAWwD,EAAWA,EAAWI,UAAWH,EACpD,KAAO,CACLvE,EAAMc,UAANd,MAAAA,EAAMc,SAAWwD,EAAWA,EAAS,GAAKI,UAAWH,EAAa,GACpE,CACF,CACA,IAAIlC,EAA2C,GAC/C,GAAIQ,GAAiBwB,QAAS,CAC5BxB,GAAiBwB,QAAU,MAC3B,GAAInD,EAAyB,CAC3BmB,EAAmBnB,CACpB,MAAM,GAAIH,EAAsB,CAC/B,IAAM4D,EAAYnD,OAAOoD,KAAKrG,GAAMN,sBAAsB8F,KACxD,SAACC,GAAI,IAAAa,EAAA,OAAAA,EAAKtG,GAAMN,qBAAqB+F,KAAK,UAAA,EAAhCa,EAAmC5B,GAAgBjE,MAAM,IAErEqD,EAAmBsC,CACpB,MAAM,GAAI1D,GAAkB1C,GAAMP,iBAAiBuB,SAAW,EAAG,CAChE8C,EAAmB,CAAC9D,GAAMP,iBAAiB,GAAGiF,GAAgBjE,OAChE,CACAsD,GAAoBD,EACtB,CAWF,CACD,GAAE,CAACuB,GAAgBrF,GAAMP,mBAE1B+D,EAASqC,iBAAgB,WACvB,IAAKvB,GAAiBwB,SAAWT,GAAerE,OAAS,EAAG,CAC1D,GACEhB,GAAMP,iBAAiBuB,OAAS,GAChCuF,KAAKC,UAAUnB,MAAoBkB,KAAKC,UAAUb,IAClD,CACA,IAAKR,GAAa,CAChB,IAAMlE,EAAeH,EAAwBuE,GAAgBrF,GAAMN,sBACnEqE,GAAoB9C,EACtB,CACF,CACF,CACD,GAAE,CAACoE,GAAgBrF,GAAMP,mBAE1B,IAAMgH,GAAe,SAAfA,EAAgBhG,GACpB,OAAOA,IAAU,IAAMiG,EAAkBjG,IAG3C,IAAMkG,GAAwB,SAAxBA,EAAyBC,GAC7B,IAAIC,EAASD,EACb,GAAIvD,EAAiByD,uBAAwB,CAC3CD,EAASxD,EAAiByD,uBAAuBF,EACnD,MAAO,GAAIlC,GAAgBqC,KAAM,CAC/BF,EAASG,EAAIJ,EAAUlC,GAAgBqC,KACzC,CACA,GAAIF,IAAWI,EAAQJ,GAAS,CAC9BK,QAAQC,KAAK,cAAeN,GAC5B,MAAO,EACT,CACA,OAAOA,GAAU,IAGnB,IAAMO,GAAyBC,EAAMC,gBAAe,WAAA,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GAAA,IAI5CC,EACA3H,EACA4H,EAYEC,EACAhB,EAlBR,IAAKvD,EAAiBwE,UAAW,CAC/B,OAAAJ,EAAM,IAAIK,MAAM,wBAClB,CACMJ,EAAqBrE,EAAiBqE,oBAAsB,GAC5D3H,EAASgI,EAAO,CAAA,EAAI1E,EAAiBtD,QACrC4H,EAAUD,EAAmBM,MAAK,SAAC1H,GACvC,OAAOmG,GAAa1G,EAAOO,GAC7B,IACA,GAAIqH,EAAS,MACN9H,GAAQM,oBAAoB,0BACjC+G,QAAQC,KAAI,4BAA6BO,EAAmBO,KAAK,KAAI,QACrE,OAAAT,GACF,CAjWJ,IAAIU,aAAJ,IAAI,OAAAV,GAAK,CAAC,MAAAW,GAAW,OAAOV,EAAAU,EAAM,GAAlC,IAAIC,EAAA,SA2WSC,GA3Wb,IA4WM1E,GAAW,OACX2E,OAAOpE,IAAiB,WACnBrE,GAAQM,oBAAoB,iBACjC0B,GAAAA,MAAAA,EAA6BwG,GA/WnC,OAAOH,GAAE,CAAC,MAAAC,GAAW,OAAOV,EAAAU,EAAM,GAkW9B,IACExE,GAAW,MACX2E,OAAOpE,IAAiB,UACnBrE,GAAQM,oBAAoB,oBACf,OAAAoH,QAAAgB,QAAMlF,EAAiBwE,WAAS,UAAA,EAA1BxE,EAAiBwE,UAAY9H,IAAnCyI,eAA0CC,GAtWlE,IAsWYb,EAAYa,EACZ7B,EAAWD,GAAsBiB,GACvCjE,GAAW,OACX2E,OAAOpE,IAAiB,MACxBwE,GAAqB9B,GAAY,IA1WvC,OAAOsB,GAAE,CAAC,MAAAC,GAAW,OAAOC,EAAAD,EAAM,CAAC,GAAAC,EA2W9B,CAAC,MAAOC,GAAaD,EAAbC,EAKT,CAAC,OAGHhB,EAAMsB,wBACJ,WACE,GAAI3F,EAAqB,OAEzB,GAAIM,GAAwBtC,OAAQ,CAElC0H,GAAqB,SAChBtB,KACL,MACF,CACA,IAAMwB,EAAWvI,EAAyB0B,GAAU8G,WACpD,GAAID,EAAS3I,gBAAkB,kBAAmB,CAChD,MACF,CAEA,IAAKqI,OAAOpE,IAAgB,MACrBkD,KACL,MACF,CACF,GACA9D,GACAwF,GAGF,IAAMJ,GAAuBrB,EAAMC,gBAAe,SAACvB,GAAqB,IAAAgD,EACtE,IAAIhD,GAAQ,UAAA,EAARA,EAAU/E,UAAW,GAAKhB,GAAMP,iBAAiBuB,SAAW,EAAG,MAC5DnB,GAAQC,iBAAiB,CAC5BL,iBAAkB,GAClBC,qBAAsB,CAAC,IAEzBkC,GAAAA,MAAAA,EAA2B,IAC3B,MACF,CAEA,IAAMoH,EAAWhE,IAAe+D,EAAA,CAAA,EAAAA,EAEzBrE,GAAgBE,OAAQI,GAAgBJ,MAAKmE,EAC7CrE,GAAgBjE,OAAQuE,GAAgBvE,MAAKsI,GAEhD5C,UACJ,IAAM8C,EAAcxG,EAAiBuG,CAAAA,GAAQE,OAAKnD,GAAYA,OACzDlG,GAAQC,iBAAiB,CAC5BL,iBAAkBwJ,EAClBvJ,qBAAsByJ,EACpBF,EACA,CACExI,MAAOiE,GAAgBjE,MACvBoE,SAAUH,GAAgBG,UAE5B,SAGJjD,GAAAA,MAAAA,EAA2BmE,EAC7B,IAEAvC,EAASqC,iBAAgB,WACvB,GAAI7C,EAAqB,CACvB0F,GAAqBjJ,GAAoB,GAC3C,CACF,GAAG,CAACA,IAEJ,IAAM2J,GAAe/B,EAAMC,gBAAe,SAACrG,GACzC8C,GAAoB9C,EACtB,IAEA,IAAMoI,GAAiBhC,EAAMC,gBAAe,gBACrCF,IACP,IAMA,IAAMkC,GAAgBjC,EAAMC,gBAAe,SAACiC,EAAmBC,EAAOC,GACpE,IAAIC,EAAkBnE,EAAcgE,GACpC,GAAI1G,EAAW4B,kBAAmB,CAChC,GAAIpC,GAAwCoH,EAAYE,QAAS,CAC/D,IAAM1D,EAASjG,GAAMN,qBAAqB+J,GAAAA,UAAAA,EAAAA,EAAaG,cACvD,GAAIC,EAAgB5D,EAAOvB,GAAgBG,WAAY,CACrD6E,EAAkBI,EAAY,CAAC7D,GAASvB,GAAgBG,UAAUW,KAAI,SAACC,GACrE,OAAOA,EAAKf,GAAgBjE,MAC9B,GACF,KAAO,CACLiJ,EAAkBH,GAAAA,UAAAA,EAAAA,EAAa/D,KAAI,SAACC,GAAI,OAAKA,EAAKhF,QACpD,CACF,KAAO,CACLiJ,EAAkBH,GAAAA,UAAAA,EAAAA,EAAa/D,KAAI,SAACC,GAAI,OAAKA,EAAKhF,QACpD,CACF,CACA,GAAIwB,GAAc,CAChB,IAAM8H,EAAiBL,EAAgBlE,KAAI,SAACC,GAAS,IAAAuE,EACnD,IAAM/D,EAASjG,GAAMN,qBAAqB+F,GAC1C,OAAAuE,EAAA,CAAA,EAAAA,EACGjF,GAA4BH,OAAQqB,EAAOvB,GAAgBE,OAAMoF,EACjEjF,GAA4BtE,OAAQwF,EAAOvB,GAAgBjE,OAAMuJ,CAEtE,IACA,GAAI7F,GAAY,CACd5B,GAAQ,MAARA,EAAWwH,EAAgBA,EAAgBN,EAC7C,KAAO,CACLlH,GAAAA,MAAAA,EAAWwH,EAAe,GAAIA,EAAe,GAAIN,EACnD,CACF,KAAO,CACL,IAAMM,EAAiBL,EAAgBlE,KAAI,SAACC,GAC1C,OAAOzF,GAAMN,qBAAqB+F,EACpC,IACA,GAAItB,GAAY,CACd5B,GAAQ,MAARA,EAAWmH,EAAiBK,EAAgBN,EAC9C,KAAO,CACLlH,GAAAA,MAAAA,EAAWmH,EAAgB,GAAIK,EAAe,GAAIN,EACpD,CACF,CACF,IAEA,IAAMQ,GAAU5C,EAAMC,gBAAe,SAAC4C,GACpC,IAAKA,EAAM,OAAO,KAClB,OAAOA,EAAK1E,KAAI,SAACC,GACf,IAAM0E,GAAkBhI,GAAAA,UAAAA,EAAAA,EAAqBwC,EAAQc,CAAAA,EAAAA,MAAWA,EAChE,IAAMZ,EAAWsF,EAAgBzF,GAAgBG,UACjD,IAAMpE,EAAQ0J,EAAgBzF,GAAgBjE,OAC9C,IAAMmE,EAAQuF,EAAgBzF,GAAgBE,OAC9C,IAAME,EAAWqF,EAAgBzF,GAAgBI,UAC7CqF,EAAgBzF,GAAgBI,UAChCqF,EAAgBrF,SACpB,OACEsF,EAACC,EAAWC,SAAQ3F,KACdwF,EAAe,CACnBrF,SAAUA,EACVrE,MAAOA,EACP8J,MAAO3F,EACPtE,IAAQG,GAAAA,IAEPoE,GAAYA,EAAS7D,OAAS,GAAKiJ,GAAQpF,GAGlD,GACF,IAEA,IAAM2F,GAAW,SAAXA,EAAYrF,GAChBC,GAAeD,GACf,IAAIsF,EAAwC,GAC5C,IAAKtF,EAAa,CAChBC,GAAee,WACfsE,EAAgBpF,EAClB,KAAO,CACLpC,OAAOoD,KAAKrG,GAAMN,sBAAsBwB,SAAQ,SAACuE,GAC/C,IAAMQ,EAASjG,GAAMN,qBAAqB+F,GAC1C,IAAMb,EAAQqB,GAAM,UAAA,EAANA,EAASvB,GAAgBE,OACvC,GAAIA,SAAAA,EAAO8F,SAASvF,GAAc,CAChCsF,EAAc5J,KAAKoF,EAAOvB,GAAgBjE,OAC5C,CACF,GACF,CAEA,IAAMkK,EAAoB7J,EAAwB2J,EAAezK,GAAMN,sBACvEqE,GAAoB4G,IAGtB,IAAMC,GAAYzG,GAAakB,GAAiBA,GAAe,GAM/D,OACEwF,EAACR,EAAU1F,EAAA,CACTQ,YAAaA,GACb2F,cAAe,CAAEC,UAAW,IAAKC,SAAU,QAC3CC,WAAY,KACZC,SAAU,CAAEC,aAAc,OAC1BC,mBAAmB,QACnBC,aAAcR,EAAAS,MACdC,sBAAuB,OACnB1I,EAAU,CACd2I,UAAWC,EAAW,wBAAyB5I,EAAW2I,WAC1DE,eAAgBD,EAAW,iCAAkC5I,EAAW6I,gBACxEnJ,SAAU+G,GACVxF,iBAAkBA,GAClBrD,MAAOmK,GACPJ,SAAUA,GACV9G,QAASA,GACT0F,aAAcA,GACduC,MAAKhH,EAAA,CAAIiH,MAAO,QAAW/I,EAAW8I,OACtCE,WACE7L,GAAMC,gBAAkB,gBACtB4K,EAAAiB,EAAA,CAAcC,KAAMrI,GAASsI,QAAS3C,KACpClD,UAEN8F,gBACEpB,EAACqB,EAAa,CACZC,OAAQnM,GAAMC,cACdmM,cAAetK,EACf4B,QAASA,GACT2I,YACExB,EAACyB,EAAM,CAACC,KAAK,UAAUP,QAAS3C,GAAexE,SAAC,aAKrDA,SAEAoF,GAAQjK,GAAMP,oBAGrB"}
|
|
@@ -13,5 +13,5 @@ import './../dropdown-menu-wrapper/index.css';
|
|
|
13
13
|
import './../input-search-wrapper/index.css';
|
|
14
14
|
import './index.css';
|
|
15
15
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
16
|
-
import{treeToArray as e,arrayToMap as r,treeToTiledArray as t,treeLeafParentsArray as n,isUndefinedOrNull as a,isNotEmptyArray as i,treeToTiledMap as l,toArray as s,treeFilter as u,dom as o,attachPropertiesToComponent as c}from"@flatbiz/utils";import{isArray as d}from"@dimjs/lang/cjs/is-array";import{Model as f}from"@dimjs/model-react";import{array as v}from"@dimjs/utils/cjs/array";import p from"@ant-design/icons/es/icons/CaretDownFilled";import m from"@ant-design/icons/es/icons/MoreOutlined";import{classNames as h}from"@dimjs/utils/cjs/class-names";import{isString as g}from"@dimjs/lang/cjs/is-string";import{extend as y}from"@dimjs/utils/cjs/extend";import{hooks as b}from"@wove/react/cjs/hooks";import{get as L}from"@dimjs/utils/cjs/get";import{_ as C,a as T}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{cloneState as w}from"@dimjs/model";import{Spin as j,Tree as N,Button as S,message as A}from"antd";import{forwardRef as R,useState as q,useMemo as k,useRef as x,useImperativeHandle as M,Fragment as E,isValidElement as P}from"react";import{ButtonOperate as D}from"../button-operate/index.js";import{DropdownMenuWrapper as O}from"../dropdown-menu-wrapper/index.js";import{fbaHooks as _}from"../fba-hooks/index.js";import{InputSearchWrapper as I}from"../input-search-wrapper/index.js";import{RequestStatus as V}from"../request-status/index.js";import{tree as F}from"@dimjs/utils/cjs/tree";import{isObject as K}from"@dimjs/lang/cjs/is-object";import"dequal";import{jsxs as U,jsx as z}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-undefined";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"ahooks";import"react-dom/client";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"../use-responsive-point-21b8c601.js";var H={treeList:[],treeTiledArray:[],treeTiledArrayMap:{},queryIsEmpty:false};var J={actions:{setTreeList:function t(n){return function(t){t.treeList=n.treeList||[];t.treeTiledArray=e(t.treeList,n.childrenName);t.treeTiledArrayMap=r(t.treeTiledArray,n.valueName);t.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[];e.treeTiledArray=[];e.treeTiledArrayMap={}}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r.status;if(r.status==="request-error"){e.treeList=[];e.treeTiledArray=[];e.treeTiledArrayMap={};e.requestErrorMessage=r.errorMessage||"数据查询异常"}else{e.requestErrorMessage=undefined}}},treeListAppendChildren:function t(n){return function(t){var a=e(t.treeList,n.childrenName);var i=r(a,n.valueName);var l=i[n.value];if(l){if(d(n.appendList)&&n.appendList.length>0){l[n.childrenName]=n.appendList}else{l.isLeaf=true}}t.treeTiledArray=a;t.treeTiledArrayMap=i}}},state:H};var B={};var Y=function e(r){if(!B[r]){B[r]=f(J)}return B[r]};var G=function e(r){var t=Y(r).getState();return t.treeList};var W=function r(t,n){var a=e(t,n.children).filter((function(e){var r=e[n.children];return r&&r.length>0})).map((function(e){return e[n.value]}));return a};var Q=function e(r,a,i){var l=t(a,i);return n(r,l,true,{value:"value",parentValue:"parentValue"}).filter((function(e){var r=e[i.children];return r&&r.length>0})).map((function(e){return e.value}))};var X=function e(r,t){var n=a(r)?[]:r;n=d(n)?n:[n];n=n.map((function(e){if(K(e))return e[t.value];return e}));return n};var Z=function e(r,t,n){var a=n.node.key;var i=n.dragNode.key;var l=n.node.pos.split("-");var s=n.dropPosition-Number(l[l.length-1]);var u=t.value;var o=t.children;var c=function e(r,t,n){for(var a=0;a<r.length;a++){if(r[a][u]===t){return n(r[a],a,r)}if(r[a][o]){c(r[a][o],t,n)}}};var d=w(r);var f;c(d,i,(function(e,r,t){t.splice(r,1);f=e}));if(!n.dropToGap){c(d,a,(function(e){e[o]=e[o]||[];e[o].unshift(f)}))}else if((n.node.props.children||[]).length>0&&n.node.props.expanded&&s===1){c(d,a,(function(e){e[o]=e[o]||[];e[o].unshift(f)}))}else{var v=[];var p;c(d,a,(function(e,r,t){v=t;p=r}));if(s===-1){v.splice(p,0,f)}else{v.splice(p+1,0,f)}}return{dataList:d,dragNodeData:$(i,d,t)}};var $=function r(t,n,a){var i;var l=a.value;var s=a.children;F.walkThroughTree((i={},i[l]=undefined,i[s]=n,i),(function(e,r,t){e["__index"]=r;e["__parentId"]=t==null?void 0:t[l]}),s);var u=e(n,s);var o=u.find((function(e){return e[l]===t}));return{parentId:o==null?void 0:o["__parentId"],id:o==null?void 0:o[l],index:o==null?void 0:o["__index"]}};var ee=function r(t,n,a,l){var s={};var u=[];var o=[];t.forEach((function(e){var r;if(i((r=n[e])==null?void 0:r[a])){u.push(e)}else{s[e]=e}}));if(u.length>0){u.forEach((function(r){var i=e(n[r][a],a);if(Object.keys(s).length>i.length){var u=i.filter((function(e){return t.find((function(r){return r===e[l]}))}));if(u.length===i.length){o.push(r)}}}))}return t.filter((function(e){return o.find((function(r){return r==e}))||s[e]}))};var re=function e(r,t,n,a){var i=l([t],{value:a,children:n});return r.filter((function(e){return!i[e]}))};var te=function e(r,t,n,a){var s={};r.forEach((function(e){var r;var u=(r=t[e])==null?void 0:r[n];if(i(u)){var o=l(u,{value:a,children:n});s=C({},s,o)}}));return r.filter((function(e){return!s[e]}))};var ne=function e(r,t,n){return r.filter((function(e){return!i(t[e][n])}))};var ae=function r(t,n,a,l){var s=[].concat(t);t.forEach((function(r){var t;var u=(t=n[r])==null?void 0:t[a];if(i(u)){var o=e(u,a);s=s.concat(o.map((function(e){return e[l]})))}}));return Array.from(new Set(s))};var ie=["style","serviceConfig","effectDependencyList","selectorTreeList","value","onChange","modelKey","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValueFieldNames","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required"];var le=function e(r,t){var n=r.slice().sort();var a=t.slice().sort();return JSON.stringify(n)===JSON.stringify(a)};var se=R((function(e,r){var t=e.style,n=e.serviceConfig,i=e.effectDependencyList,l=e.selectorTreeList,c=e.value,f=e.onChange,R=e.modelKey,F=e.checkableResponseParentNode,K=F===void 0?true:F,H=e.checkable,J=e.onSelectorTreeListChange,B=e.onRequestResponseChange,G=e.treeItemDataAdapter,$=e.searchValue,se=e.showSearch,ue=e.searchPlaceholder,oe=e.requestMessageConfig,ce=e.labelInValueFieldNames,de=e.labelInValue,fe=e.disabledCanUse,ve=e.menuLayoutType,pe=e.menuTriggerType,me=e.initRootExpand,he=e.searchResultType,ge=e.onDropNodeHandle,ye=e.onDropPrev,be=e.labelRender,Le=e.searchStyle,Ce=e.className,Te=e.defaultExpandAll,we=e.menus,je=e.customSearchRule,Ne=e.checkableType,Se=e.clickParentNodeToggleExpand,Ae=e.disableNodeSelect,Re=e.required,qe=T(e,ie);var ke=e.hasOwnProperty("selectorTreeList");var xe=n||{};var Me=i||[];var Ee=q([]),Pe=Ee[0],De=Ee[1];var Oe=Y(R).useStore(),_e=Oe[0],Ie=Oe[1];var Ve=_.useSafeState(false),Fe=Ve[0],Ke=Ve[1];var Ue="request-progress-"+e.modelKey;var ze=he==="highlight";var He=k((function(){return C({label:"label",value:"value",children:"children"},e.fieldNames)}),[e.fieldNames]);var Je=ve===undefined?"fold":ve;var Be=pe===undefined?"click":pe;var Ye=x(true);var Ge=x(undefined);var We=k((function(){return C({label:"label",value:"value"},ce)}),[ce]);var Qe=q(),Xe=Qe[0],Ze=Qe[1];var $e=k((function(){return X(c,We)}),[We,c]);_.useEffectCustom((function(){if(_e.treeList.length>0){if(Ye.current&&a(c)){Ye.current=false;if(Te){De(W(_e.treeList,He));return}else if(me&&_e.treeList.length){De([_e.treeList[0][He.value]]);return}}if(!a(c)){if(Ge.current&&!le($e,Ge.current)){var e=ar($e,true);De(Array.from(new Set(Pe==null?void 0:Pe.concat(e))))}}}}),[_e.treeList,JSON.stringify($e)]);var er=function e(r){return r===""||a(r)};var rr=function e(r){var t=r;if(xe.onRequestResultAdapter){t=xe.onRequestResultAdapter(r)}else if(He.list){t=L(r,He.list,[])||[]}if(!d(t)){console.warn("接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析");return[]}return t};_.useEffectCustom((function(){Ze($)}),[$]);var tr=b.useCallbackRef((function(){return new Promise((function(e,r){var t,n,a,i,l;var s=function(){try{return e()}catch(e){return r(e)}};var u=function(e){try{Ye.current=false;Ke(false);void A.error(e.message||"数据查询异常...");return s()}catch(e){return r(e)}};try{if(!xe.onRequest){throw new Error("onRequest 调用接口服务不能为空")}t=xe.requiredParamsKeys;n=y({},xe.params);if(t){a=t.find((function(e){return er(n[e])}));if(a){void Ie.changeRequestStatus({status:"no-dependencies-params"});console.warn("TreeWrapper组件:参数:"+t.join("、")+"不能为空");return e()}}var o=function(){try{return s()}catch(e){return u(e)}};var c=function(e){try{window[Ue]=false;Ke(false);void Ie.changeRequestStatus({status:"request-error",errorMessage:e.message});return o()}catch(e){return u(e)}};try{Ke(true);return Promise.resolve(Ie.changeRequestStatus({status:"request-progress"})).then((function(e){try{window[Ue]=true;return Promise.resolve(xe.onRequest==null?void 0:xe.onRequest(n)).then((function(e){try{i=e;B==null||B(i);l=rr(i);if(l.length===0){Ye.current=false}nr(l);Ke(false);window[Ue]=false;return o()}catch(e){return c(e)}}),c)}catch(e){return c(e)}}),c)}catch(e){c(e)}}catch(e){u(e)}}))}));_.useEffectCustom((function(){if(ke)return;if(Me.length){void tr();return}var e=Y(R).getState();if(e.requestStatus==="request-success"){J==null||J(e.treeList);return}if(!window[Ue]){void tr()}else{J==null||J(e.treeList)}}),Me);_.useEffectCustom((function(){if(ke){nr(l||[])}}),[l]);var nr=b.useCallbackRef((function(e){if((e==null?void 0:e.length)===0&&_e.treeList.length===0){void Ie.changeRequestStatus({status:"request-success"});return}void Ie.setTreeList({treeList:e||[],childrenName:He.children,valueName:He.value});J==null||J(e)}));var ar=function e(r,t){var n=[];r.forEach((function(e){if(!t&&Pe!=null&&Pe.includes(e))return;var r=Q(e,_e.treeList,He);n=n.concat(r)}));return n};b.useUpdateEffect((function(){if(Xe){var e=_e.treeTiledArray.filter((function(e){var r=e[He.label]||"";if(je){return je(e,Xe)}return String(r).toLowerCase().includes(Xe.toLowerCase())}));var r=ar(e.map((function(e){return e[He.value]})),true);De(Array.from(new Set(r)))}else{De([])}}),[Xe]);M(r,(function(){return{onClearSelectorList:function e(){void Ie.resetTreeList()},getTreeDataList:function e(){return _e.treeList},onChangeExpandedKeys:function e(r){De(r)},onSelectAll:function e(){var r=_e.treeTiledArray.map((function(e){return e[He.value]}));De(r);f==null||f(r,undefined,_e.treeList,undefined)},onCancelSelectAll:function e(){De([]);f==null||f(undefined)},onExpandedAll:function e(){var r=_e.treeTiledArray.map((function(e){return e[He.value]}));De(r)},onCancelExpandedAll:function e(){De([])}}}));var ir=b.useCallbackRef((function(e){De(e)}));var lr=function r(t,n,a,i){Ge.current=s(t);if(s(t).length===0){var l=i==null?void 0:i.node[He.value];var u=_e.treeTiledArrayMap[l];e.onChange==null||e.onChange(undefined,u,[u],i)}else{e.onChange==null||e.onChange(t,n,a,i)}};var sr=b.useCallbackRef((function(r,t){var n=[];var a=[];if(H){n=e.checkStrictly?r.checked:r}else{n=r;if(Re&&!s(r).length){return}if(Ae){var i=_e.treeTiledArrayMap[r[0]];var l=i?Ae(i):false;if(l){return}}}n=s(n);if(!H){a=n}else{if(se&&Xe&&!ze){var u=t==null?void 0:t.node;if(e.checkStrictly){if(t.checked==false){n=$e.filter((function(e){return e!=u[He.value]}))}else{n=Array.from(new Set([].concat($e,n)))}a=n}else{var o=Ne==="2"||Ne==="3"?ae($e,_e.treeTiledArrayMap,He.children,He.value):$e;if(t.checked==false){n=re([].concat(o),u,He.children,He.value)}else{n=Array.from(new Set([].concat(o,n)))}a=ee(n,_e.treeTiledArrayMap,He.children,He.value)}}else{a=n}if(!e.checkStrictly){if(Ne==="2"){n=ne(a,_e.treeTiledArrayMap,He.children)}else if(Ne==="3"){n=te(a,_e.treeTiledArrayMap,He.children,He.value)}else if(K==false){n=ne(a,_e.treeTiledArrayMap,He.children)}else{n=a}}}var c=a.map((function(e){return _e.treeTiledArrayMap[e]}));if(de){var d=We.value;var f=We.label;var v=n.map((function(e){var r;return r={},r[f]=_e.treeTiledArrayMap[e][He.label],r[d]=_e.treeTiledArrayMap[e][He.value],r}));if(H){lr(v,n.map((function(e){return _e.treeTiledArrayMap[e]})),c,t)}else{lr(v[0],_e.treeTiledArrayMap[n[0]],c,t)}}else{if(H){lr(n,n.map((function(e){return _e.treeTiledArrayMap[e]})),c,t)}else{lr(n[0],_e.treeTiledArrayMap[n[0]],c,t)}}}));var ur=b.useCallbackRef((function(e){return G==null?void 0:G(e)}));var or=k((function(){var e=w(_e.treeList||[]);if(Xe&&he!=="highlight"){var r=u(w(_e.treeList||[]),(function(e){var r;if(je){return je(e,Xe)}var t=(r=e[He.label])==null?void 0:r.toLowerCase();return t.indexOf(Xe.toLowerCase())>=0}),{childrenName:He.children});return r}return e}),[je,He.children,He.label,he,_e.treeList,Xe]);var cr=k((function(){var e=function r(t){return t==null?void 0:t.map((function(r){var t;var n=(ur==null?void 0:ur(r))||r;var a=fe?undefined:n.disabled;var i=n[He.label]||"";var l;if(Xe&&g(i)){var s=i==null?void 0:i.toLowerCase();var u=s.indexOf(Xe.toLowerCase());var o=i.substring(0,u);var c=i.slice(u+Xe.length);var f=i.slice(u,u+Xe.length);l=u>-1?U("span",{className:h({"v-tree-item-disabled":n.disabled}),children:[o,z("span",{className:"site-tree-search-value",children:f}),c]}):null}if(!l&&n.disabled){l=z("span",{className:h({"v-tree-item-disabled":n.disabled}),children:i})}var v=n[He.children];return C({},n,(t={disabled:a},t[He.label]=l||i,t._treeItemName=i,t._disabled=n.disabled,t[He.children]=d(v)&&v.length>0?e(v):undefined,t))}))};return e(or)}),[or,ur,fe,He.label,He.children,Xe]);var dr=b.useCallbackRef((function(r){return new Promise((function(t,n){return new Promise((function(a,i){var l,s,u,o,c;if(r[He.children]){t();return a()}var d=function(){try{return a()}catch(e){return i(e)}};var f=function(e){try{void A.error(e.message||"数据加载异常...");n();return d()}catch(e){return i(e)}};try{return Promise.resolve((l=e.loadDataServiceConfig)==null||l.onRequest==null?void 0:l.onRequest(((s=e.loadDataServiceConfig)==null||s.getParams==null?void 0:s.getParams(r))||{})).then((function(n){try{o=n;c=(u=e.loadDataServiceConfig)!=null&&u.onRequestResultAdapter?e.loadDataServiceConfig.onRequestResultAdapter(o):o;void Ie.treeListAppendChildren({value:r[He.value],appendList:c,childrenName:He.children,valueName:He.value}).then((function(e){nr(e.treeList);t()}));return d()}catch(e){return f(e)}}),f)}catch(e){f(e)}}))}))}));var fr=b.useCallbackRef((function(r){var t=r==null?void 0:r[He.children];var n=e.loadDataFlag;var a=n?!r.isLeaf:false;var i=t&&t.length>0||a;return!i}));var vr=b.useCallbackRef((function(r){var t,n,a;var i=r._treeItemName||r[He.label];var l=we==null?void 0:we(C({},r,(t={},t[He.label]=i,t)));if(l!=null&&l.operateList.length){return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[He.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[He.label])}),z(D,C({gap:5},l,{dropdownMenuProps:C({placement:"bottomRight",isFixed:true},l==null?void 0:l.dropdownMenuProps),className:h("tree-item-title-operate",l.className)}))]})}if(Je==="fold"){var s;var u=[];if((s=e.menuOptions)!=null&&s.fold){var o,c,d;u=((o=e.menuOptions)==null||(c=o[Je])==null?void 0:c.call(o,C({},r,(d={},d[He.label]=i,d))))||[]}else{var f;u=(e.getMenuOptions==null?void 0:e.getMenuOptions(C({},r,(f={},f[He.label]=i,f))))||[]}return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[He.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[He.label])}),u.length>0&&z(O,{menuList:u,placement:"bottomRight",children:z(m,{})})]})}var v=(n=e.menuOptions)==null||n.tile==null?void 0:n.tile(C({},r,(a={},a[He.label]=i,a)));return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[He.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[He.label])}),v?z(D,C({gap:5},v,{className:h("tree-item-title-operate",v.className)})):null]})}));var pr=b.useDebounceCallback((function(r){Ze(r);e.onSearchValueChange==null||e.onSearchValueChange(r)}),300);var mr=b.useCallbackRef((function(e){pr(e.target.value)}));var hr=b.useCallbackRef((function(r){if(!e.icon)return null;if(P(e.icon))return e.icon;var t=fr(r.data);return e.icon(C({},r,{isParent:!t,isLeaf:t}))}));var gr=k((function(){return{title:He.label,key:He.value,children:He.children}}),[He]);var yr=cr.length>0&&_e.requestStatus!=="request-error";var br=C({showLine:{showLeafIcon:false},titleRender:vr,blockNode:true,switcherIcon:z(p,{}),onDrop:function e(r){if(ye){var t=ye(r);if(!t)return}var n=Z(or,He,r),a=n.dataList,i=n.dragNodeData;ge==null||ge(i);nr(a)},expandedKeys:Pe},qe,{fieldNames:gr,treeData:cr,onExpand:ir,loadData:e.loadDataFlag?dr:undefined,style:{width:"100%"},icon:hr,onClick:function e(r){if(Se){var t=r.target;var n=t.dataset.value;if(a(n)){t=o.findParentsElement(r.target,(function(e){var r,t;return((r=e.classList)==null?void 0:r.contains("tree-item-title"))||((t=e.classList)==null?void 0:t.contains("ant-tree-treenode"))}));n=t.dataset.value}if(!a(n)){var i=_e.treeTiledArrayMap[n];if(i!=null&&i[He.children]&&i[He.children].length>0){var l=Pe.includes(n);if(l){var s=v.arrayRemove(Pe,n);De([].concat(s))}else{De([].concat(Pe,[n]))}}}}}});var Lr={onCheck:sr,checkable:H,checkedKeys:$e};var Cr={onSelect:sr,multiple:false,selectedKeys:$e};var Tr=H?Lr:Cr;var wr=h("v-tree-wrapper","v-tree-wrapper-menu-"+Be,Ce);var jr=_e.treeList.length>0&&!yr&&Xe;return U("div",{className:wr,style:t,children:[!!se&&U("div",{className:"v-tree-wrapper-search-area",style:Le,children:[z(I,{className:"v-tree-wrapper-search",placeholder:a(ue)?"搜索":ue,onChange:mr,value:Xe,allowClear:true}),!!e.searchExtraElement&&z("span",{className:"v-tree-wrapper-search-extra",children:e.searchExtraElement})]}),yr?U("div",{className:"v-tree-wrapper-tree-wrapper",children:[z(j,{spinning:_e.requestStatus==="request-progress"}),z(N,C({},Tr,br,{className:"v-tree-wrapper-tree"}))]}):z(V,{status:_e.requestStatus,loading:Fe,messageConfig:C({"request-success":jr?"搜索结果为空":"暂无数据","request-error":_e.requestErrorMessage},oe),errorButton:z(S,{type:"primary",onClick:tr,children:"重新获取数据"})})]})}));var ue=c(se,{getTreeDataList:G});export{ue as TreeWrapper};
|
|
16
|
+
import{treeToArray as e,arrayToMap as r,treeToTiledArray as t,treeLeafParentsArray as n,isUndefinedOrNull as a,isNotEmptyArray as i,treeToTiledMap as l,toArray as u,treeFilter as s,dom as o,attachPropertiesToComponent as c}from"@flatbiz/utils";import{isArray as d}from"@dimjs/lang/cjs/is-array";import{Model as f}from"@dimjs/model-react";import{array as v}from"@dimjs/utils/cjs/array";import p from"@ant-design/icons/es/icons/CaretDownFilled";import m from"@ant-design/icons/es/icons/MoreOutlined";import{classNames as h}from"@dimjs/utils/cjs/class-names";import{isString as g}from"@dimjs/lang/cjs/is-string";import{extend as y}from"@dimjs/utils/cjs/extend";import{hooks as b}from"@wove/react/cjs/hooks";import{get as L}from"@dimjs/utils/cjs/get";import{_ as C,a as T}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{cloneState as w}from"@dimjs/model";import{Spin as j,Tree as A,Button as N,message as S}from"antd";import{forwardRef as R,useState as q,useMemo as k,useRef as x,useImperativeHandle as M,Fragment as E,isValidElement as P}from"react";import{ButtonOperate as D}from"../button-operate/index.js";import{DropdownMenuWrapper as O}from"../dropdown-menu-wrapper/index.js";import{fbaHooks as I}from"../fba-hooks/index.js";import{InputSearchWrapper as _}from"../input-search-wrapper/index.js";import{RequestStatus as V}from"../request-status/index.js";import{tree as F}from"@dimjs/utils/cjs/tree";import{isObject as K}from"@dimjs/lang/cjs/is-object";import"dequal";import{jsxs as U,jsx as z}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-undefined";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-utils/index.js";import"@ant-design/icons/es/icons/ExclamationCircleFilled";import"../dialog-confirm/index.js";import"../dialog-modal/index.js";import"ahooks";import"react-dom/client";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"../use-responsive-point-21b8c601.js";var H={treeList:[],treeTiledArray:[],treeTiledArrayMap:{},queryIsEmpty:false};var J={actions:{setTreeList:function t(n){return function(t){t.treeList=n.treeList||[];t.treeTiledArray=e(t.treeList,n.childrenName);t.treeTiledArrayMap=r(t.treeTiledArray,n.valueName);t.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[];e.treeTiledArray=[];e.treeTiledArrayMap={}}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r.status;if(r.status==="request-error"){e.treeList=[];e.treeTiledArray=[];e.treeTiledArrayMap={};e.requestErrorMessage=r.errorMessage||"数据查询异常"}else{e.requestErrorMessage=undefined}}},treeListAppendChildren:function t(n){return function(t){var a=e(t.treeList,n.childrenName);var i=r(a,n.valueName);var l=i[n.value];if(l){if(d(n.appendList)&&n.appendList.length>0){l[n.childrenName]=n.appendList}else{l.isLeaf=true}}t.treeTiledArray=a;t.treeTiledArrayMap=i}}},state:H};var B={};var Y=function e(r){if(!B[r]){B[r]=f(J)}return B[r]};var G=function e(r){var t=Y(r).getState();return t.treeList};var W=function r(t,n){var a=e(t,n.children).filter((function(e){var r=e[n.children];return r&&r.length>0})).map((function(e){return e[n.value]}));return a};var Q=function e(r,a,i){var l=t(a,i);return n(r,l,true,{value:"value",parentValue:"parentValue"}).filter((function(e){var r=e[i.children];return r&&r.length>0})).map((function(e){return e.value}))};var X=function e(r,t){var n=a(r)?[]:r;n=d(n)?n:[n];n=n.map((function(e){if(K(e))return e[t.value];return e}));return n};var Z=function e(r,t,n){var a=n.node.key;var i=n.dragNode.key;var l=n.node.pos.split("-");var u=n.dropPosition-Number(l[l.length-1]);var s=t.value;var o=t.children;var c=function e(r,t,n){for(var a=0;a<r.length;a++){if(r[a][s]===t){return n(r[a],a,r)}if(r[a][o]){c(r[a][o],t,n)}}};var d=w(r);var f;c(d,i,(function(e,r,t){t.splice(r,1);f=e}));if(!n.dropToGap){c(d,a,(function(e){e[o]=e[o]||[];e[o].unshift(f)}))}else if((n.node.props.children||[]).length>0&&n.node.props.expanded&&u===1){c(d,a,(function(e){e[o]=e[o]||[];e[o].unshift(f)}))}else{var v=[];var p;c(d,a,(function(e,r,t){v=t;p=r}));if(u===-1){v.splice(p,0,f)}else{v.splice(p+1,0,f)}}return{dataList:d,dragNodeData:$(i,d,t)}};var $=function r(t,n,a){var i;var l=a.value;var u=a.children;F.walkThroughTree((i={},i[l]=undefined,i[u]=n,i),(function(e,r,t){e["__index"]=r;e["__parentId"]=t==null?void 0:t[l]}),u);var s=e(n,u);var o=s.find((function(e){return e[l]===t}));return{parentId:o==null?void 0:o["__parentId"],id:o==null?void 0:o[l],index:o==null?void 0:o["__index"]}};var ee=function r(t,n,a,l){var u={};var s=[];var o=[];t.forEach((function(e){var r;if(i((r=n[e])==null?void 0:r[a])){s.push(e)}else{u[e]=e}}));if(s.length>0){s.forEach((function(r){var i=e(n[r][a],a);if(Object.keys(u).length>i.length){var s=i.filter((function(e){return t.find((function(r){return r===e[l]}))}));if(s.length===i.length){o.push(r)}}}))}return t.filter((function(e){return o.find((function(r){return r==e}))||u[e]}))};var re=function e(r,t,n,a){var i=l([t],{value:a,children:n});return r.filter((function(e){return!i[e]}))};var te=function e(r,t,n,a){var u={};r.forEach((function(e){var r;var s=(r=t[e])==null?void 0:r[n];if(i(s)){var o=l(s,{value:a,children:n});u=C({},u,o)}}));return r.filter((function(e){return!u[e]}))};var ne=function e(r,t,n){return r.filter((function(e){return!i(t[e][n])}))};var ae=function r(t,n,a,l){var u=[].concat(t);t.forEach((function(r){var t;var s=(t=n[r])==null?void 0:t[a];if(i(s)){var o=e(s,a);u=u.concat(o.map((function(e){return e[l]})))}}));return Array.from(new Set(u))};var ie=["style","serviceConfig","effectDependencyList","selectorTreeList","value","onChange","modelKey","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValueFieldNames","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue"];var le=function e(r,t){var n=r.slice().sort();var a=t.slice().sort();return JSON.stringify(n)===JSON.stringify(a)};var ue=R((function(e,r){var t=e.style,n=e.serviceConfig,i=e.effectDependencyList,l=e.selectorTreeList,c=e.value,f=e.onChange,R=e.modelKey,F=e.checkableResponseParentNode,K=F===void 0?true:F,H=e.checkable,J=e.onSelectorTreeListChange,B=e.onRequestResponseChange,G=e.treeItemDataAdapter,$=e.searchValue,ue=e.showSearch,se=e.searchPlaceholder,oe=e.requestMessageConfig,ce=e.labelInValueFieldNames,de=e.labelInValue,fe=e.disabledCanUse,ve=e.menuLayoutType,pe=e.menuTriggerType,me=e.initRootExpand,he=e.searchResultType,ge=e.onDropNodeHandle,ye=e.onDropPrev,be=e.labelRender,Le=e.searchStyle,Ce=e.className,Te=e.defaultExpandAll,we=e.menus,je=e.customSearchRule,Ae=e.checkableType,Ne=e.clickParentNodeToggleExpand,Se=e.disableNodeSelect,Re=e.required,qe=e.executeOnChangeInRenderFirstValue,ke=T(e,ie);var xe=e.hasOwnProperty("selectorTreeList");var Me=n||{};var Ee=i||[];var Pe=q([]),De=Pe[0],Oe=Pe[1];var Ie=Y(R).useStore(),_e=Ie[0],Ve=Ie[1];var Fe=I.useSafeState(false),Ke=Fe[0],Ue=Fe[1];var ze="request-progress-"+e.modelKey;var He=he==="highlight";var Je=k((function(){return C({label:"label",value:"value",children:"children"},e.fieldNames)}),[e.fieldNames]);var Be=ve===undefined?"fold":ve;var Ye=pe===undefined?"click":pe;var Ge=x(true);var We=x(undefined);var Qe=k((function(){return C({label:"label",value:"value"},ce)}),[ce]);var Xe=q(),Ze=Xe[0],$e=Xe[1];var er=k((function(){return X(c,Qe)}),[Qe,c]);I.useEffectCustom((function(){if(_e.treeList.length>0){if(Ge.current&&de&&qe&&er.length>0){var r=[];var t=[];er.forEach((function(e){var n=_e.treeTiledArrayMap[e];if(n){var a;t.push(n);r.push((a={},a[Qe.label]=n[Je.label],a[Qe.value]=n[Je.value],a))}}));if(H){e.onChange==null||e.onChange(r?r:undefined,t)}else{e.onChange==null||e.onChange(r?r[0]:undefined,t[0])}}if(Ge.current&&a(c)){Ge.current=false;if(Te){Oe(W(_e.treeList,Je));return}else if(me&&_e.treeList.length){Oe([_e.treeList[0][Je.value]]);return}}if(!a(c)){Ge.current=false;if(We.current){if(!le(er,We.current)){var n=ir(er,true);Oe(Array.from(new Set(De==null?void 0:De.concat(n))))}}else{var i=ir(er,true);Oe(Array.from(new Set(De==null?void 0:De.concat(i))))}}}}),[_e.treeList,JSON.stringify(er)]);var rr=function e(r){return r===""||a(r)};var tr=function e(r){var t=r;if(Me.onRequestResultAdapter){t=Me.onRequestResultAdapter(r)}else if(Je.list){t=L(r,Je.list,[])||[]}if(!d(t)){console.warn("接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析");return[]}return t};I.useEffectCustom((function(){$e($)}),[$]);var nr=b.useCallbackRef((function(){return new Promise((function(e,r){var t,n,a,i,l;var u=function(){try{return e()}catch(e){return r(e)}};var s=function(e){try{Ge.current=false;Ue(false);void S.error(e.message||"数据查询异常...");return u()}catch(e){return r(e)}};try{if(!Me.onRequest){throw new Error("onRequest 调用接口服务不能为空")}t=Me.requiredParamsKeys;n=y({},Me.params);if(t){a=t.find((function(e){return rr(n[e])}));if(a){void Ve.changeRequestStatus({status:"no-dependencies-params"});console.warn("TreeWrapper组件:参数:"+t.join("、")+"不能为空");return e()}}var o=function(){try{return u()}catch(e){return s(e)}};var c=function(e){try{window[ze]=false;Ue(false);void Ve.changeRequestStatus({status:"request-error",errorMessage:e.message});return o()}catch(e){return s(e)}};try{Ue(true);return Promise.resolve(Ve.changeRequestStatus({status:"request-progress"})).then((function(e){try{window[ze]=true;return Promise.resolve(Me.onRequest==null?void 0:Me.onRequest(n)).then((function(e){try{i=e;B==null||B(i);l=tr(i);if(l.length===0){Ge.current=false}ar(l);Ue(false);window[ze]=false;return o()}catch(e){return c(e)}}),c)}catch(e){return c(e)}}),c)}catch(e){c(e)}}catch(e){s(e)}}))}));I.useEffectCustom((function(){if(xe)return;if(Ee.length){void nr();return}var e=Y(R).getState();if(e.requestStatus==="request-success"){J==null||J(e.treeList);return}if(!window[ze]){void nr()}else{J==null||J(e.treeList)}}),Ee);I.useEffectCustom((function(){if(xe){ar(l||[])}}),[l]);var ar=b.useCallbackRef((function(e){if((e==null?void 0:e.length)===0&&_e.treeList.length===0){void Ve.changeRequestStatus({status:"request-success"});return}void Ve.setTreeList({treeList:e||[],childrenName:Je.children,valueName:Je.value});J==null||J(e)}));var ir=function e(r,t){var n=[];r.forEach((function(e){if(!t&&De!=null&&De.includes(e))return;var r=Q(e,_e.treeList,Je);n=n.concat(r)}));return n};b.useUpdateEffect((function(){if(Ze){var e=_e.treeTiledArray.filter((function(e){var r=e[Je.label]||"";if(je){return je(e,Ze)}return String(r).toLowerCase().includes(Ze.toLowerCase())}));var r=ir(e.map((function(e){return e[Je.value]})),true);Oe(Array.from(new Set(r)))}else{Oe([])}}),[Ze]);M(r,(function(){return{onClearSelectorList:function e(){void Ve.resetTreeList()},getTreeDataList:function e(){return _e.treeList},getTreeTiledArray:function e(){return _e.treeTiledArray},getTreeTiledArrayMap:function e(){return _e.treeTiledArrayMap},onChangeExpandedKeys:function e(r){Oe(r)},onSelectAll:function e(){var r=_e.treeTiledArray.map((function(e){return e[Je.value]}));Oe(r);f==null||f(r,undefined,_e.treeList,undefined)},onCancelSelectAll:function e(){Oe([]);f==null||f(undefined)},onExpandedAll:function e(){var r=_e.treeTiledArray.map((function(e){return e[Je.value]}));Oe(r)},onCancelExpandedAll:function e(){Oe([])}}}));var lr=b.useCallbackRef((function(e){Oe(e)}));var ur=function r(t,n,a,i){We.current=u(t);if(u(t).length===0){var l=i==null?void 0:i.node[Je.value];var s=_e.treeTiledArrayMap[l];e.onChange==null||e.onChange(undefined,s,[s],i)}else{e.onChange==null||e.onChange(t,n,a,i)}};var sr=b.useCallbackRef((function(r,t){var n=[];var a=[];if(H){n=e.checkStrictly?r.checked:r}else{n=r;if(Re&&!u(r).length){return}if(Se){var i=_e.treeTiledArrayMap[r[0]];var l=i?Se(i):false;if(l){return}}}n=u(n);if(!H){a=n}else{if(ue&&Ze&&!He){var s=t==null?void 0:t.node;if(e.checkStrictly){if(t.checked==false){n=er.filter((function(e){return e!=s[Je.value]}))}else{n=Array.from(new Set([].concat(er,n)))}a=n}else{var o=Ae==="2"||Ae==="3"?ae(er,_e.treeTiledArrayMap,Je.children,Je.value):er;if(t.checked==false){n=re([].concat(o),s,Je.children,Je.value)}else{n=Array.from(new Set([].concat(o,n)))}a=ee(n,_e.treeTiledArrayMap,Je.children,Je.value)}}else{a=n}if(!e.checkStrictly){if(Ae==="2"){n=ne(a,_e.treeTiledArrayMap,Je.children)}else if(Ae==="3"){n=te(a,_e.treeTiledArrayMap,Je.children,Je.value)}else if(K==false){n=ne(a,_e.treeTiledArrayMap,Je.children)}else{n=a}}}var c=a.map((function(e){return _e.treeTiledArrayMap[e]}));if(de){var d=Qe.value;var f=Qe.label;var v=n.map((function(e){var r;return r={},r[f]=_e.treeTiledArrayMap[e][Je.label],r[d]=_e.treeTiledArrayMap[e][Je.value],r}));if(H){ur(v,n.map((function(e){return _e.treeTiledArrayMap[e]})),c,t)}else{ur(v[0],_e.treeTiledArrayMap[n[0]],c,t)}}else{if(H){ur(n,n.map((function(e){return _e.treeTiledArrayMap[e]})),c,t)}else{ur(n[0],_e.treeTiledArrayMap[n[0]],c,t)}}}));var or=b.useCallbackRef((function(e){return G==null?void 0:G(e)}));var cr=k((function(){var e=w(_e.treeList||[]);if(Ze&&he!=="highlight"){var r=s(w(_e.treeList||[]),(function(e){var r;if(je){return je(e,Ze)}var t=(r=e[Je.label])==null?void 0:r.toLowerCase();return t.indexOf(Ze.toLowerCase())>=0}),{childrenName:Je.children});return r}return e}),[je,Je.children,Je.label,he,_e.treeList,Ze]);var dr=k((function(){var e=function r(t){return t==null?void 0:t.map((function(r){var t;var n=(or==null?void 0:or(r))||r;var a=fe?undefined:n.disabled;var i=n[Je.label]||"";var l;if(Ze&&g(i)){var u=i==null?void 0:i.toLowerCase();var s=u.indexOf(Ze.toLowerCase());var o=i.substring(0,s);var c=i.slice(s+Ze.length);var f=i.slice(s,s+Ze.length);l=s>-1?U("span",{className:h({"v-tree-item-disabled":n.disabled}),children:[o,z("span",{className:"site-tree-search-value",children:f}),c]}):null}if(!l&&n.disabled){l=z("span",{className:h({"v-tree-item-disabled":n.disabled}),children:i})}var v=n[Je.children];return C({},n,(t={disabled:a},t[Je.label]=l||i,t._treeItemName=i,t._disabled=n.disabled,t[Je.children]=d(v)&&v.length>0?e(v):undefined,t))}))};return e(cr)}),[cr,or,fe,Je.label,Je.children,Ze]);var fr=b.useCallbackRef((function(r){return new Promise((function(t,n){return new Promise((function(a,i){var l,u,s,o,c;if(r[Je.children]){t();return a()}var d=function(){try{return a()}catch(e){return i(e)}};var f=function(e){try{void S.error(e.message||"数据加载异常...");n();return d()}catch(e){return i(e)}};try{return Promise.resolve((l=e.loadDataServiceConfig)==null||l.onRequest==null?void 0:l.onRequest(((u=e.loadDataServiceConfig)==null||u.getParams==null?void 0:u.getParams(r))||{})).then((function(n){try{o=n;c=(s=e.loadDataServiceConfig)!=null&&s.onRequestResultAdapter?e.loadDataServiceConfig.onRequestResultAdapter(o):o;void Ve.treeListAppendChildren({value:r[Je.value],appendList:c,childrenName:Je.children,valueName:Je.value}).then((function(e){ar(e.treeList);t()}));return d()}catch(e){return f(e)}}),f)}catch(e){f(e)}}))}))}));var vr=b.useCallbackRef((function(r){var t=r==null?void 0:r[Je.children];var n=e.loadDataFlag;var a=n?!r.isLeaf:false;var i=t&&t.length>0||a;return!i}));var pr=b.useCallbackRef((function(r){var t,n,a;var i=r._treeItemName||r[Je.label];var l=we==null?void 0:we(C({},r,(t={},t[Je.label]=i,t)));if(l!=null&&l.operateList.length){return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[Je.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[Je.label])}),z(D,C({gap:5},l,{dropdownMenuProps:C({placement:"bottomRight",isFixed:true},l==null?void 0:l.dropdownMenuProps),className:h("tree-item-title-operate",l.className)}))]})}if(Be==="fold"){var u;var s=[];if((u=e.menuOptions)!=null&&u.fold){var o,c,d;s=((o=e.menuOptions)==null||(c=o[Be])==null?void 0:c.call(o,C({},r,(d={},d[Je.label]=i,d))))||[]}else{var f;s=(e.getMenuOptions==null?void 0:e.getMenuOptions(C({},r,(f={},f[Je.label]=i,f))))||[]}return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[Je.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[Je.label])}),s.length>0&&z(O,{menuList:s,placement:"bottomRight",children:z(m,{})})]})}var v=(n=e.menuOptions)==null||n.tile==null?void 0:n.tile(C({},r,(a={},a[Je.label]=i,a)));return U(E,{children:[z("span",{className:"tree-item-title","data-value":r[Je.value],children:(be==null?void 0:be(r))||(r==null?void 0:r[Je.label])}),v?z(D,C({gap:5},v,{className:h("tree-item-title-operate",v.className)})):null]})}));var mr=b.useDebounceCallback((function(r){$e(r);e.onSearchValueChange==null||e.onSearchValueChange(r)}),300);var hr=b.useCallbackRef((function(e){mr(e.target.value)}));var gr=b.useCallbackRef((function(r){if(!e.icon)return null;if(P(e.icon))return e.icon;var t=vr(r.data);return e.icon(C({},r,{isParent:!t,isLeaf:t}))}));var yr=k((function(){return{title:Je.label,key:Je.value,children:Je.children}}),[Je]);var br=dr.length>0&&_e.requestStatus!=="request-error";var Lr=C({showLine:{showLeafIcon:false},titleRender:pr,blockNode:true,switcherIcon:z(p,{}),onDrop:function e(r){if(ye){var t=ye(r);if(!t)return}var n=Z(cr,Je,r),a=n.dataList,i=n.dragNodeData;ge==null||ge(i);ar(a)},expandedKeys:De},ke,{fieldNames:yr,treeData:dr,onExpand:lr,loadData:e.loadDataFlag?fr:undefined,style:{width:"100%"},icon:gr,onClick:function e(r){if(Ne){var t=r.target;var n=t.dataset.value;if(a(n)){t=o.findParentsElement(r.target,(function(e){var r,t;return((r=e.classList)==null?void 0:r.contains("tree-item-title"))||((t=e.classList)==null?void 0:t.contains("ant-tree-treenode"))}));n=t.dataset.value}if(!a(n)){var i=_e.treeTiledArrayMap[n];if(i!=null&&i[Je.children]&&i[Je.children].length>0){var l=De.includes(n);if(l){var u=v.arrayRemove(De,n);Oe([].concat(u))}else{Oe([].concat(De,[n]))}}}}}});var Cr={onCheck:sr,checkable:H,checkedKeys:er};var Tr={onSelect:sr,multiple:false,selectedKeys:er};var wr=H?Cr:Tr;var jr=h("v-tree-wrapper","v-tree-wrapper-menu-"+Ye,Ce);var Ar=_e.treeList.length>0&&!br&&Ze;return U("div",{className:jr,style:t,children:[!!ue&&U("div",{className:"v-tree-wrapper-search-area",style:Le,children:[z(_,{className:"v-tree-wrapper-search",placeholder:a(se)?"搜索":se,onChange:hr,value:Ze,allowClear:true}),!!e.searchExtraElement&&z("span",{className:"v-tree-wrapper-search-extra",children:e.searchExtraElement})]}),br?U("div",{className:"v-tree-wrapper-tree-wrapper",children:[z(j,{spinning:_e.requestStatus==="request-progress"}),z(A,C({},wr,Lr,{className:"v-tree-wrapper-tree"}))]}):z(V,{status:_e.requestStatus,loading:Ke,messageConfig:C({"request-success":Ar?"搜索结果为空":"暂无数据","request-error":_e.requestErrorMessage},oe),errorButton:z(N,{type:"primary",onClick:nr,children:"重新获取数据"})})]})}));var se=c(ue,{getTreeDataList:G});export{se as TreeWrapper};
|
|
17
17
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n treeTiledArrayMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[params.value];\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { dom, isUndefinedOrNull, toArray, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n ...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 searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (responseFirstRef.current && isUndefinedOrNull(value)) {\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 if (innerValueListRef.current && !compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(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 valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n 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 onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] || '') as string;\n let titleDom;\n if (treeSearchValue && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n const target = state.treeTiledArrayMap[value];\n if (target?.[fieldNames.children] && target[fieldNames.children].length > 0) {\n const treeExpandedTarget = treeExpandedKeys.includes(value);\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","useMemo","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport type { TAny } from '@flatbiz/utils';\nimport { arrayToMap, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n treeTiledArrayMap: TPlainObject;\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n requestErrorMessage?: string;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n valueName: string;\n };\n resetTreeList: void;\n changeRequestStatus: {\n status: TRequestStatus;\n errorMessage?: string;\n };\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n treeTiledArrayMap: {},\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.treeTiledArrayMap = arrayToMap(state.treeTiledArray, params.valueName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params.status;\n if (params.status === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n state.treeTiledArrayMap = {};\n state.requestErrorMessage = params.errorMessage || '数据查询异常';\n } else {\n state.requestErrorMessage = undefined;\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const tiledArray = treeToArray(state.treeList, params.childrenName);\n const treeTiledArrayMap = arrayToMap(tiledArray, params.valueName);\n const target = treeTiledArrayMap[params.value];\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = tiledArray;\n state.treeTiledArrayMap = treeTiledArrayMap;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isNotEmptyArray,\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n treeToTiledMap,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, {\n value: 'value',\n parentValue: 'parentValue',\n })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n\n/**\n * 由于树节点过滤后,选中了父节点不一定是全部子节点,此处进行筛查\n */\nexport const getActualSelectKeyList = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const leafValueDataMap: TPlainObject = {};\n const hasChildrenList: Array<string | number> = [];\n const retainHasChildrenValueList: Array<string | number> = [];\n checkedValueList.forEach((item) => {\n if (isNotEmptyArray(treeTiledArrayMap[item]?.[chidlrenKey])) {\n hasChildrenList.push(item);\n } else {\n leafValueDataMap[item] = item;\n }\n });\n if (hasChildrenList.length > 0) {\n hasChildrenList.forEach((item) => {\n const childrenTiledList = treeToArray(treeTiledArrayMap[item][chidlrenKey], chidlrenKey);\n if (Object.keys(leafValueDataMap).length > childrenTiledList.length) {\n const targetList = childrenTiledList.filter((item) => {\n return checkedValueList.find((temp) => temp === item[valueKey]);\n });\n if (targetList.length === childrenTiledList.length) {\n retainHasChildrenValueList.push(item);\n }\n }\n });\n }\n\n return checkedValueList.filter((item) => {\n return retainHasChildrenValueList.find((temp) => temp == item) || leafValueDataMap[item];\n });\n};\n\n/** 移除指定节点以及所有子节点 */\nexport const removeTargetNodeAndAllChildrenNode = (\n checkedValueList: Array<string | number>,\n awitDeleteNode: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n const awitDeleteTieldDataMap: TPlainObject = treeToTiledMap([awitDeleteNode], {\n value: valueKey,\n children: chidlrenKey,\n });\n return checkedValueList.filter((item) => {\n return !awitDeleteTieldDataMap[item];\n });\n};\n\n/** 移除父节点全选下的叶子节点 */\nexport const removeAllSelectLeafNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let awitDeleteCheckedValueMap: TPlainObject = {};\n checkedValueList.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n // hasChildrenList.push(item);\n const targetMap = treeToTiledMap(childrenList, {\n value: valueKey,\n children: chidlrenKey,\n });\n awitDeleteCheckedValueMap = {\n ...awitDeleteCheckedValueMap,\n ...targetMap,\n };\n }\n });\n return checkedValueList.filter((item) => !awitDeleteCheckedValueMap[item]);\n};\n\n/** 移除所有的父节点 */\nexport const removeAllParentNode = (\n checkedValueList: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n) => {\n return checkedValueList.filter((item) => {\n return !isNotEmptyArray(treeTiledArrayMap[item][chidlrenKey]);\n });\n};\n\n/** values中的数据可能存在缺少父节点下的子节点情况,此处补齐 */\nexport const completionParentChildrenNode = (\n values: Array<string | number>,\n treeTiledArrayMap: TPlainObject,\n chidlrenKey: string,\n valueKey: string,\n) => {\n let allValues = [...values];\n values.forEach((item) => {\n const childrenList = treeTiledArrayMap[item]?.[chidlrenKey];\n if (isNotEmptyArray(childrenList)) {\n const targetList = treeToArray(childrenList, chidlrenKey);\n allValues = allValues.concat(targetList.map((temp) => temp[valueKey]));\n }\n });\n return Array.from(new Set(allValues));\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray, isString } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { array, classNames, extend, get } from '@dimjs/utils';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\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 { dom, isUndefinedOrNull, toArray, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport {\n completionParentChildrenNode,\n getActualSelectKeyList,\n getDefaultExpandAllKeys,\n getExpandedKeys,\n getVauleList,\n onTreeDrop,\n removeAllParentNode,\n removeAllSelectLeafNode,\n removeTargetNodeAndAllChildrenNode,\n} from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\nexport type TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\nexport type TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: {\n label?: string;\n value?: string;\n children?: string;\n list?: string;\n };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * @description 已过期,请使用 checkableType 配置\n * ```\n * 注意:checkStrictly = true,checkableResponseParentNode配置失效\n * ```\n */\n checkableResponseParentNode?: boolean;\n /**\n * 节点选择类型(默认值:'2'), 多选时有效\n * ```\n * '1' 表示返回所有选中的节点(包含父节点和叶子节点)\n * '2' 表示只返回叶子节点\n * '3' 表示当叶子节点全选时,返回父节点,不返回下面的叶子节点\n *\n * 注意:checkStrictly = true,checkableType配置失效\n * ```\n */\n checkableType?: '1' | '2' | '3';\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n /**\n * 自定义搜索规则\n */\n customSearchRule?: (nodeData: TPlainObject, searchValue?: string) => boolean;\n\n /**\n * 点击父节点 是否切换折叠\n * ```\n * 1. 设置 titleRender 后,此配置失效\n * ```\n */\n clickParentNodeToggleExpand?: boolean;\n /**\n * 禁用节点选中\n * ```\n * 1. checkable = true,此配置失效\n * 2. 在未设置节点 disabled 属性情况下,满足此配置不会触发onChange事件\n * ```\n */\n disableNodeSelect?: (item: TPlainObject) => boolean;\n /**\n * 是否必选,最后一个不能取消\n * ```\n * 1. 设置 checkable = true 时无效\n * ```\n */\n required?: boolean;\n\n /**\n * 在第一次渲染value时,主动执行一次onChange\n * ```\n * 1. 设置labelInValue = true 时有效\n * 2. 不考虑子父节点的关系\n * ```\n */\n executeOnChangeInRenderFirstValue?: boolean;\n};\n\nconst compareArrays = (arr1, arr2) => {\n const sortedArr1 = arr1.slice().sort();\n const sortedArr2 = arr2.slice().sort();\n return JSON.stringify(sortedArr1) === JSON.stringify(sortedArr2);\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n getTreeTiledArray: () => TPlainObject[];\n getTreeTiledArrayMap: () => TPlainObject;\n /** 选择所有 */\n onSelectAll: () => void;\n /** 取消选择所有 */\n onCancelSelectAll: () => void;\n /** 展开所有 */\n onExpandedAll: () => void;\n /** 取消展开所有 */\n onCancelExpandedAll: () => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n customSearchRule,\n checkableType,\n clickParentNodeToggleExpand,\n disableNodeSelect,\n required,\n executeOnChangeInRenderFirstValue,\n ...otherProps\n } = props;\n // 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 searchTypeHighlight = searchResultType === 'highlight';\n const fieldNames = useMemo(() => {\n return {\n label: 'label',\n value: 'value',\n children: 'children',\n ...props.fieldNames,\n };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n const innerValueListRef = useRef<any[] | undefined>(undefined);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string | undefined>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (\n responseFirstRef.current &&\n labelInValue &&\n executeOnChangeInRenderFirstValue &&\n valueList.length > 0\n ) {\n const dataList: TPlainObject[] = [];\n const originalList: TPlainObject[] = [];\n valueList.forEach((item) => {\n const target = state.treeTiledArrayMap[item];\n if (target) {\n originalList.push(target);\n dataList.push({\n [labelInValueFieldNamesMerge.label]: target[fieldNames.label],\n [labelInValueFieldNamesMerge.value]: target[fieldNames.value],\n });\n }\n });\n if (checkable) {\n props.onChange?.(dataList ? dataList : undefined, originalList);\n } else {\n props.onChange?.(dataList ? dataList[0] : undefined, originalList[0]);\n }\n }\n if (responseFirstRef.current && isUndefinedOrNull(value)) {\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 responseFirstRef.current = false;\n if (innerValueListRef.current) {\n if (!compareArrays(valueList, innerValueListRef.current)) {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n } else {\n const innerExpandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(innerExpandedKeys))));\n }\n }\n }\n // 当 valueList 为空时,不去清除treeExpandedKeys数据\n }, [state.treeList, JSON.stringify(valueList)]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n let result: TPlainObject[] = respData;\n if (newServiceConfig.onRequestResultAdapter) {\n result = newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n } else if (fieldNames.list) {\n result = get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(result)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return result;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus({\n status: 'no-dependencies-params',\n });\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus({\n status: 'request-progress',\n });\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respDataListNew = serviceResponseHandle(_respData);\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error: TAny) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus({\n status: 'request-error',\n errorMessage: error.message,\n });\n }\n } catch (error: TAny) {\n responseFirstRef.current = false;\n setLoading(false);\n void message.error((error.message as string) || '数据查询异常...');\n }\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasSelectorTreeList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (newEffectDependencyList.length) {\n void startDataSourceRequest();\n return;\n }\n const allState = treeWrapperModel(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 valueName: fieldNames.value,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n if (customSearchRule) {\n return customSearchRule(item, treeSearchValue);\n }\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n const treeExpandedKeysNew = getTreeExpandedKeys(\n targetList.map((item) => item[fieldNames.value]),\n true,\n );\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeysNew)));\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n getTreeTiledArray: () => state.treeTiledArray,\n getTreeTiledArrayMap: () => state.treeTiledArrayMap,\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n onSelectAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n onChange?.(targetList, undefined, state.treeList, undefined);\n },\n onCancelSelectAll: () => {\n setTreeExpandedKeys([]);\n onChange?.(undefined);\n },\n onExpandedAll: () => {\n const targetList = state.treeTiledArray.map((temp) => temp[fieldNames.value]);\n setTreeExpandedKeys(targetList);\n },\n onCancelExpandedAll: () => {\n setTreeExpandedKeys([]);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onInnerChange = (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n operateInfo?: TPlainObject,\n ) => {\n innerValueListRef.current = toArray(selectedKey);\n if (toArray(selectedKey).length === 0) {\n const nodeValue = operateInfo?.node[fieldNames.value];\n const target = state.treeTiledArrayMap[nodeValue];\n props.onChange?.(undefined, target, [target], operateInfo);\n } else {\n props.onChange?.(selectedKey, operateNodeData, operateAllNodeDataList, operateInfo);\n }\n };\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n // 最终checkValueList\n let finalCheckedValueList: Array<number | string> = [];\n // 完整checkValueList\n let completeCheckedValueList: Array<number | string> = [];\n\n if (checkable) {\n finalCheckedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n } else {\n finalCheckedValueList = checkedData;\n if (required && !toArray(checkedData).length) {\n return;\n }\n if (disableNodeSelect) {\n const target = state.treeTiledArrayMap[checkedData[0]];\n const x = target ? disableNodeSelect(target) : false;\n if (x) {\n return;\n }\n }\n }\n finalCheckedValueList = toArray(finalCheckedValueList);\n\n if (!checkable) {\n completeCheckedValueList = finalCheckedValueList;\n } else {\n if (showSearch && treeSearchValue && !searchTypeHighlight) {\n // 数据源被过滤情况\n const operateNode = operateInfo?.node;\n if (props.checkStrictly) {\n if (operateInfo.checked == false) {\n finalCheckedValueList = valueList.filter((item) => item != operateNode[fieldNames.value]);\n } else {\n finalCheckedValueList = Array.from(new Set([...valueList, ...finalCheckedValueList]));\n }\n completeCheckedValueList = finalCheckedValueList;\n } else {\n // 非checkStrictly=true情况\n const propsCompleteValues =\n checkableType === '2' || checkableType === '3'\n ? completionParentChildrenNode(\n valueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n )\n : valueList;\n if (operateInfo.checked == false) {\n finalCheckedValueList = removeTargetNodeAndAllChildrenNode(\n [...propsCompleteValues],\n operateNode,\n fieldNames.children,\n fieldNames.value,\n );\n } else {\n finalCheckedValueList = Array.from(new Set([...propsCompleteValues, ...finalCheckedValueList]));\n }\n completeCheckedValueList = getActualSelectKeyList(\n finalCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n }\n } else {\n // 无搜索情况\n completeCheckedValueList = finalCheckedValueList;\n }\n\n if (!props.checkStrictly) {\n if (checkableType === '2') {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else if (checkableType === '3') {\n finalCheckedValueList = removeAllSelectLeafNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n fieldNames.value,\n );\n } else if (checkableResponseParentNode == false) {\n finalCheckedValueList = removeAllParentNode(\n completeCheckedValueList,\n state.treeTiledArrayMap,\n fieldNames.children,\n );\n } else {\n finalCheckedValueList = completeCheckedValueList;\n }\n }\n }\n\n const completeCheckedItemList = completeCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n });\n if (labelInValue) {\n const lvValue = labelInValueFieldNamesMerge.value;\n const lvLabel = labelInValueFieldNamesMerge.label;\n const finalCheckedList = finalCheckedValueList.map((item) => {\n return {\n [lvLabel]: state.treeTiledArrayMap[item][fieldNames.label],\n [lvValue]: state.treeTiledArrayMap[item][fieldNames.value],\n };\n });\n if (checkable) {\n onInnerChange(\n finalCheckedList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n } else {\n if (checkable) {\n onInnerChange(\n finalCheckedValueList,\n finalCheckedValueList.map((item) => {\n return state.treeTiledArrayMap[item];\n }),\n completeCheckedItemList,\n operateInfo,\n );\n } else {\n onInnerChange(\n finalCheckedValueList[0],\n state.treeTiledArrayMap[finalCheckedValueList[0]],\n completeCheckedItemList,\n operateInfo,\n );\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n const resultList = treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n if (customSearchRule) {\n return customSearchRule(node, treeSearchValue);\n }\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n return resultList;\n }\n return list;\n }, [\n customSearchRule,\n fieldNames.children,\n fieldNames.label,\n searchResultType,\n state.treeList,\n treeSearchValue,\n ]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] || '') as string;\n let titleDom;\n if (treeSearchValue && isString(strTitle)) {\n const strTitleNew = strTitle?.toLowerCase();\n const index = strTitleNew.indexOf(treeSearchValue.toLowerCase());\n const beforeStr = strTitle.substring(0, index);\n const afterStr = strTitle.slice(index + treeSearchValue.length);\n const centerStr = strTitle.slice(index, index + treeSearchValue.length);\n titleDom =\n index > -1 ? (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {beforeStr}\n <span className=\"site-tree-search-value\">{centerStr}</span>\n {afterStr}\n </span>\n ) : null;\n }\n if (!titleDom && adapterItem.disabled) {\n titleDom = (\n <span\n className={classNames({\n 'v-tree-item-disabled': adapterItem.disabled,\n })}\n >\n {strTitle}\n </span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || strTitle,\n _treeItemName: strTitle,\n _disabled: adapterItem.disabled,\n [fieldNames.children]: isArray(children) && children.length > 0 ? loop(children) : undefined,\n };\n });\n return loop(originalDataList);\n }, [\n originalDataList,\n treeItemDataAdapterHandle,\n disabledCanUse,\n fieldNames.label,\n fieldNames.children,\n treeSearchValue,\n ]);\n const loadData = hooks.useCallbackRef((dataItem: TPlainObject) => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<void>(async (resolve, reject) => {\n if (dataItem[fieldNames.children]) {\n resolve();\n return;\n }\n try {\n const respData = await props.loadDataServiceConfig?.onRequest?.(\n props.loadDataServiceConfig?.getParams?.(dataItem) || {},\n );\n const respDataList = (\n props.loadDataServiceConfig?.onRequestResultAdapter\n ? props.loadDataServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\" data-value={nodeData[fieldNames.value]}>\n {labelRender?.(nodeData) || nodeData?.[fieldNames.label]}\n </span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return {\n title: fieldNames.label,\n key: fieldNames.value,\n children: fieldNames.children,\n };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList, fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n onClick: (e) => {\n if (clickParentNodeToggleExpand) {\n let targetEle = e.target;\n let value = targetEle.dataset.value;\n if (isUndefinedOrNull(value)) {\n targetEle = dom.findParentsElement(e.target, (node: Element) => {\n return (\n node.classList?.contains('tree-item-title') || node.classList?.contains('ant-tree-treenode')\n );\n });\n value = targetEle.dataset.value;\n }\n if (!isUndefinedOrNull(value)) {\n const target = state.treeTiledArrayMap[value];\n if (target?.[fieldNames.children] && target[fieldNames.children].length > 0) {\n const treeExpandedTarget = treeExpandedKeys.includes(value);\n if (treeExpandedTarget) {\n const newList = array.arrayRemove(treeExpandedKeys, value);\n setTreeExpandedKeys([...newList]);\n } else {\n setTreeExpandedKeys([...treeExpandedKeys, value]);\n }\n }\n }\n }\n },\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={treeSearchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n 'request-error': state.requestErrorMessage,\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n","import type { TPlainObject } from '@flatbiz/utils';\nimport { attachPropertiesToComponent } from '@flatbiz/utils';\nimport type { ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { getTreeDataList } from './hooks';\nimport type { TreeWrapperProps, TreeWrapperRefApi } from './tree-wrapper';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type { TreeServiceConfig, TreeWrapperProps } from './tree-wrapper';\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper: ForwardRefExoticComponent<TreeWrapperProps & RefAttributes<TreeWrapperRefApi>> & {\n getTreeDataList: (modelKey: string) => TPlainObject[];\n} = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","treeTiledArrayMap","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","arrayToMap","valueName","requestStatus","resetTreeList","changeRequestStatus","status","requestErrorMessage","errorMessage","undefined","treeListAppendChildren","tiledArray","target","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","item","childrenValue","map","getExpandedKeys","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","_parent","tileList","find","parentId","getActualSelectKeyList","checkedValueList","chidlrenKey","valueKey","leafValueDataMap","hasChildrenList","retainHasChildrenValueList","forEach","_treeTiledArrayMap$it","isNotEmptyArray","push","childrenTiledList","Object","keys","targetList","temp","removeTargetNodeAndAllChildrenNode","awitDeleteNode","awitDeleteTieldDataMap","treeToTiledMap","removeAllSelectLeafNode","awitDeleteCheckedValueMap","_treeTiledArrayMap$it2","childrenList","targetMap","_extends","removeAllParentNode","completionParentChildrenNode","values","concat","_treeTiledArrayMap$it3","Array","from","Set","compareArrays","arr1","arr2","sortedArr1","slice","sort","sortedArr2","JSON","stringify","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","customSearchRule","checkableType","clickParentNodeToggleExpand","disableNodeSelect","required","executeOnChangeInRenderFirstValue","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","searchTypeHighlight","useMemo","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","innerValueListRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","valueList","useEffectCustom","current","originalList","_dataList$push","innerExpandedKeys","getTreeExpandedKeys","valueIsEmpty","serviceResponseHandle","respData","result","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","includes","targetKeys","useUpdateEffect","labelValue","String","toLowerCase","treeExpandedKeysNew","useImperativeHandle","onClearSelectorList","getTreeTiledArray","getTreeTiledArrayMap","onChangeExpandedKeys","onSelectAll","onCancelSelectAll","onExpandedAll","onCancelExpandedAll","onExpand","expandedKeys","onInnerChange","selectedKey","operateNodeData","operateAllNodeDataList","operateInfo","toArray","nodeValue","onTreeChangeHandle","checkedData","finalCheckedValueList","completeCheckedValueList","checkStrictly","checked","x","operateNode","propsCompleteValues","completeCheckedItemList","lvValue","lvLabel","finalCheckedList","_ref","treeItemDataAdapterHandle","dataItem","originalDataList","resultList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_extends2","adapterItem","disabled","strTitle","titleDom","_isString","strTitleNew","beforeStr","substring","afterStr","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_props$loadDataServic3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","onClick","targetEle","dataset","dom","findParentsElement","_node$classList","_node$classList2","classList","contains","treeExpandedTarget","newList","_array","arrayRemove","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","messageConfig","errorButton","Button","type","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -4186,6 +4186,8 @@ export type TLabelValueItem = {
|
|
|
4186
4186
|
hideTip?: boolean;
|
|
4187
4187
|
/** value 渲染不使用 TextOverflow 包裹 */
|
|
4188
4188
|
valueNoWrapper?: boolean;
|
|
4189
|
+
labelStyle?: CSSProperties;
|
|
4190
|
+
valueStyle?: CSSProperties;
|
|
4189
4191
|
};
|
|
4190
4192
|
export type LabelValueRenderProps = {
|
|
4191
4193
|
className?: string;
|
|
@@ -6231,11 +6233,21 @@ export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "select
|
|
|
6231
6233
|
* ```
|
|
6232
6234
|
*/
|
|
6233
6235
|
required?: boolean;
|
|
6236
|
+
/**
|
|
6237
|
+
* 在第一次渲染value时,主动执行一次onChange
|
|
6238
|
+
* ```
|
|
6239
|
+
* 1. 设置labelInValue = true 时有效
|
|
6240
|
+
* 2. 不考虑子父节点的关系
|
|
6241
|
+
* ```
|
|
6242
|
+
*/
|
|
6243
|
+
executeOnChangeInRenderFirstValue?: boolean;
|
|
6234
6244
|
};
|
|
6235
6245
|
export type TreeWrapperRefApi = {
|
|
6236
6246
|
onClearSelectorList: () => void;
|
|
6237
6247
|
getTreeDataList: () => TreeProps["treeData"];
|
|
6238
6248
|
onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;
|
|
6249
|
+
getTreeTiledArray: () => TPlainObject[];
|
|
6250
|
+
getTreeTiledArrayMap: () => TPlainObject;
|
|
6239
6251
|
/** 选择所有 */
|
|
6240
6252
|
onSelectAll: () => void;
|
|
6241
6253
|
/** 取消选择所有 */
|
|
@@ -6318,6 +6330,10 @@ export type TreeModalSelectorProps = Omit<TreeModalProps, "children" | "forceRen
|
|
|
6318
6330
|
/** 是否返回label+value模式 */
|
|
6319
6331
|
labelInValue?: boolean;
|
|
6320
6332
|
onChange?: (values?: TreeModelSelectItem[] | TreeModelSelectItem) => void;
|
|
6333
|
+
/** 最大选择数量 */
|
|
6334
|
+
maxCount?: number;
|
|
6335
|
+
/** 超过最大选择数量提示文本 */
|
|
6336
|
+
overMaxCountMsg?: string;
|
|
6321
6337
|
};
|
|
6322
6338
|
/**
|
|
6323
6339
|
* 树弹框选择器
|
|
@@ -6436,6 +6452,14 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
|
|
|
6436
6452
|
selectedParentCheckedAllChildrenList?: boolean;
|
|
6437
6453
|
/** 有唯一跟节点时,初始化是否展开,默认值:false */
|
|
6438
6454
|
initRootExpand?: boolean;
|
|
6455
|
+
/**
|
|
6456
|
+
* 在第一次渲染value时,主动执行一次onChange
|
|
6457
|
+
* ```
|
|
6458
|
+
* 1. 设置labelInValue = true 时有效
|
|
6459
|
+
* 2. 不考虑子父节点的关系
|
|
6460
|
+
* ```
|
|
6461
|
+
*/
|
|
6462
|
+
executeOnChangeInRenderFirstValue?: boolean;
|
|
6439
6463
|
};
|
|
6440
6464
|
/**
|
|
6441
6465
|
* 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现
|