@flatbiz/antd 4.2.86 → 4.2.87
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/fba-hooks/index.js +1 -1
- package/esm/fba-hooks/index.js.map +1 -1
- package/esm/flex-layout/index.js.map +1 -1
- package/esm/pre-defined-class-name/index.css +1 -1
- package/esm/rich-text-editor/index.js +1 -1
- package/esm/rich-text-editor/index.js.map +1 -1
- package/esm/rule-describe/index.js +1 -1
- package/esm/rule-describe/index.js.map +1 -1
- package/esm/text-css-ellipsis/index.css +1 -1
- package/esm/text-css-ellipsis/index.js +1 -1
- package/esm/text-css-ellipsis/index.js.map +1 -1
- package/esm/tree-selector-wrapper/index.js.map +1 -1
- package/esm/tree-wrapper/index.css +1 -1
- package/esm/tree-wrapper/index.js +1 -1
- package/esm/tree-wrapper/index.js.map +1 -1
- package/index.d.ts +64 -16
- package/package.json +1 -1
package/esm/fba-hooks/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
import './index.css';
|
|
3
3
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
4
|
-
import{_ as r}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{isArray as e}from"@dimjs/lang/cjs/is-array";import{hooks as n}from"@wove/react/cjs/hooks";import{useRef as t,useEffect as u,useState as c}from"react";import{u as
|
|
4
|
+
import{_ as r}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{isArray as e}from"@dimjs/lang/cjs/is-array";import{hooks as n}from"@wove/react/cjs/hooks";import{useRef as t,useEffect as u,useMemo as o,useState as c}from"react";import{u as a}from"../use-responsive-point-21b8c601.js";import{theme as i}from"antd";var s=function u(o,c){if(c===void 0){c=true}var a=t(o);var i=n.useForceUpdate();var s={add:n.useCallbackRef((function(r,n){if(n){var t=e(r)?r:[r];a.current=[].concat(t,a.current)}else{a.current=a.current.concat(r)}c&&i()})),update:n.useCallbackRef((function(e,n){var t=a.current[e];if(t){a.current[e]=r({},t,n)}c&&i()})),delete:n.useCallbackRef((function(r){var e=a.current.splice(r,1);c&&i();return e})),resetList:n.useCallbackRef((function(r){a.current=r;c&&i()})),getList:n.useCallbackRef((function(){return a.current}))};return[a.current,s]};var f=function r(e,n){return u(e,n)};var v=function r(e,n){u((function(){function r(){return new Promise((function(r,n){return Promise.resolve(e()).then((function(e){try{return r()}catch(r){return n(r)}}),n)}))}void r()}),n)};var l=function r(e,n){return o(e,n)};var m=function r(e,n){return!Object.is(e,n)};function p(r,e){if(e===void 0){e=m}var n=t();var u=t();if(e(u.current,r)){n.current=u.current;u.current=r}return n.current}var d=function r(e){var t=c(e),u=t[0],o=t[1];var a=n.useIsMounted();return[u,function(r){if(a.current){return o(r)}}]};var k=function r(){var e=i.useToken(),n=e.token;return n};var C={useEffectCustom:f,useEffectCustomAsync:v,useThemeToken:k,useArrayChange:s,usePrevious:p,useResponsivePoint:a,useSafeState:d,useMemoCustom:l};export{C as fbaHooks};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/fba-hooks/use-array-change.ts","@flatbiz/antd/src/fba-hooks/use-effect-custom.ts","@flatbiz/antd/src/fba-hooks/use-effect-custom-async.ts","@flatbiz/antd/src/fba-hooks/use-previous.ts","@flatbiz/antd/src/fba-hooks/use-safe-state.ts","@flatbiz/antd/src/fba-hooks/use-theme.ts","@flatbiz/antd/src/fba-hooks/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(defautDataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(defautDataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { useArrayChange } from './use-array-change';\nimport { useEffectCustom } from './use-effect-custom';\nimport { useEffectCustomAsync } from './use-effect-custom-async';\nimport { usePrevious } from './use-previous';\nimport { useResponsivePoint } from './use-responsive-point';\nimport { useSafeState } from './use-safe-state';\nimport { useThemeToken } from './use-theme';\n\nexport const fbaHooks = {\n useEffectCustom: useEffectCustom,\n useEffectCustomAsync: useEffectCustomAsync,\n useThemeToken: useThemeToken,\n useArrayChange: useArrayChange,\n usePrevious: usePrevious,\n useResponsivePoint: useResponsivePoint,\n useSafeState: useSafeState,\n};\n"],"names":["useArrayChange","defautDataList","forceUpdate","changeListRef","useRef","update","_hooks","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","_isArray","current","concat","index","target","_extends","delete","deleteItem","splice","resetList","dataList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","resolve","then","$await_1","$boundEx","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","_useState","useState","setState","isMounted","useIsMounted","value","useThemeToken","_theme$useToken","theme","useToken","token","fbaHooks","useResponsivePoint"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/fba-hooks/use-array-change.ts","@flatbiz/antd/src/fba-hooks/use-effect-custom.ts","@flatbiz/antd/src/fba-hooks/use-effect-custom-async.ts","@flatbiz/antd/src/fba-hooks/use-memo-custom.ts","@flatbiz/antd/src/fba-hooks/use-previous.ts","@flatbiz/antd/src/fba-hooks/use-safe-state.ts","@flatbiz/antd/src/fba-hooks/use-theme.ts","@flatbiz/antd/src/fba-hooks/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { hooks } from '@wove/react';\nimport { useRef } from 'react';\n\nexport const useArrayChange = <T>(defautDataList: Array<T>, forceUpdate = true) => {\n const changeListRef = useRef<Array<T>>(defautDataList);\n const update = hooks.useForceUpdate();\n const arrayOperate = {\n add: hooks.useCallbackRef((dataItem: T | Array<T>, isUnshift?: boolean) => {\n if (isUnshift) {\n const targetList = isArray(dataItem) ? dataItem : [dataItem];\n changeListRef.current = [...targetList, ...changeListRef.current];\n } else {\n changeListRef.current = changeListRef.current.concat(dataItem);\n }\n forceUpdate && update();\n }),\n update: hooks.useCallbackRef((index: number, dataItem: T) => {\n const target = changeListRef.current[index];\n if (target) {\n changeListRef.current[index] = { ...target, ...dataItem };\n }\n forceUpdate && update();\n }),\n delete: hooks.useCallbackRef((index: number) => {\n const deleteItem = changeListRef.current.splice(index, 1);\n forceUpdate && update();\n return deleteItem;\n }),\n resetList: hooks.useCallbackRef((dataList: Array<T>) => {\n changeListRef.current = dataList;\n forceUpdate && update();\n }),\n getList: hooks.useCallbackRef(() => {\n return changeListRef.current;\n }),\n };\n return [changeListRef.current, arrayOperate] as const;\n};\n","import { DependencyList, EffectCallback, useEffect } from 'react';\n\nexport const useEffectCustom = (fn: EffectCallback, deps: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useEffect(fn, deps);\n};\n","import { DependencyList, useEffect } from 'react';\n\nexport const useEffectCustomAsync = (fn: () => Promise<void>, deps: DependencyList) => {\n useEffect(() => {\n async function asyncFunction() {\n await fn();\n }\n void asyncFunction();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n","import { DependencyList, useMemo } from 'react';\n/**\n * 自定义控制 useMemo 依赖\n */\nexport const useMemoCustom = <T>(fn: () => T, deps?: DependencyList) => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo<T>(fn, deps);\n};\n","import { useRef } from 'react';\n\nexport type ShouldUpdateFunc<T> = (prev: T | undefined, next: T) => boolean;\n\nconst defaultShouldUpdate = <T>(a?: T, b?: T) => !Object.is(a, b);\n\nexport function usePrevious<T>(\n state: T,\n shouldUpdate: ShouldUpdateFunc<T> = defaultShouldUpdate,\n): T | undefined {\n const prevRef = useRef<T>();\n const curRef = useRef<T>();\n\n if (shouldUpdate(curRef.current, state)) {\n prevRef.current = curRef.current;\n curRef.current = state;\n }\n\n return prevRef.current;\n}\n","import { hooks } from '@wove/react';\nimport { Dispatch, SetStateAction, useState } from 'react';\n\nexport const useSafeState = <S extends undefined | unknown>(\n initialState?: S | (() => S),\n): [S, Dispatch<SetStateAction<S>>] => {\n const [state, setState] = useState(initialState as S);\n const isMounted = hooks.useIsMounted();\n\n return [\n state,\n (value) => {\n if (isMounted.current) {\n return setState(value);\n }\n },\n ];\n};\n","import { theme } from 'antd';\n\nexport const useThemeToken = () => {\n const { token } = theme.useToken();\n return token;\n};\n","import { useArrayChange } from './use-array-change';\nimport { useEffectCustom } from './use-effect-custom';\nimport { useEffectCustomAsync } from './use-effect-custom-async';\nimport { useMemoCustom } from './use-memo-custom';\nimport { usePrevious } from './use-previous';\nimport { useResponsivePoint } from './use-responsive-point';\nimport { useSafeState } from './use-safe-state';\nimport { useThemeToken } from './use-theme';\n\nexport const fbaHooks = {\n useEffectCustom: useEffectCustom,\n useEffectCustomAsync: useEffectCustomAsync,\n useThemeToken: useThemeToken,\n useArrayChange: useArrayChange,\n usePrevious: usePrevious,\n useResponsivePoint: useResponsivePoint,\n useSafeState: useSafeState,\n useMemoCustom: useMemoCustom,\n};\n"],"names":["useArrayChange","defautDataList","forceUpdate","changeListRef","useRef","update","_hooks","useForceUpdate","arrayOperate","add","useCallbackRef","dataItem","isUnshift","targetList","_isArray","current","concat","index","target","_extends","delete","deleteItem","splice","resetList","dataList","getList","useEffectCustom","fn","deps","useEffect","useEffectCustomAsync","asyncFunction","Promise","$return","$error","resolve","then","$await_1","$boundEx","useMemoCustom","useMemo","defaultShouldUpdate","a","b","Object","is","usePrevious","state","shouldUpdate","prevRef","curRef","useSafeState","initialState","_useState","useState","setState","isMounted","useIsMounted","value","useThemeToken","_theme$useToken","theme","useToken","token","fbaHooks","useResponsivePoint"],"mappings":";4TAIO,IAAMA,EAAiB,SAAjBA,EAAqBC,EAA0BC,GAAuB,GAAvBA,SAAW,EAAA,CAAXA,EAAc,IAAI,CAC5E,IAAMC,EAAgBC,EAAiBH,GACvC,IAAMI,EAASC,EAAMC,iBACrB,IAAMC,EAAe,CACnBC,IAAKH,EAAMI,gBAAe,SAACC,EAAwBC,GACjD,GAAIA,EAAW,CACb,IAAMC,EAAaC,EAAQH,GAAYA,EAAW,CAACA,GACnDR,EAAcY,QAAO,GAAAC,OAAOH,EAAeV,EAAcY,QAC3D,KAAO,CACLZ,EAAcY,QAAUZ,EAAcY,QAAQC,OAAOL,EACvD,CACAT,GAAeG,GACjB,IACAA,OAAQC,EAAMI,gBAAe,SAACO,EAAeN,GAC3C,IAAMO,EAASf,EAAcY,QAAQE,GACrC,GAAIC,EAAQ,CACVf,EAAcY,QAAQE,GAAME,EAAQD,GAAAA,EAAWP,EACjD,CACAT,GAAeG,GACjB,IACAe,OAAQd,EAAMI,gBAAe,SAACO,GAC5B,IAAMI,EAAalB,EAAcY,QAAQO,OAAOL,EAAO,GACvDf,GAAeG,IACf,OAAOgB,CACT,IACAE,UAAWjB,EAAMI,gBAAe,SAACc,GAC/BrB,EAAcY,QAAUS,EACxBtB,GAAeG,GACjB,IACAoB,QAASnB,EAAMI,gBAAe,WAC5B,OAAOP,EAAcY,YAGzB,MAAO,CAACZ,EAAcY,QAASP,EACjC,ECpCO,IAAMkB,EAAkB,SAAlBA,EAAmBC,EAAoBC,GAElD,OAAOC,EAAUF,EAAIC,EACvB,ECHO,IAAME,EAAuB,SAAvBA,EAAwBH,EAAyBC,GAC5DC,GAAU,WACR,SAAeE,IAAf,OAAA,IAAAC,SAAA,SAAAC,EAAAC,GACE,OAAAF,QAAAG,QAAMR,KAANS,MAAU,SAAAC,GALhB,IAAI,OAAAJ,GAAK,CAAC,MAAAK,GAAW,OAAOJ,EAAAI,EAAM,CAAC,GAAAJ,EAKnB,GACX,MACIH,GAEN,GAAEH,EACL,ECNO,IAAMW,EAAgB,SAAhBA,EAAoBZ,EAAaC,GAE5C,OAAOY,EAAWb,EAAIC,EACxB,ECHA,IAAMa,EAAsB,SAAtBA,EAA0BC,EAAOC,GAAK,OAAMC,OAAOC,GAAGH,EAAGC,EAAE,EAE1D,SAASG,EACdC,EACAC,GACe,GADfA,SAAiC,EAAA,CAAjCA,EAAoCP,CAAmB,CAEvD,IAAMQ,EAAU7C,IAChB,IAAM8C,EAAS9C,IAEf,GAAI4C,EAAaE,EAAOnC,QAASgC,GAAQ,CACvCE,EAAQlC,QAAUmC,EAAOnC,QACzBmC,EAAOnC,QAAUgC,CACnB,CAEA,OAAOE,EAAQlC,OACjB,CChBO,IAAMoC,EAAe,SAAfA,EACXC,GAEA,IAAAC,EAA0BC,EAASF,GAA5BL,EAAKM,EAAA,GAAEE,EAAQF,EAAA,GACtB,IAAMG,EAAYlD,EAAMmD,eAExB,MAAO,CACLV,EACA,SAACW,GACC,GAAIF,EAAUzC,QAAS,CACrB,OAAOwC,EAASG,EAClB,CACF,EAEJ,ECfO,IAAMC,EAAgB,SAAhBA,IACX,IAAAC,EAAkBC,EAAMC,WAAhBC,EAAKH,EAALG,MACR,OAAOA,CACT,ECIO,IAAMC,EAAW,CACtBtC,gBAAiBA,EACjBI,qBAAsBA,EACtB6B,cAAeA,EACf3D,eAAgBA,EAChB8C,YAAaA,EACbmB,mBAAoBA,EACpBd,aAAcA,EACdZ,cAAeA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/flex-layout/flex-layout.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n fullIndex
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/flex-layout/flex-layout.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { Children, cloneElement, CSSProperties, ReactElement, ReactNode } from 'react';\nimport './style.less';\n\nexport type FlexLayoutProps = {\n className?: string;\n /** 子组件铺满的索引值,从0开始 */\n fullIndex: number | number[];\n /**方向,默认值vertical */\n direction?: 'vertical' | 'horizontal';\n onClick?: () => void;\n style?: CSSProperties;\n /** 间隙尺寸 */\n gap?: number;\n children?: ReactNode | null | Array<ReactNode | null>;\n};\n/**\n * flex布局,主要用于Flex结构性布局\n * ```\n * 4.2.87版本中将fullIndex改为了必填属性,如果在升级中遇到问题,不确定怎么写,可设置 fullIndex=[] 保持原样\n * ```\n */\nexport const FlexLayout = (props: FlexLayoutProps) => {\n const childrens = Children.toArray(props.children) as ReactElement[];\n const direction = props.direction || 'vertical';\n const gap = props.gap ? props.gap : 0;\n const fullIndexList = toArray<number>(props.fullIndex);\n\n return (\n <div\n className={classNames('v-flex-layout', `v-flex-${direction}`, props.className)}\n style={props.style}\n onClick={props.onClick}\n >\n {childrens.map((children, index) => {\n const childrenStyle = children.props?.style || {};\n const style = fullIndexList.includes(index)\n ? { flex: 1, ...childrenStyle }\n : { flexShrink: 0, ...childrenStyle };\n if (index < childrens.length - 1 && gap > 0) {\n if (direction === 'horizontal') {\n style.marginRight = gap;\n } else {\n style.marginBottom = gap;\n }\n }\n return cloneElement(children, { style, key: index });\n })}\n </div>\n );\n};\n"],"names":["FlexLayout","props","childrens","Children","toArray","children","direction","gap","fullIndexList","fullIndex","_jsx","className","_classNames","style","onClick","map","index","_children$props","childrenStyle","includes","_extends","flex","flexShrink","length","marginRight","marginBottom","cloneElement","key"],"mappings":";+PAuBaA,EAAa,SAAbA,EAAcC,GACzB,IAAMC,EAAYC,EAASC,QAAQH,EAAMI,UACzC,IAAMC,EAAYL,EAAMK,WAAa,WACrC,IAAMC,EAAMN,EAAMM,IAAMN,EAAMM,IAAM,EACpC,IAAMC,EAAgBJ,EAAgBH,EAAMQ,WAE5C,OACEC,EAAA,MAAA,CACEC,UAAWC,EAAW,gBAAe,UAAYN,EAAaL,EAAMU,WACpEE,MAAOZ,EAAMY,MACbC,QAASb,EAAMa,QAAQT,SAEtBH,EAAUa,KAAI,SAACV,EAAUW,GAAU,IAAAC,EAClC,IAAMC,IAAgBD,EAAAZ,EAASJ,QAAK,UAAA,EAAdgB,EAAgBJ,QAAS,CAAA,EAC/C,IAAMA,EAAQL,EAAcW,SAASH,GAAMI,EAAA,CACrCC,KAAM,GAAMH,GAAaE,EAAA,CACzBE,WAAY,GAAMJ,GACxB,GAAIF,EAAQd,EAAUqB,OAAS,GAAKhB,EAAM,EAAG,CAC3C,GAAID,IAAc,aAAc,CAC9BO,EAAMW,YAAcjB,CACtB,KAAO,CACLM,EAAMY,aAAelB,CACvB,CACF,CACA,OAAOmB,EAAarB,EAAU,CAAEQ,MAAAA,EAAOc,IAAKX,QAIpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.form-item-label-70.ant-form-item .ant-form-item-label{width:70px
|
|
1
|
+
.form-item-label-70.ant-form-item .ant-form-item-label{width:70px}.form-item-label-80.ant-form-item .ant-form-item-label{width:80px}.form-item-label-90.ant-form-item .ant-form-item-label{width:90px}.form-item-label-100.ant-form-item .ant-form-item-label{width:100px}.form-item-label-110.ant-form-item .ant-form-item-label{width:110px}.form-item-label-120.ant-form-item .ant-form-item-label{width:120px}.form-item-label-130.ant-form-item .ant-form-item-label{width:130px}.form-item-label-140.ant-form-item .ant-form-item-label{width:140px}.form-item-label-150.ant-form-item .ant-form-item-label{width:150px}.form-item-label-160.ant-form-item .ant-form-item-label{width:160px}.form-item-label-170.ant-form-item .ant-form-item-label{width:170px}.form-item-label-180.ant-form-item .ant-form-item-label{width:180px}.form-item-label-190.ant-form-item .ant-form-item-label{width:190px}.form-item-label-200.ant-form-item .ant-form-item-label{width:200px}.form-item-label-auto.ant-form-item .ant-form-item-label{width:auto}.form-item-label-align-left .ant-form-item-label{text-align:left}.form-item-label-align-right .ant-form-item-label{text-align:right}.ant-form-item.form-item-label-value-vertical>.ant-form-item-row{flex-direction:column}.ant-form-item.form-item-label-value-vertical>.ant-form-item-row>.ant-form-item-label{text-align:left;width:100%!important}.ant-form-item.form-item-label-value-vertical>.ant-form-item-row>.ant-form-item-control{flex:initial}.form-label-70 .ant-form-item-label{width:70px}.form-label-80 .ant-form-item-label{width:80px}.form-label-90 .ant-form-item-label{width:90px}.form-label-100 .ant-form-item-label{width:100px}.form-label-110 .ant-form-item-label{width:110px}.form-label-120 .ant-form-item-label{width:120px}.form-label-130 .ant-form-item-label{width:130px}.form-label-140 .ant-form-item-label{width:140px}.form-label-150 .ant-form-item-label{width:150px}.form-label-160 .ant-form-item-label{width:160px}.form-label-170 .ant-form-item-label{width:170px}.form-label-180 .ant-form-item-label{width:180px}.form-label-190 .ant-form-item-label{width:190px}.form-label-200 .ant-form-item-label{width:200px}.form-label-auto .ant-form-item-label{width:auto}.form-label-align-left .ant-form-item-label{text-align:left}.form-label-align-right .ant-form-item-label{text-align:right}.form-label-value-vertical .ant-form-item .ant-form-item-row{flex-direction:column}.form-label-value-vertical .ant-form-item .ant-form-item-label{text-align:left;width:100%}.form-label-value-vertical .ant-form-item .ant-form-item-control{flex:initial}.form-formitem-gap-15{margin-bottom:-15px}.form-formitem-gap-15 .ant-form-item{margin-bottom:15px}.form-formitem-gap-8{margin-bottom:-8px}.form-formitem-gap-8 .ant-form-item{margin-bottom:8px}.form-formitem-gap-5{margin-bottom:-5px}.form-formitem-gap-5 .ant-form-item{margin-bottom:5px}.form-formitem-gap-0,.form-formitem-gap-0 .ant-form-item{margin-bottom:0}
|
|
@@ -3,5 +3,5 @@ import './../dynamic-node/index.css';
|
|
|
3
3
|
import './../fba-hooks/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import{a as e,_ as n}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{Editor as i}from"@tinymce/tinymce-react";import{useKeyPress as o}from"ahooks";import{Fragment as a,useRef as l,useState as s}from"react";import c from"@ant-design/icons/es/icons/PlusCircleOutlined";import{Image as
|
|
6
|
+
import{a as e,_ as n}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{Editor as i}from"@tinymce/tinymce-react";import{useKeyPress as o}from"ahooks";import{Fragment as a,useRef as l,useState as s}from"react";import c from"@ant-design/icons/es/icons/PlusCircleOutlined";import{Image as u}from"antd";import{dynamicNode as m}from"../dynamic-node/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{jsx as p,Fragment as f,jsxs as v}from"react/jsx-runtime";import"react-dom/client";import"../dom-4d04aa64.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";var g=function e(n){var t=n.visible,r=n.url;d.useEffectCustom((function(){if(t){m.append({content:p(c,{onClick:n.close,className:"preview-image-popup-close",twoToneColor:"#1890ff"})})}else{m.remove()}}),[t]);if(!r)return p(f,{});return p(a,{children:p(u,{style:{left:"100px"},preview:{className:"preview-image-popup",maskStyle:{backgroundColor:"rgba(0,0,0,0.85)"},visible:t,src:r,onVisibleChange:function e(){n.close()}}},r)})};var h=["onUploadImage","onChange","className"];var y=function a(c){var u,m,d,f;var y=c.onUploadImage,b=c.onChange,C=c.className,k=e(c,h);var x=l(null);var w=s(""),_=w[0],j=w[1];var E=((u=c.init)==null?void 0:u.img_ratio)||[{min:0,max:1e3,ratio:.5},{min:1e3,ratio:.3}];o((function(){return true}),(function(e){try{if(e.type==="keyup"&&e.key==="Escape"){var n;var t=(n=x.current)==null?void 0:n.editorContainer.classList.contains("tox-fullscreen");if(t){var r;(r=x.current)==null?void 0:r.editorCommands.execCommand("mceFullScreen")}}}catch(e){}}),{events:["keydown","keyup"]});var I=r.useCallbackRef((function(e,n){try{if(e.keyCode==27){var t;var r=(t=x.current)==null?void 0:t.editorContainer.classList.contains("tox-fullscreen");if(r){var i;(i=x.current)==null?void 0:i.editorCommands.execCommand("mceFullScreen")}}}catch(e){}c.onKeyDown==null?void 0:c.onKeyDown(e,n)}));var S=r.useCallbackRef((function(e,n){x.current=n;n.on("FullscreenStateChanged",(function(e){c.onFullScreenChange==null?void 0:c.onFullScreenChange(e.state)}));try{var t;(t=n.iframeElement)==null||(t=t.contentDocument)==null?void 0:t.addEventListener("click",(function(e){var n;if(c.imgPreview&&((n=e.target)==null?void 0:n["tagName"])==="IMG"){j(e.target["src"])}}),true)}catch(e){}k.onInit==null?void 0:k.onInit(e,n)}));var F=r.useCallbackRef((function(e,n){x.current=n;k.onEditorChange==null?void 0:k.onEditorChange(e,n);b==null?void 0:b(e)}));var N="https://file.40017.cn/tcsk/tinymce@6.4.1";var P=function e(n){if(E.length===0)return 1;for(var t=0;t<E.length;t++){var r=E[t];if(r.max){if(n>=r.min&&n<=r.max)return r.ratio}else{if(n>=r.min)return r.ratio}}return 1};var z=r.useCallbackRef((function(e,n){try{var t=n.node.children||[];if(t.length===1&&t[0].nodeName==="IMG"){t[0].setAttribute("style","display:none");var r=document.createElement("img");r.src=t[0].getAttribute("src");r.onload=function(){var n=P(r.width);e.execCommand("mceInsertContent",true,'<img src="'+r.src+'" width="'+r.width*n+'" height="'+r.height*n+'" />')}}}catch(e){}}));return v("div",{className:t("v-editor-wrapper",C),children:[p(i,n({tinymceScriptSrc:N+"/tinymce.min.js"},k,{onInit:S,onKeyDown:I,onEditorChange:F,init:n({promotion:false,language:"zh-Hans",height:500,paste_data_images:y?true:false,paste_postprocess:z,autosave_ask_before_unload:false,base_url:N,autoresize_bottom_margin:0,images_upload_handler:function e(n){return new Promise((function(e,t){var r,i,o;var a=function(n){try{return e(Promise.reject((n==null?void 0:n.message)||"图片上传异常"))}catch(e){return t(e)}};try{r=n.blob();i=new File([r],r.name,{type:r.type});return Promise.resolve(y==null?void 0:y(i)).then((function(n){try{o=n;return e(Promise.resolve(o))}catch(e){return a(e)}}),a)}catch(e){a(e)}}))},plugins:"lists link image advlist charmap preview fullscreen code table help codesample "+(((m=c.init)==null?void 0:m.plugins_append)||""),toolbar:"undo redo fullscreen preview | bold italic underline strikethrough |"+"fontsize blocks |"+"forecolor backcolor removeformat |"+"numlist bullist advlist |"+"alignleft aligncenter alignright alignjustify |"+"outdent indent |"+"hr image link code codesample |"+(((d=c.init)==null?void 0:d.toolbar_append)||""),font_size_formats:"8px 10px 12px 14px 16px 18px 24px 36px 48px"},c.init,{content_style:"img {max-width:100%;} table{width:100%} "+((f=c.init)==null?void 0:f.content_style)})})),p(g,{visible:!!_,url:_,close:function e(){j("")}})]})};export{y as RichTextEditor};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { TAny } from '@flatbiz/utils';\nimport { Editor, IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /**\n * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度\n * 1. 默认值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n */\n img_ratio?: { min: number; max?: number; ratio: number }[];\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 获取富文本实例,通过onInit(_, editor)函数获取\n * 3. 预览富文本数据,使用 RichTextViewer 组件\n * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 6. 其他插件\n * emoticons 表情插件\n * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例\n * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n const imgRatio = props.init?.img_ratio || [\n { min: 0, max: 1000, ratio: 0.5 },\n { min: 1000, ratio: 0.3 },\n ];\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n const getImgRatio = (width: number) => {\n if (imgRatio.length === 0) return 1;\n for (let index = 0; index < imgRatio.length; index++) {\n const element = imgRatio[index];\n if (element.max) {\n if (width >= element.min && width <= element.max) return element.ratio;\n } else {\n if (width >= element.min) return element.ratio;\n }\n }\n return 1;\n };\n\n const paste_postprocess = hooks.useCallbackRef((editor, args) => {\n try {\n const nodes = (args.node.children || []) as unknown as HTMLElement[];\n if (nodes.length === 1 && nodes[0].nodeName === 'IMG') {\n nodes[0].setAttribute('style', `display:none`);\n const img = document.createElement('img');\n img.src = nodes[0].getAttribute('src') as string;\n img.onload = () => {\n const ratio = getImgRatio(img.width);\n editor.execCommand(\n 'mceInsertContent',\n true,\n `<img src=\"${img.src}\" width=\"${img.width * ratio}\" height=\"${img.height * ratio}\" />`,\n );\n };\n }\n } catch (error) {}\n });\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n paste_postprocess,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init2","_props$init3","_props$init4","onUploadImage","onChange","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","imgRatio","init","img_ratio","min","max","ratio","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","_editor$iframeElement","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","getImgRatio","width","length","index","element","paste_postprocess","args","nodes","node","nodeName","setAttribute","img","document","createElement","getAttribute","onload","height","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","promotion","language","paste_data_images","autosave_ask_before_unload","base_url","autoresize_bottom_margin","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_5_Catch","reject","message","$boundEx","file","File","name","resolve","then","$await_6","plugins","plugins_append","toolbar","toolbar_append","font_size_formats","content_style"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rich-text-editor/preview/preview.tsx","@flatbiz/antd/src/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { PlusCircleOutlined } from '@ant-design/icons';\nimport { Image } from 'antd';\nimport { Fragment } from 'react';\nimport { dynamicNode } from '../../dynamic-node';\nimport { fbaHooks } from '../../fba-hooks';\nimport './preview.less';\n\nexport const Preview = (props) => {\n const { visible, url } = props;\n\n fbaHooks.useEffectCustom(() => {\n if (visible) {\n dynamicNode.append({\n content: (\n <PlusCircleOutlined\n onClick={props.close}\n className=\"preview-image-popup-close\"\n twoToneColor=\"#1890ff\"\n />\n ),\n });\n } else {\n dynamicNode.remove();\n }\n }, [visible]);\n\n if (!url) return <></>;\n\n return (\n <Fragment>\n <Image\n key={url}\n style={{ left: '100px' }}\n preview={{\n className: 'preview-image-popup',\n maskStyle: { backgroundColor: 'rgba(0,0,0,0.85)' },\n visible,\n src: url,\n onVisibleChange: () => {\n props.close();\n },\n }}\n />\n </Fragment>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { type TAny } from '@flatbiz/utils';\nimport { Editor, type IAllProps } from '@tinymce/tinymce-react';\nimport { hooks } from '@wove/react';\nimport { useKeyPress } from 'ahooks';\nimport { useRef, useState } from 'react';\nimport { type Editor as TinyMCEEditor } from 'tinymce';\nimport { Preview } from './preview';\nimport './style.less';\n\nexport interface RichTextEditorProps extends Omit<IAllProps, 'onChange' | 'init'> {\n onChange?: (data?: string) => void;\n // value?: string;\n /** 上传图片服务 */\n onUploadImage?: (file: File) => Promise<string>;\n className?: string;\n /** 图片点击预览 */\n imgPreview?: boolean;\n init?: IAllProps['init'] & {\n /**\n * 通过粘贴图片创建的img标签,显示压缩比例,此处min、max是和指图片宽度\n * 1. 默认值:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n */\n img_ratio?: { min: number; max?: number; ratio: number }[];\n /** 插件添加;自定义plugins后失效 */\n plugins_append?: string;\n /** 工具栏添加;自定义toolbar后失效 */\n toolbar_append?: string;\n };\n /** 点击全屏按钮回调 */\n onFullScreenChange?: (state?: boolean) => void;\n}\n\n/**\n * 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6\n * @param props\n * @returns\n * ```\n * 1. 如果需要粘贴上传图片服务,需要提供 onUploadImage 上传图片接口\n * 2. 获取富文本实例,通过onInit(_, editor)函数获取\n * 3. 预览富文本数据,使用 RichTextViewer 组件\n * 4. 添加其他插件使用方式,配置 init.plugins_append、init.toolbar_append\n * <RichTextEditor init={{ plugins_append: 'codesample', toolbar_append: 'codesample' }} />\n * 5. 可通过设置 init.plugins、init.toolbar 完全自定义插件、工具栏\n * 6. 其他插件\n * emoticons 表情插件\n * 7. 可通过设置 init.img_ratio 设置通过粘贴上传的图片压缩显示比例\n * 默认比例:[{ min: 0, max: 1000, ratio: 0.5 }, { min: 1000, ratio: 0.3 }]\n * ```\n */\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const { onUploadImage, onChange, className, ...otherProps } = props;\n\n const editorRef = useRef<TAny>(null);\n const [previewUrl, setPreviewUrl] = useState('');\n const imgRatio = props.init?.img_ratio || [\n { min: 0, max: 1000, ratio: 0.5 },\n { min: 1000, ratio: 0.3 },\n ];\n\n // const varStyleString = useMemo(() => {\n // const merge = { ...defaultVarStyle, ...props.varStyle };\n // let varStyleString = '';\n // Object.keys(merge).map((key) => {\n // varStyleString += `${key}:${merge[key]};`;\n // });\n // return varStyleString;\n // }, [props.varStyle]);\n\n useKeyPress(\n () => true,\n (event) => {\n try {\n if (event.type === 'keyup' && event.key === 'Escape') {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n },\n {\n events: ['keydown', 'keyup'],\n },\n );\n\n const onKeyDown = hooks.useCallbackRef((event, editor: TinyMCEEditor) => {\n try {\n if (event.keyCode == 27) {\n const isFull = editorRef.current?.editorContainer.classList.contains('tox-fullscreen');\n if (isFull) {\n editorRef.current?.editorCommands.execCommand('mceFullScreen');\n }\n }\n } catch (error) {\n // 异常不处理\n }\n props.onKeyDown?.(event, editor);\n });\n\n const onInit = hooks.useCallbackRef((_, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n editor.on('FullscreenStateChanged', (e) => {\n props.onFullScreenChange?.(e.state);\n });\n try {\n editor.iframeElement?.contentDocument?.addEventListener(\n 'click',\n (event) => {\n if (props.imgPreview && event.target?.['tagName'] === 'IMG') {\n setPreviewUrl(event.target['src']);\n }\n },\n true,\n );\n } catch (error) {\n //\n }\n otherProps.onInit?.(_, editor);\n });\n\n const onEditorChange = hooks.useCallbackRef((a: string, editor: TinyMCEEditor) => {\n editorRef.current = editor;\n otherProps.onEditorChange?.(a, editor);\n onChange?.(a);\n });\n\n const tinymceBaseUrl = 'https://file.40017.cn/tcsk/tinymce@6.4.1';\n\n const getImgRatio = (width: number) => {\n if (imgRatio.length === 0) return 1;\n for (let index = 0; index < imgRatio.length; index++) {\n const element = imgRatio[index];\n if (element.max) {\n if (width >= element.min && width <= element.max) return element.ratio;\n } else {\n if (width >= element.min) return element.ratio;\n }\n }\n return 1;\n };\n\n const paste_postprocess = hooks.useCallbackRef((editor, args) => {\n try {\n const nodes = (args.node.children || []) as unknown as HTMLElement[];\n if (nodes.length === 1 && nodes[0].nodeName === 'IMG') {\n nodes[0].setAttribute('style', `display:none`);\n const img = document.createElement('img');\n img.src = nodes[0].getAttribute('src') as string;\n img.onload = () => {\n const ratio = getImgRatio(img.width);\n editor.execCommand(\n 'mceInsertContent',\n true,\n `<img src=\"${img.src}\" width=\"${img.width * ratio}\" height=\"${img.height * ratio}\" />`,\n );\n };\n }\n } catch (error) {\n //\n }\n });\n\n return (\n <div className={classNames('v-editor-wrapper', className)}>\n <Editor\n // apiKey=\"ds6j8so4g3d2cycidbhgkds36q0phy1uqd9jd8bot91sfe5l\"\n tinymceScriptSrc={`${tinymceBaseUrl}/tinymce.min.js`}\n {...otherProps}\n onInit={onInit}\n onKeyDown={onKeyDown}\n onEditorChange={onEditorChange}\n init={{\n promotion: false,\n language: 'zh-Hans',\n height: 500,\n paste_data_images: onUploadImage ? true : false,\n paste_postprocess,\n autosave_ask_before_unload: false,\n base_url: tinymceBaseUrl,\n autoresize_bottom_margin: 0,\n images_upload_handler: async (blobInfo) => {\n try {\n const blob = blobInfo.blob();\n const file = new File([blob], blob.name, { type: blob.type });\n const respData = await onUploadImage?.(file);\n return Promise.resolve(respData as string);\n } catch (error: any) {\n return Promise.reject(error?.message || '图片上传异常');\n }\n },\n\n plugins:\n 'lists link image advlist charmap preview fullscreen code table help codesample ' +\n (props.init?.plugins_append || ''),\n toolbar:\n 'undo redo fullscreen preview | bold italic underline strikethrough |' +\n 'fontsize blocks |' +\n 'forecolor backcolor removeformat |' +\n 'numlist bullist advlist |' +\n 'alignleft aligncenter alignright alignjustify |' +\n 'outdent indent |' +\n 'hr image link code codesample |' +\n (props.init?.toolbar_append || ''),\n font_size_formats: '8px 10px 12px 14px 16px 18px 24px 36px 48px',\n ...props.init,\n content_style: `img {max-width:100%;} table{width:100%} ${props.init?.content_style}`,\n }}\n />\n <Preview\n visible={!!previewUrl}\n url={previewUrl}\n close={() => {\n setPreviewUrl('');\n }}\n />\n </div>\n );\n};\n\n/**\n * undo redo\n * codesample\n * fontselect fontsizeselect formatselect\n * image media link anchor\n * preview save print\n * emoticons(表情)\n */\n"],"names":["Preview","props","visible","url","fbaHooks","useEffectCustom","dynamicNode","append","content","_jsx","_PlusCircleOutlined","onClick","close","className","twoToneColor","remove","_Fragment","Fragment","children","Image","style","left","preview","maskStyle","backgroundColor","src","onVisibleChange","RichTextEditor","_props$init","_props$init2","_props$init3","_props$init4","onUploadImage","onChange","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","_useState","useState","previewUrl","setPreviewUrl","imgRatio","init","img_ratio","min","max","ratio","useKeyPress","event","type","key","_editorRef$current","isFull","current","editorContainer","classList","contains","_editorRef$current2","editorCommands","execCommand","error","events","onKeyDown","_hooks","useCallbackRef","editor","keyCode","_editorRef$current3","_editorRef$current4","onInit","_","on","e","onFullScreenChange","state","_editor$iframeElement","iframeElement","contentDocument","addEventListener","_event$target","imgPreview","target","onEditorChange","a","tinymceBaseUrl","getImgRatio","width","length","index","element","paste_postprocess","args","nodes","node","nodeName","setAttribute","img","document","createElement","getAttribute","onload","height","_jsxs","_classNames","Editor","_extends","tinymceScriptSrc","promotion","language","paste_data_images","autosave_ask_before_unload","base_url","autoresize_bottom_margin","images_upload_handler","blobInfo","Promise","$return","$error","blob","_file","respData","$Try_5_Catch","reject","message","$boundEx","file","File","name","resolve","then","$await_6","plugins","plugins_append","toolbar","toolbar_append","font_size_formats","content_style"],"mappings":"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"}
|
|
@@ -3,5 +3,5 @@ import './../fba-hooks/index.css';
|
|
|
3
3
|
import './../flex-layout/index.css';
|
|
4
4
|
import './index.css';
|
|
5
5
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
6
|
-
import{classNames as e}from"@dimjs/utils/cjs/class-names";import{isUndefinedOrNull as i}from"@flatbiz/utils";import{fbaHooks as l}from"../fba-hooks/index.js";import{FlexLayout as t}from"../flex-layout/index.js";import{jsxs as r,jsx as s}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-fc015ef2.js";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"react";import"../use-responsive-point-21b8c601.js";import"antd";var c=function c(a){var
|
|
6
|
+
import{classNames as e}from"@dimjs/utils/cjs/class-names";import{isUndefinedOrNull as i}from"@flatbiz/utils";import{fbaHooks as l}from"../fba-hooks/index.js";import{FlexLayout as t}from"../flex-layout/index.js";import{jsxs as r,jsx as s}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-fc015ef2.js";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"react";import"../use-responsive-point-21b8c601.js";import"antd";var c=function c(a){var n=i(a.showTitleIndex)?true:a.showTitleIndex;var m=l.useThemeToken();var d={"--rule-describe-colorPrimary":m.colorPrimary};return r("div",{className:e("v-rule-describe",a.className),style:d,children:[a.title?s("div",{className:e("v-rule-describe-title",{"v-rule-describe-title-sign":a.titleSign}),children:a.title}):null,a.ruleDataList.map((function(e,i){if(n&&e.title){return r("div",{className:"v-rule-describe-item",children:[r(t,{fullIndex:1,direction:"horizontal",className:"v-rule-describe-item-title",style:a.ruleItemTitleStyle,children:[r("span",{className:"v-rule-describe-item-title-index",children:[i+1,". "]}),s("span",{className:"v-rule-describe-item-title-content",children:e.title})]}),e.desc?r(t,{direction:"horizontal",className:"v-rule-describe-item-desc",style:a.ruleItemDescStyle,fullIndex:1,children:[s("span",{className:"v-rule-describe-item-title-index"}),s("span",{className:"v-rule-describe-item-title-content",children:e.desc})]}):null]},i)}return r("div",{className:"v-rule-describe-item",children:[e.title?s("div",{className:"v-rule-describe-item-title",style:a.ruleItemTitleStyle,children:e.title}):null,e.desc?s("div",{className:"v-rule-describe-item-desc",style:a.ruleItemDescStyle,children:e.desc}):null]},i)}))]})};export{c as RuleDescribe};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rule-describe/rule-describe.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = fbaHooks.useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-title-index\">{index + 1}. </span>\n <span className=\"v-rule-describe-item-title-content\">{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n >\n <span className=\"v-rule-describe-item-title-index\"></span>\n <span className=\"v-rule-describe-item-title-content\">{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["RuleDescribe","props","showTitleIndex","isUndefinedOrNull","theme","fbaHooks","useThemeToken","style","colorPrimary","_jsxs","className","_classNames","children","title","_jsx","titleSign","ruleDataList","map","item","index","FlexLayout","direction","ruleItemTitleStyle","desc","ruleItemDescStyle"],"mappings":";gcAqBaA,EAAe,SAAfA,EAAgBC,GAC3B,IAAMC,EAAiBC,EAAkBF,EAAMC,gBAAkB,KAAOD,EAAMC,eAE9E,IAAME,EAAQC,EAASC,gBAEvB,IAAMC,EAAQ,CAAE,+BAAgCH,EAAMI,cAEtD,OACEC,EAAA,MAAA,CAAKC,UAAWC,EAAW,kBAAmBV,EAAMS,WAAYH,MAAOA,EAAMK,SAC1EX,CAAAA,EAAMY,MACLC,EAAA,MAAA,CACEJ,UAAWC,EAAW,wBAAyB,CAAE,6BAA8BV,EAAMc,YAAaH,SAEjGX,EAAMY,QAEP,KACHZ,EAAMe,aAAaC,KAAI,SAACC,EAAMC,GAC7B,GAAIjB,GAAkBgB,EAAKL,MAAO,CAChC,OACEJ,EAAA,MAAA,CAAiBC,UAAU,uBAAsBE,SAAA,CAC/CH,EAACW,EAAU,CACTC,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/rule-describe/rule-describe.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { isUndefinedOrNull } from '@flatbiz/utils';\nimport { CSSProperties, ReactElement } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport { FlexLayout } from '../flex-layout';\nimport './style.less';\n\nexport type RuleDataItem = {\n title?: string | ReactElement;\n desc?: string | ReactElement;\n};\nexport type RuleDescribeProps = {\n title?: string;\n showTitleIndex?: boolean;\n ruleDataList: RuleDataItem[];\n titleSign?: boolean;\n className?: string;\n ruleItemTitleStyle?: CSSProperties;\n ruleItemDescStyle?: CSSProperties;\n};\n\nexport const RuleDescribe = (props: RuleDescribeProps) => {\n const showTitleIndex = isUndefinedOrNull(props.showTitleIndex) ? true : props.showTitleIndex;\n\n const theme = fbaHooks.useThemeToken();\n\n const style = { '--rule-describe-colorPrimary': theme.colorPrimary } as CSSProperties;\n\n return (\n <div className={classNames('v-rule-describe', props.className)} style={style}>\n {props.title ? (\n <div\n className={classNames('v-rule-describe-title', { 'v-rule-describe-title-sign': props.titleSign })}\n >\n {props.title}\n </div>\n ) : null}\n {props.ruleDataList.map((item, index) => {\n if (showTitleIndex && item.title) {\n return (\n <div key={index} className=\"v-rule-describe-item\">\n <FlexLayout\n fullIndex={1}\n direction=\"horizontal\"\n className=\"v-rule-describe-item-title\"\n style={props.ruleItemTitleStyle}\n >\n <span className=\"v-rule-describe-item-title-index\">{index + 1}. </span>\n <span className=\"v-rule-describe-item-title-content\">{item.title}</span>\n </FlexLayout>\n {item.desc ? (\n <FlexLayout\n direction=\"horizontal\"\n className=\"v-rule-describe-item-desc\"\n style={props.ruleItemDescStyle}\n fullIndex={1}\n >\n <span className=\"v-rule-describe-item-title-index\"></span>\n <span className=\"v-rule-describe-item-title-content\">{item.desc}</span>\n </FlexLayout>\n ) : null}\n </div>\n );\n }\n return (\n <div key={index} className=\"v-rule-describe-item\">\n {item.title ? (\n <div className=\"v-rule-describe-item-title\" style={props.ruleItemTitleStyle}>\n {item.title}\n </div>\n ) : null}\n {item.desc ? (\n <div className=\"v-rule-describe-item-desc\" style={props.ruleItemDescStyle}>\n {item.desc}\n </div>\n ) : null}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["RuleDescribe","props","showTitleIndex","isUndefinedOrNull","theme","fbaHooks","useThemeToken","style","colorPrimary","_jsxs","className","_classNames","children","title","_jsx","titleSign","ruleDataList","map","item","index","FlexLayout","fullIndex","direction","ruleItemTitleStyle","desc","ruleItemDescStyle"],"mappings":";gcAqBaA,EAAe,SAAfA,EAAgBC,GAC3B,IAAMC,EAAiBC,EAAkBF,EAAMC,gBAAkB,KAAOD,EAAMC,eAE9E,IAAME,EAAQC,EAASC,gBAEvB,IAAMC,EAAQ,CAAE,+BAAgCH,EAAMI,cAEtD,OACEC,EAAA,MAAA,CAAKC,UAAWC,EAAW,kBAAmBV,EAAMS,WAAYH,MAAOA,EAAMK,SAC1EX,CAAAA,EAAMY,MACLC,EAAA,MAAA,CACEJ,UAAWC,EAAW,wBAAyB,CAAE,6BAA8BV,EAAMc,YAAaH,SAEjGX,EAAMY,QAEP,KACHZ,EAAMe,aAAaC,KAAI,SAACC,EAAMC,GAC7B,GAAIjB,GAAkBgB,EAAKL,MAAO,CAChC,OACEJ,EAAA,MAAA,CAAiBC,UAAU,uBAAsBE,SAAA,CAC/CH,EAACW,EAAU,CACTC,UAAW,EACXC,UAAU,aACVZ,UAAU,6BACVH,MAAON,EAAMsB,mBAAmBX,UAEhCH,EAAA,OAAA,CAAMC,UAAU,mCAAkCE,SAAEO,CAAAA,EAAQ,EAAE,QAC9DL,EAAA,OAAA,CAAMJ,UAAU,qCAAoCE,SAAEM,EAAKL,WAE5DK,EAAKM,KACJf,EAACW,EAAU,CACTE,UAAU,aACVZ,UAAU,4BACVH,MAAON,EAAMwB,kBACbJ,UAAW,EAAET,UAEbE,EAAA,OAAA,CAAMJ,UAAU,qCAChBI,EAAA,OAAA,CAAMJ,UAAU,qCAAoCE,SAAEM,EAAKM,UAE3D,OApBIL,EAuBd,CACA,OACEV,EAAA,MAAA,CAAiBC,UAAU,uBAAsBE,SAC9CM,CAAAA,EAAKL,MACJC,EAAA,MAAA,CAAKJ,UAAU,6BAA6BH,MAAON,EAAMsB,mBAAmBX,SACzEM,EAAKL,QAEN,KACHK,EAAKM,KACJV,EAAA,MAAA,CAAKJ,UAAU,4BAA4BH,MAAON,EAAMwB,kBAAkBb,SACvEM,EAAKM,OAEN,OAVIL,EAad,MAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.tce-hidden{display:inline-block;height:0;left:0;overflow:hidden;position:absolute;top:0;width:0}.tce-hidden span,.text-css-ellipsis{display:inline-block;white-space:nowrap}.text-css-ellipsis{overflow:hidden;position:relative;text-align:left;text-overflow:ellipsis}
|
|
1
|
+
.tce-hidden{display:inline-block;height:0;left:0;overflow:hidden;position:absolute;top:0;width:0}.tce-hidden span,.text-css-ellipsis{display:inline-block;white-space:nowrap}.text-css-ellipsis{overflow:hidden;position:relative;text-align:left;text-overflow:ellipsis;width:100%}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
import './index.css';
|
|
3
3
|
/*! @flatjs/forge MIT @flatbiz/antd */
|
|
4
|
-
import{Tooltip as t}from"antd";import{
|
|
4
|
+
import{Tooltip as t}from"antd";import{useState as e,useMemo as i}from"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";var d=function d(f){var s=e(0),a=s[0],l=s[1];var h=e(0),c=h[0],o=h[1];var u=i((function(){if(f.hideTips)return false;if(f.width!==undefined){return c>f.width}return c>a}),[a,f.hideTips,f.width,c]);return n(t,{title:u?f.text:undefined,children:r("span",{className:"text-css-ellipsis",style:f.width?{width:f.width}:{},ref:function t(e){if(e){var i;l((e==null||(i=e.parentElement)==null?void 0:i.offsetWidth)||0)}},children:[n("span",{className:"tce-hidden",children:n("span",{ref:function t(e){if(e){o(e.offsetWidth)}},children:f.text})}),f.text]})})};export{d as TextCssEllipsis};
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-css-ellipsis/text-css-ellipsis.tsx"],"sourcesContent":["import { Tooltip } from 'antd';\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-css-ellipsis/text-css-ellipsis.tsx"],"sourcesContent":["import { Tooltip } from 'antd';\nimport { useMemo, useState } from 'react';\nimport './style.less';\n\nexport type CssTextEllipsisProps = {\n text: string;\n width?: number;\n /** 隐藏tips */\n hideTips?: boolean;\n};\n\n/**\n * 内容超过宽度截取,并在尾部添加...,被截取的添加Tooltip显示完整数据\n * ```\n * 1. 如果配置 width,则使用文本长度与width进行比较\n * 2. 如果没有配置 width,则使用文本长度与当前节点父节点宽度进行比较\n *\n * 注意:\n * 1. 当前节点父节点可能需要添加 overflow-x: hidden;\n * 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;\n * ```\n */\nexport const TextCssEllipsis = (props: CssTextEllipsisProps) => {\n const [parentNodeWidth, setParentNodeWidth] = useState(0);\n const [textNodeWidth, setTextNodeWidth] = useState(0);\n\n const showTips = useMemo(() => {\n if (props.hideTips) return false;\n if (props.width !== undefined) {\n return textNodeWidth > props.width;\n }\n return textNodeWidth > parentNodeWidth;\n }, [parentNodeWidth, props.hideTips, props.width, textNodeWidth]);\n\n return (\n <Tooltip title={showTips ? props.text : undefined}>\n <span\n className=\"text-css-ellipsis\"\n style={props.width ? { width: props.width } : {}}\n ref={(node) => {\n if (node) {\n setParentNodeWidth(node?.parentElement?.offsetWidth || 0);\n }\n }}\n >\n <span className=\"tce-hidden\">\n <span\n ref={(node) => {\n if (node) {\n setTextNodeWidth(node.offsetWidth);\n }\n }}\n >\n {props.text}\n </span>\n </span>\n {props.text}\n </span>\n </Tooltip>\n );\n};\n"],"names":["TextCssEllipsis","props","_useState","useState","parentNodeWidth","setParentNodeWidth","_useState2","textNodeWidth","setTextNodeWidth","showTips","useMemo","hideTips","width","undefined","_jsx","Tooltip","title","text","children","_jsxs","className","style","ref","node","_node$parentElement","parentElement","offsetWidth"],"mappings":";mIAsBaA,EAAkB,SAAlBA,EAAmBC,GAC9B,IAAAC,EAA8CC,EAAS,GAAhDC,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GAC1C,IAAAI,EAA0CH,EAAS,GAA5CI,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAEtC,IAAMG,EAAWC,GAAQ,WACvB,GAAIT,EAAMU,SAAU,OAAO,MAC3B,GAAIV,EAAMW,QAAUC,UAAW,CAC7B,OAAON,EAAgBN,EAAMW,KAC/B,CACA,OAAOL,EAAgBH,CACzB,GAAG,CAACA,EAAiBH,EAAMU,SAAUV,EAAMW,MAAOL,IAElD,OACEO,EAACC,EAAO,CAACC,MAAOP,EAAWR,EAAMgB,KAAOJ,UAAUK,SAChDC,EAAA,OAAA,CACEC,UAAU,oBACVC,MAAOpB,EAAMW,MAAQ,CAAEA,MAAOX,EAAMW,OAAU,CAAG,EACjDU,IAAK,SAAAA,EAACC,GACJ,GAAIA,EAAM,CAAA,IAAAC,EACRnB,GAAmBkB,GAAI,OAAAC,EAAJD,EAAME,4BAAND,EAAqBE,cAAe,EACzD,CACA,EAAAR,UAEFJ,EAAA,OAAA,CAAMM,UAAU,aAAYF,SAC1BJ,EAAA,OAAA,CACEQ,IAAK,SAAAA,EAACC,GACJ,GAAIA,EAAM,CACRf,EAAiBe,EAAKG,YACxB,CACA,EAAAR,SAEDjB,EAAMgB,SAGVhB,EAAMgB,SAIf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/tree-selector-wrapper.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToArray, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { usePrevious } from 'ahooks';\nimport { dequal } from 'dequal';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { getExpandedKeys, getVauleList } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\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 * @deprecated 已过期,请使用onChange\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * tree item 数据适配器\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n /** 自定义异常提示文案 */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n};\n\n// type TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n// onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n// };\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const isFirstUseValueRef = useRef(true);\n\n const prevValue = usePrevious(value);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n if (responseFirstRef.current && isUndefinedOrNull(value)) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n setTreeExpandedKeys(treeDefaultExpandedKeys);\n } else if (treeDefaultExpandAll) {\n const allValues = treeToArray(state.treeSelectorList, fieldNamesMerge.children).map((item) => {\n return item[fieldNamesMerge.value];\n });\n setTreeExpandedKeys(allValues);\n return;\n } else if (initRootExpand && state.treeSelectorList.length) {\n setTreeExpandedKeys([state.treeSelectorList[0][fieldNamesMerge.value]]);\n return;\n }\n }\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value !== prevValue) {\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n };\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n // const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n // if (!item) return undefined;\n // return {\n // label: item?.[labelInValueFieldNamesMerge.label],\n // value: item?.[labelInValueFieldNamesMerge.value],\n // disabled: item?.['disabled'],\n // };\n // });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: TAny, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n // setInnerOperateValue(values);\n onChange?.(values, selectedValues, triggerInfo);\n onChangeHandle?.(values, selectedValues, triggerInfo);\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 const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n rawData: item,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[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 /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const valueList = labelInValue\n ? getVauleList(value, labelInValueFieldNamesMerge)\n : getVauleList(value, fieldNamesMerge);\n if (valueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return valueList.map((item) => ({ label: item, value: item }));\n }\n return valueList.map((value) => {\n const target = arrayFind(state.treeSelectorTiledArray, value as string, fieldNamesMerge.value);\n const targetParseItem = parseDataSourceItem(target) as TPlainObject;\n return {\n label: getValueOrDefault(targetParseItem?.label, value),\n value: getValueOrDefault(targetParseItem?.value, value),\n };\n });\n }\n return valueList;\n }, [\n labelInValue,\n value,\n labelInValueFieldNamesMerge,\n fieldNamesMerge,\n otherProps.treeCheckStrictly,\n state.treeSelectorTiledArray,\n parseDataSourceItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledArray","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeys","value","treeList","fieldNames","_isArray","length","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","tempList","toArray","map","item","_isObject","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","onChange","onChangeHandle","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isFirstUseValueRef","prevValue","usePrevious","useEffectCustom","current","isUndefinedOrNull","allValues","treeToArray","valueList","expandedKeys","getTreeExpandedKeys","Array","from","Set","valueIsEmpty","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","_respData2","onRequest","Error","_extend","find","console","warn","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","dequal","dataList","_ref","tempItem","undefined","newdataList","concat","onTreeExpand","onAgainRequest","refresh","newTreeExpandedKeys","forEach","includes","targetList","parseDataSourceItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","target","arrayFind","push","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","filter","parseItem","realTreeNodeList","valueIsEqual","showCheckedStrategy","realTreeNodeValueList","onRespChange","values","selectedValues","onInnerChange","_data","_getResponseTreeNodeL","prev","mergeList","labelInValueList","_ref2","rawData","mapTree","itemAdapterData","_createElement","TreeSelect","TreeNode","title","renderValueList","targetParseItem","getValueOrDefault","treeSelectValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","className","_classNames","popupClassName","dropdownMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-selector-wrapper/model.ts","@flatbiz/antd/src/tree-selector-wrapper/utils.ts","@flatbiz/antd/src/tree-selector-wrapper/tree-selector-wrapper.tsx"],"sourcesContent":["import { API, ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, TPlainObject, TSetDefaultDefined } from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeSelectorList: TSetDefaultDefined<TreeSelectProps['treeData'], []>;\n treeSelectorTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setSelectBoxList: {\n treeSelectorList: ModelState['treeSelectorList'];\n treeSelectorTiledArray: ModelState['treeSelectorTiledArray'];\n };\n resetSelectBoxList: void;\n changeRequestStatus: TRequestStatus;\n};\n\nconst defaultState: ModelState = {\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeSelectorWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setSelectBoxList: (params) => {\n return (state) => {\n state.treeSelectorList = params.treeSelectorList || [];\n state.treeSelectorTiledArray = params.treeSelectorTiledArray || [];\n state.requestStatus = 'request-success';\n };\n },\n resetSelectBoxList: () => {\n return (state) => {\n state.treeSelectorList = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n };\n },\n },\n state: defaultState,\n};\n\nconst treeSelectorWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeSelectorWrapperModel('key值').useStore();\n * ```\n */\nexport const treeSelectorWrapperModel = (key: string) => {\n if (!treeSelectorWrapperModels[key]) {\n treeSelectorWrapperModels[key] = Model(TreeSelectorWrapperModel);\n }\n return treeSelectorWrapperModels[key];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport {\n isUndefinedOrNull,\n LabelValueItem,\n toArray,\n TPlainObject,\n treeLeafParentsArray,\n treeToTiledArray,\n} from '@flatbiz/utils';\nimport { TreeSelectProps } from 'antd';\nimport { dequal } from 'dequal';\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames?: TreeSelectProps['fieldNames'],\n) => {\n if (!isArray(treeList) || treeList.length === 0) return [];\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' });\n};\n\nexport const getVauleList = (data, fieldNames: LabelValueItem<string>) => {\n let tempList = toArray<TPlainObject | string | number>(data);\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[fieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, fieldNames: LabelValueItem<string>) => {\n const list = getVauleList(data, fieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括 string、number、Array<string | number>、{ label: string, value: string | nuber }\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeSelectorWrapperValueDeepEqual = (\n value1: any,\n value2: any,\n fieldNames: LabelValueItem<string>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, fieldNames);\n const object2 = array2map(value2, fieldNames);\n const diff = dequal(object1, object2);\n return diff;\n};\n","import { CaretDownFilled, RedoOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { classNames, extend } from '@dimjs/utils';\nimport { isUndefinedOrNull, TAny, TPlainObject, treeToArray, valueIsEqual } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, TreeSelect, TreeSelectProps } from 'antd';\nimport { DependencyList, useMemo, useRef, useState } from 'react';\nimport { treeSelectorWrapperModel } from './model';\nimport './style.less';\n\nimport { arrayFind, getValueOrDefault } from '@flatbiz/utils';\nimport { usePrevious } from 'ahooks';\nimport { dequal } from 'dequal';\nimport { fbaHooks } from '../fba-hooks';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport { getExpandedKeys, getVauleList } from './utils';\n\ntype TreeSelectorWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeSelectorServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeSelectorWrapperProps = Omit<\n TreeSelectProps,\n | 'treeExpandedKeys'\n | 'treeData'\n | 'loading'\n | 'onTreeExpand'\n | 'onChange'\n | 'value'\n | 'fieldNames'\n | 'defaultValue'\n | 'treeDataSimpleMode'\n> & {\n modelKey: string;\n fieldNames?: { label?: string; value?: string; children?: string; disabled?: string };\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 * @deprecated 已过期,请使用onChange\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChangeHandle?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * 1. 当 treeCheckable = true && treeCheckStrictly = true,如果选择的数据中含有父节点,selectedValue、selectedList返回数据包含父节点\n * 2. 当 treeCheckable = true && treeCheckStrictly = false,selectedValue、selectedList返回的数据不包含父节点\n * 3. 当 treeCheckable = false,节点选择没有级联关系,selectedValue、selectedList返回的数据就是实际选择\n * 4. selectAllDataList 返回的数据都包含父节点\n * 5. 使用 onTreeItemAdapter 拼接label数据后,选中回填数据也是拼接后的\n * 6. triggerInfo 当前操作节点数据\n */\n onChange?: (\n selectedValue?: TreeSelectorWrapperValue,\n selectedData?: TPlainObject[] | TPlainObject,\n triggerInfo?: TPlainObject,\n ) => void;\n /**\n * tree item 数据适配器,返回的数据会通过fieldNames配置取数据\n * ```\n * 1. 可用于设置disabled状态\n * onTreeItemDataAdapter: (dataItem) => {\n * if(dataItem.xx === xx){\n * dataItem['disabled] = true;\n * }\n * return dataItem;\n * }\n * 2. 可设置label数据显示\n * ```\n */\n onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n // icon 无法实现、treeIcon不起作用4.20.0\n // showIcon?: boolean;\n // icon?: (data: TPlainObject) => ReactElement;\n /** 自定义异常提示文案 */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeSelectorWrapperValue;\n\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * treeCheckStrictly = true模式下有效,点击父节点是否选中所有子节点,默认值:true\n */\n selectedParentCheckedAllChildrenList?: boolean;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n};\n\n// type TreeSelectorWrapperPropsInner = TreeSelectorWrapperProps & {\n// onChange?: (selectedValue?: TreeSelectorWrapperValue) => void;\n// };\n\n/**\n * 树选择器包装组件,由于过度封装,部分antd TreeSelect原始功能不支持,不满足情况的请使用antd TreeSelect实现\n * @param props\n * @returns\n * ```\n * 1. 当设置treeSelectorList属性后,serviceConfig、onTreeSelectorListChange将失效\n * 2. 父节点默认不返回,需要返回请设置showCheckedStrategy\n * ```\n */\nexport const TreeSelectorWrapper = (props: TreeSelectorWrapperProps) => {\n const {\n serviceConfig,\n effectDependencyList,\n onTreeSelectorListChange,\n onTreeSelectorRequestError,\n treeSelectorList,\n requestMessageConfig,\n modelKey,\n value,\n labelInValue: _labelInValue,\n labelInValueFieldNames,\n onTreeItemDataAdapter,\n selectedParentCheckedAllChildrenList = true,\n fieldNames,\n onChange,\n onChangeHandle,\n treeDefaultExpandAll,\n showAllOption,\n initRootExpand,\n treeDefaultExpandedKeys,\n ...otherProps\n } = props;\n /**\n * 不能使用key、defaultValue模式\n * 1. 勾选的和回填选中不相同情况,勾选后会渲染defaultValue模式后,弹框被关闭,操作体验存在问题\n */\n const hasTreeSelectorList = props.hasOwnProperty('treeSelectorList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<React.Key[]>();\n const [state, actions] = treeSelectorWrapperModel(modelKey).useStore();\n const requestPreKey = `request-progress-${modelKey}`;\n const isMultiple = otherProps.treeCheckable;\n const responseFirstRef = useRef(true);\n /**\n * treeCheckStrictly \tcheckable 状态下节点选择完全受控(父子节点选中状态不再关联),\n * 会使得 labelInValue 强制为 true\n */\n const labelInValue = useMemo(() => {\n if (otherProps.treeCheckStrictly) return true;\n return _labelInValue;\n }, [_labelInValue, otherProps.treeCheckStrictly]);\n\n const fieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', disabled: 'disabled', ...fieldNames };\n }, [fieldNames]);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n\n const allOptionConfig = useMemo(() => {\n if (showAllOption) {\n const isTrue = showAllOption === true;\n return {\n label: isTrue ? '全部' : showAllOption.label,\n value: isTrue ? '' : showAllOption.value,\n };\n }\n return null;\n }, [showAllOption]);\n\n const isFirstUseValueRef = useRef(true);\n\n const prevValue = usePrevious(value);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeSelectorList.length > 0) {\n if (responseFirstRef.current && isUndefinedOrNull(value)) {\n responseFirstRef.current = false;\n if (treeDefaultExpandedKeys) {\n setTreeExpandedKeys(treeDefaultExpandedKeys);\n } else if (treeDefaultExpandAll) {\n const allValues = treeToArray(state.treeSelectorList, fieldNamesMerge.children).map((item) => {\n return item[fieldNamesMerge.value];\n });\n setTreeExpandedKeys(allValues);\n return;\n } else if (initRootExpand && state.treeSelectorList.length) {\n setTreeExpandedKeys([state.treeSelectorList[0][fieldNamesMerge.value]]);\n return;\n }\n }\n if (isUndefinedOrNull(value) && isFirstUseValueRef.current) return;\n isFirstUseValueRef.current = false;\n if (value !== prevValue) {\n const valueList = getVauleList(value, labelInValueFieldNamesMerge);\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(expandedKeys)));\n }\n }\n }, [value, state.treeSelectorList]);\n\n const valueIsEmpty = (value: string | number) => {\n return value === '' || isUndefinedOrNull(value);\n };\n\n const serviceResponseHandle = (respData) => {\n const respDataList = newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData;\n return respDataList as TPlainObject[];\n };\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys || [];\n const params = extend({}, newServiceConfig.params);\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n void actions.changeRequestStatus('no-dependencies-params');\n console.warn(`TreeSelectorWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n try {\n setLoading(true);\n window[requestPreKey] = true;\n void actions.changeRequestStatus('request-progress');\n const _respData = await newServiceConfig.onRequest?.(params);\n const respData = serviceResponseHandle(_respData) as TreeSelectProps['treeData'];\n setLoading(false);\n window[requestPreKey] = false;\n onChangeSelectorList(respData || []);\n } catch (error: TAny) {\n setLoading(false);\n window[requestPreKey] = false;\n void actions.changeRequestStatus('request-error');\n onTreeSelectorRequestError?.(error);\n }\n });\n\n hooks.useCustomCompareEffect(\n () => {\n if (hasTreeSelectorList) return;\n // 当无依赖项时,如果存在缓存数据,就不在调用接口\n if (Boolean(newEffectDependencyList.length)) {\n // 内部主动清楚数据,被依赖的数据发生变更时,依赖组件数据清空\n onChangeSelectorList([]);\n void startDataSourceRequest();\n return;\n }\n const allState = treeSelectorWrapperModel(modelKey).getState();\n if (allState.requestStatus === 'request-success') {\n return;\n }\n // 判断相同的modelKey是否已经在请求数据中,避免重复请求\n if (!window[requestPreKey]) {\n void startDataSourceRequest();\n return;\n }\n },\n newEffectDependencyList,\n dequal,\n );\n\n const onChangeSelectorList = hooks.useCallbackRef((dataList: TAny[]) => {\n if (dataList?.length === 0 && state.treeSelectorList.length === 0) {\n void actions.setSelectBoxList({\n treeSelectorList: [],\n treeSelectorTiledArray: [],\n });\n onTreeSelectorListChange?.([]);\n return;\n }\n // 全部选项\n const tempItem = allOptionConfig\n ? {\n [fieldNamesMerge.label]: allOptionConfig.label,\n [fieldNamesMerge.value]: allOptionConfig.value,\n }\n : undefined;\n const newdataList = showAllOption ? [tempItem, ...dataList] : dataList;\n void actions.setSelectBoxList({\n treeSelectorList: newdataList,\n treeSelectorTiledArray: treeToArray(newdataList || [], fieldNamesMerge.children),\n });\n onTreeSelectorListChange?.(dataList);\n });\n\n fbaHooks.useEffectCustom(() => {\n if (hasTreeSelectorList) {\n onChangeSelectorList(treeSelectorList || []);\n }\n }, [treeSelectorList]);\n\n const onTreeExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onAgainRequest = hooks.useCallbackRef(() => {\n void startDataSourceRequest();\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetList = getExpandedKeys(value, state.treeSelectorList, fieldNamesMerge);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetList.map((item) => item.value));\n });\n return newTreeExpandedKeys;\n };\n\n /**\n * 数据源Item解析\n */\n const parseDataSourceItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n if (!item) return undefined;\n return {\n label: item?.[fieldNamesMerge.label],\n value: item?.[fieldNamesMerge.value],\n children: item?.[fieldNamesMerge.children],\n disabled: item?.['disabled'],\n };\n });\n /**\n * labelInValue模式入参value item解析\n */\n // const parseLabelInValueItem = hooks.useCallbackRef((item?: TPlainObject | null) => {\n // if (!item) return undefined;\n // return {\n // label: item?.[labelInValueFieldNamesMerge.label],\n // value: item?.[labelInValueFieldNamesMerge.value],\n // disabled: item?.['disabled'],\n // };\n // });\n\n const getResponseTreeNodeList = hooks.useCallbackRef((changeValue: TAny, triggerInfo: TPlainObject) => {\n const valueList = getVauleList(changeValue, { value: 'value', label: 'label' });\n let selectedTreeNodeList = [] as TPlainObject[];\n valueList.forEach((item) => {\n const target = arrayFind(state.treeSelectorTiledArray, item, fieldNamesMerge.value) as TPlainObject;\n if (!target) return;\n selectedTreeNodeList.push(target);\n });\n if (otherProps.treeCheckStrictly && selectedParentCheckedAllChildrenList) {\n const triggerNode = parseDataSourceItem(\n triggerInfo.checked\n ? arrayFind(state.treeSelectorTiledArray, triggerInfo.triggerValue, fieldNamesMerge.value)\n : null,\n );\n if (triggerNode && isArray(triggerNode.children) && triggerNode.children.length > 0) {\n // 判断为父节点\n const allChildrenList = treeToArray(triggerNode.children, fieldNamesMerge.children);\n const selectedChildrenList = allChildrenList.filter((item) => {\n const parseItem = parseDataSourceItem(item);\n if (parseItem?.disabled) return false;\n // 去重\n if (arrayFind(selectedTreeNodeList, parseItem?.value, fieldNamesMerge.value)) return false;\n return true;\n });\n selectedTreeNodeList = selectedTreeNodeList.concat(selectedChildrenList);\n }\n }\n let realTreeNodeList = [] as TPlainObject[];\n if (otherProps.treeCheckable) {\n if (\n otherProps.treeCheckStrictly === true ||\n valueIsEqual(otherProps.showCheckedStrategy, ['SHOW_ALL', 'SHOW_PARENT'])\n ) {\n // 返回包含父节点\n realTreeNodeList = selectedTreeNodeList;\n } else {\n // 返回不包含父节点\n realTreeNodeList = selectedTreeNodeList.filter((item) => {\n const children = item[fieldNamesMerge.children];\n return !(isArray(children) && children.length > 0);\n });\n }\n } else {\n realTreeNodeList = selectedTreeNodeList;\n }\n return {\n realTreeNodeList,\n realTreeNodeValueList: getVauleList(realTreeNodeList, fieldNamesMerge),\n };\n });\n\n const onRespChange = hooks.useCallbackRef((values, selectedValues, triggerInfo) => {\n // setInnerOperateValue(values);\n onChange?.(values, selectedValues, triggerInfo);\n onChangeHandle?.(values, selectedValues, triggerInfo);\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 const { realTreeNodeList, realTreeNodeValueList } = getResponseTreeNodeList(changeValue, triggerInfo);\n if (otherProps.treeCheckable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(realTreeNodeValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n }\n\n if (labelInValue) {\n const labelInValueList = realTreeNodeList.map((item) => {\n const parseItem = parseDataSourceItem(item);\n return {\n [labelInValueFieldNamesMerge.label]: parseItem?.label,\n [labelInValueFieldNamesMerge.value]: parseItem?.value,\n rawData: item,\n };\n });\n\n if (isMultiple) {\n onRespChange?.(labelInValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(labelInValueList[0], realTreeNodeList[0], triggerInfo);\n }\n } else {\n if (isMultiple) {\n onRespChange?.(realTreeNodeValueList, realTreeNodeList, triggerInfo);\n } else {\n onRespChange?.(realTreeNodeValueList[0], realTreeNodeList[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 /**\n * 1. 当 treeCheckable = true,value 数据格式为 labelInValueFieldNames[]\n * 2. 其他情况 value 数据格式为 value[]\n */\n const renderValueList = useMemo(() => {\n const valueList = labelInValue\n ? getVauleList(value, labelInValueFieldNamesMerge)\n : getVauleList(value, fieldNamesMerge);\n if (valueList.length == 0) return [];\n if (otherProps.treeCheckStrictly) {\n if (state.treeSelectorTiledArray.length === 0) {\n return valueList.map((item) => ({ label: item, value: item }));\n }\n return valueList.map((value) => {\n const target = arrayFind(state.treeSelectorTiledArray, value as string, fieldNamesMerge.value);\n const targetParseItem = parseDataSourceItem(target) as TPlainObject;\n return {\n label: getValueOrDefault(targetParseItem?.label, value),\n value: getValueOrDefault(targetParseItem?.value, value),\n };\n });\n }\n return valueList;\n }, [\n labelInValue,\n value,\n labelInValueFieldNamesMerge,\n fieldNamesMerge,\n otherProps.treeCheckStrictly,\n state.treeSelectorTiledArray,\n parseDataSourceItem,\n ]);\n\n const treeSelectValue = useMemo(() => {\n if (isArray(renderValueList) && renderValueList.length === 0) {\n return undefined;\n }\n return isMultiple ? renderValueList : renderValueList[0];\n }, [isMultiple, renderValueList]);\n\n /**\n * 1. 使用 TreeNode 渲染节点,不能重写 fieldNames 配置\n * 2. 使用 TreeNode 是为了实现 TreeNode ICON\n */\n return (\n <TreeSelect\n dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}\n showSearch={true}\n treeLine={{ showLeafIcon: false }}\n treeNodeFilterProp=\"title\"\n switcherIcon={<CaretDownFilled />}\n showArrow\n {...otherProps}\n className={classNames('v-tree-select-wrapper', otherProps.className)}\n popupClassName={classNames('v-tree-select-wrapper-dropdown', otherProps.popupClassName)}\n onChange={onInnerChange}\n treeExpandedKeys={treeExpandedKeys}\n value={treeSelectValue}\n loading={loading}\n dropdownMatchSelectWidth={false}\n onTreeExpand={onTreeExpand}\n style={{ width: '100%', ...otherProps.style }}\n suffixIcon={\n state.requestStatus === 'request-error' ? (\n <RedoOutlined spin={loading} onClick={onAgainRequest} />\n ) : undefined\n }\n notFoundContent={\n <RequestStatus\n status={state.requestStatus}\n messageConfig={requestMessageConfig}\n loading={loading}\n errorButton={\n <Button type=\"primary\" onClick={onAgainRequest}>\n 重新获取数据\n </Button>\n }\n />\n }\n >\n {mapTree(state.treeSelectorList)}\n </TreeSelect>\n );\n};\n"],"names":["defaultState","treeSelectorList","treeSelectorTiledArray","queryIsEmpty","TreeSelectorWrapperModel","actions","setSelectBoxList","params","state","requestStatus","resetSelectBoxList","changeRequestStatus","treeSelectorWrapperModels","treeSelectorWrapperModel","key","Model","getExpandedKeys","value","treeList","fieldNames","_isArray","length","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","tempList","toArray","map","item","_isObject","TreeSelectorWrapper","props","serviceConfig","effectDependencyList","onTreeSelectorListChange","onTreeSelectorRequestError","requestMessageConfig","modelKey","_labelInValue","labelInValue","labelInValueFieldNames","onTreeItemDataAdapter","_props$selectedParent","selectedParentCheckedAllChildrenList","onChange","onChangeHandle","treeDefaultExpandAll","showAllOption","initRootExpand","treeDefaultExpandedKeys","otherProps","_objectWithoutPropertiesLoose","_excluded","hasTreeSelectorList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeSelectorWrapperM","useStore","requestPreKey","isMultiple","treeCheckable","responseFirstRef","useRef","useMemo","treeCheckStrictly","fieldNamesMerge","_extends","label","children","disabled","labelInValueFieldNamesMerge","allOptionConfig","isTrue","isFirstUseValueRef","prevValue","usePrevious","useEffectCustom","current","isUndefinedOrNull","allValues","treeToArray","valueList","expandedKeys","getTreeExpandedKeys","Array","from","Set","valueIsEmpty","serviceResponseHandle","respData","respDataList","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","isEmpty","_respData","_respData2","onRequest","Error","_extend","find","console","warn","join","$Try_1_Post","$boundEx","$Try_1_Catch","error","window","resolve","then","$await_2","onChangeSelectorList","useCustomCompareEffect","Boolean","allState","getState","dequal","dataList","_ref","tempItem","undefined","newdataList","concat","onTreeExpand","onAgainRequest","refresh","newTreeExpandedKeys","forEach","includes","targetList","parseDataSourceItem","getResponseTreeNodeList","changeValue","triggerInfo","selectedTreeNodeList","target","arrayFind","push","triggerNode","checked","triggerValue","allChildrenList","selectedChildrenList","filter","parseItem","realTreeNodeList","valueIsEqual","showCheckedStrategy","realTreeNodeValueList","onRespChange","values","selectedValues","onInnerChange","_data","_getResponseTreeNodeL","prev","mergeList","labelInValueList","_ref2","rawData","mapTree","itemAdapterData","_createElement","TreeSelect","TreeNode","title","renderValueList","targetParseItem","getValueOrDefault","treeSelectValue","_jsx","dropdownStyle","maxHeight","overflow","showSearch","treeLine","showLeafIcon","treeNodeFilterProp","switcherIcon","_CaretDownFilled","showArrow","className","_classNames","popupClassName","dropdownMatchSelectWidth","style","width","suffixIcon","_RedoOutlined","spin","onClick","notFoundContent","RequestStatus","status","messageConfig","errorButton","Button","type"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.v-tree-wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.v-tree-wrapper .ant-tree-list-holder-inner{overflow:hidden}.v-tree-wrapper-loading{left:50%;position:absolute;top:50%;z-index:9}.v-tree-wrapper-search{flex:1}.v-tree-wrapper-tree-wrapper{flex:1;overflow:hidden;position:relative}.v-tree-wrapper-tree-wrapper>.ant-spin{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:9}.v-tree-wrapper-tree{height:100%;overflow:auto;position:relative}.v-tree-wrapper-tree .ant-tree-title{align-items:center;display:flex;flex:1;position:relative}.v-tree-wrapper-tree .tree-item-title{flex:1;
|
|
1
|
+
.v-tree-wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.v-tree-wrapper .ant-tree-list-holder-inner{overflow:hidden}.v-tree-wrapper-loading{left:50%;position:absolute;top:50%;z-index:9}.v-tree-wrapper-search{flex:1}.v-tree-wrapper-tree-wrapper{flex:1;overflow:hidden;position:relative}.v-tree-wrapper-tree-wrapper>.ant-spin{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:9}.v-tree-wrapper-tree{height:100%;overflow:auto;position:relative}.v-tree-wrapper-tree .ant-tree-title{align-items:center;display:flex;flex:1;overflow:hidden;position:relative}.v-tree-wrapper-tree .tree-item-title{display:inline-flex;flex:1;overflow:hidden;padding:1px 0}.v-tree-wrapper-tree .anticon-more{display:none;font-weight:700}.v-tree-wrapper-tree .tree-item-title-operate{display:none;margin-left:5px}.v-tree-wrapper-tree .ant-tree-node-selected .anticon-more,.v-tree-wrapper-tree .ant-tree-node-selected .tree-item-title-operate{display:inline-flex}.v-tree-wrapper-tree .ant-tree-node-content-wrapper{display:flex;overflow:hidden}.tree-wrapper-empty{position:relative}.tree-wrapper-empty .ant-empty{margin:8px 0}.tree-wrapper-empty .ant-spin{left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.site-tree-search-value{color:red}.v-tree-item-disabled{opacity:.5}.tree-item-title-operate .ant-btn{height:auto;padding:0 3px;width:auto}.v-tree-wrapper-menu-hover .ant-tree-node-content-wrapper:hover .anticon-more,.v-tree-wrapper-menu-hover .ant-tree-node-content-wrapper:hover .tree-item-title-operate{display:inline-flex}.v-tree-wrapper-search-area{align-items:center;display:flex;margin-bottom:12px}.v-tree-wrapper-search-extra{margin-left:12px}
|
|
@@ -13,5 +13,5 @@ import './../flex-layout/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,treeToTiledArray as r,treeLeafParentsArray as t,isUndefinedOrNull as n,treeFilter as a,attachPropertiesToComponent as i}from"@flatbiz/utils";import{isArray as l}from"@dimjs/lang/cjs/is-array";import{Model as s}from"@dimjs/model-react";import o from"@ant-design/icons/es/icons/CaretDownFilled";import u from"@ant-design/icons/es/icons/MoreOutlined";import{classNames as c}from"@dimjs/utils/cjs/class-names";import{extend as d}from"@dimjs/utils/cjs/extend";import{hooks as f}from"@wove/react/cjs/hooks";import{a as v,_ as p}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{cloneState as m}from"@dimjs/model";import{Spin as h,Tree as g,Button as y,message as b}from"antd";import{forwardRef as L,useState as w,useMemo as C,useRef as j,useImperativeHandle as N,Fragment as R,isValidElement as q}from"react";import{ButtonOperate as k}from"../button-operate/index.js";import{DropdownMenuWrapper as x}from"../dropdown-menu-wrapper/index.js";import{fbaHooks as S}from"../fba-hooks/index.js";import{InputSearchWrapper as T}from"../input-search-wrapper/index.js";import{RequestStatus as P}from"../request-status/index.js";import{tree as D}from"@dimjs/utils/cjs/tree";import{isObject as A}from"@dimjs/lang/cjs/is-object";import"dequal";import{jsxs as E,jsx as _}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-undefined";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-string";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../config-provider-wrapper/index.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"../index-ac189a77.js";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"../use-responsive-point-21b8c601.js";var I={treeList:[],treeTiledArray:[],queryIsEmpty:false};var O={actions:{setTreeList:function r(t){return function(r){r.treeList=t.treeList||[];r.treeTiledArray=e(r.treeList,t.childrenName);r.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[];e.treeTiledArray=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r;if(r==="request-error"){e.treeList=[];e.treeTiledArray=[]}}},treeListAppendChildren:function r(t){return function(r){var n=e(r.treeList,t.childrenName);var a=n.find((function(e){return e[t.valueName]===t.value}));if(a){if(l(t.appendList)&&t.appendList.length>0){a[t.childrenName]=t.appendList}else{a.isLeaf=true}}r.treeTiledArray=e(r.treeList,t.childrenName)}}},state:I};var V={};var F=function e(r){if(!V[r]){V[r]=s(O)}return V[r]};var K=function e(r){var t=F(r).getState();return t.treeList};var M=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 U=function e(n,a,i){var l=r(a,i);return t(n,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 z=function e(r,t){var a=n(r)?[]:r;a=l(a)?a:[a];a=a.map((function(e){if(A(e))return e[t.value];return e}));return a};var H=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 o=t.value;var u=t.children;var c=function e(r,t,n){for(var a=0;a<r.length;a++){if(r[a][o]===t){return n(r[a],a,r)}if(r[a][u]){e(r[a][u],t,n)}}};var d=m(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[u]=e[u]||[];e[u].unshift(f)}))}else if((n.node.props.children||[]).length>0&&n.node.props.expanded&&s===1){c(d,a,(function(e){e[u]=e[u]||[];e[u].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:B(i,d,t)}};var B=function r(t,n,a){var i;var l=a.value;var s=a.children;D.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 o=e(n,s);var u=o.find((function(e){return e[l]===t}));return{parentId:u==null?void 0:u["__parentId"],id:u==null?void 0:u[l],index:u==null?void 0:u["__index"]}};var Y=["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"];var G=L((function(e,r){var t=e.style,i=e.serviceConfig,s=e.effectDependencyList,L=e.selectorTreeList,D=e.value,A=e.onChange,I=e.modelKey,O=e.checkableResponseParentNode,V=O===void 0?true:O,K=e.checkable,B=e.onSelectorTreeListChange,G=e.onRequestResponseChange,W=e.treeItemDataAdapter,J=e.searchValue,Q=e.showSearch,X=e.searchPlaceholder,Z=e.requestMessageConfig,$=e.labelInValueFieldNames,ee=e.labelInValue,re=e.disabledCanUse,te=e.menuLayoutType,ne=e.menuTriggerType,ae=e.initRootExpand,ie=e.searchResultType,le=e.onDropNodeHandle,se=e.onDropPrev,oe=e.labelRender,ue=e.searchStyle,ce=e.className,de=e.defaultExpandAll,fe=e.menus,ve=v(e,Y);var pe=e.hasOwnProperty("selectorTreeList");var me=i||{};var he=s||[];var ge=w([]),ye=ge[0],be=ge[1];var Le=F(I).useStore(),we=Le[0],Ce=Le[1];var je=S.useSafeState(false),Ne=je[0],Re=je[1];var qe="request-progress-"+e.modelKey;var ke=C((function(){return p({label:"label",value:"value",children:"children"},e.fieldNames)}),[e.fieldNames]);var xe=te===undefined?"fold":te;var Se=ne===undefined?"click":ne;var Te=j(true);var Pe=C((function(){return p({label:"label",value:"value"},$)}),[$]);var De=w(),Ae=De[0],Ee=De[1];var _e=j();var Ie=C((function(){return z(D,Pe)}),[Pe,D]);S.useEffectCustom((function(){if(we.treeList.length>0){if(Te.current){Te.current=false;if(de){be(M(we.treeList,ke));return}else if(ae&&we.treeList.length){be([we.treeList[0][ke.value]]);return}}if(!n(D)){var e=Me(Ie,true);be(Array.from(new Set(ye==null?void 0:ye.concat(e))))}}}),[D,we.treeList,Ie]);var Oe=function e(r){return r===""||n(r)};var Ve=function e(r){return me.onRequestResultAdapter?me.onRequestResultAdapter(r):r};S.useEffectCustom((function(){Ee(J)}),[J]);var Fe=f.useCallbackRef((function(){return new Promise((function(e,r){var t,n,a,i,l,s;var o=function(){try{return e()}catch(e){return r(e)}};var u=function(e){try{Te.current=false;Re(false);void b.error(e.message||"数据查询异常...");return o()}catch(e){return r(e)}};try{if(!me.onRequest){throw new Error("onRequest 调用接口服务不能为空")}t=me.requiredParamsKeys;n=d({},me.params);if(t){a=t.find((function(e){return Oe(n[e])}));if(a){console.warn("TreeWrapper组件:参数:"+t.join("、")+"不能为空");return e()}}var c=function(){try{return o()}catch(e){return u(e)}};var f=function(e){try{window[qe]=false;Re(false);void Ce.changeRequestStatus("request-error");return c()}catch(e){return u(e)}};try{Re(true);return Promise.resolve(Ce.changeRequestStatus("request-progress")).then((function(e){try{window[qe]=true;return Promise.resolve(me.onRequest==null?void 0:me.onRequest(n)).then((function(e){try{i=e;G==null?void 0:G(i);l=Ve(i);s=l||[];if(s.length===0){Te.current=false}Ke(s);Re(false);window[qe]=false;return c()}catch(e){return f(e)}}),f)}catch(e){return f(e)}}),f)}catch(e){f(e)}}catch(e){u(e)}}))}));S.useEffectCustom((function(){if(pe)return;if(he.length){void Fe();return}var e=F(I).getState();if(e.requestStatus==="request-success"){B==null?void 0:B(e.treeList);return}if(!window[qe]){void Fe()}else{B==null?void 0:B(e.treeList)}}),he);S.useEffectCustom((function(){if(pe){Ke(L||[])}}),[L]);var Ke=f.useCallbackRef((function(e){if((e==null?void 0:e.length)===0&&we.treeList.length===0){void Ce.changeRequestStatus("request-success");return}void Ce.setTreeList({treeList:e||[],childrenName:ke.children});B==null?void 0:B(e)}));var Me=function e(r,t){var n=[];r.forEach((function(e){if(!t&&ye!=null&&ye.includes(e))return;var r=U(e,we.treeList,ke);n=n.concat(r)}));return n};f.useUpdateEffect((function(){if(Ae){var e=we.treeTiledArray.filter((function(e){var r=e[ke.label]||"";return String(r).toLowerCase().includes(Ae.toLowerCase())}));be((function(r){var t=e.map((function(e){return e[ke.value]})).concat(r||[]);var n=Me(t);return Array.from(new Set(n))}))}else{be([])}}),[Ae]);N(r,(function(){return{onClearSelectorList:function e(){void Ce.resetTreeList()},getTreeDataList:function e(){return we.treeList},onChangeExpandedKeys:function e(r){be(r)}}}));var Ue=f.useCallbackRef((function(e){be(e)}));var ze=f.useCallbackRef((function(e,r,t,a){_e.current=e;var i=n(r)?[]:l(r)?r:[r];if(n(e)){A==null?void 0:A(e,r,t);return}if(ee){var s=Pe.label;var o=Pe.value;var u=i.map((function(e){var r;return r={},r[s]=e[ke.label],r[o]=e[ke.value],r}));if(l(e)){A==null?void 0:A(u,i,t,a)}else{A==null?void 0:A(u[0],i[0],t,a)}}else{if(l(e)){A==null?void 0:A(e,i,t,a)}else{A==null?void 0:A(e,i[0],t,a)}}}));var He=f.useCallbackRef((function(r,t){var a=n(r)?[]:r;a=e.checkStrictly?r.checked:r;a=l(a)?a:[a];var i=[];var s=[];var o=[];var u=[];a.forEach((function(e){var r=we.treeTiledArray.find((function(r){return r[ke.value]===e}));if(!r)return;var t=r==null?void 0:r[ke.children];if(!l(t)||t.length===0){i.push(r);s.push(r[ke.value])}o.push(r);u.push(r[ke.value])}));if(K){be((function(e){var r=Me(s).concat(e||[]);return Array.from(new Set(r))}));if(!V&&!e.checkStrictly){ze(s,i,o,t)}else{ze(u,o,o,t)}}else{if(a[0]){var c=o.find((function(e){return e[ke.value]===a[0]}));ze(a[0],c,[c],t)}else{var d=t.node[ke.value];var f=we.treeTiledArray.find((function(e){return e[ke.value]===d}));ze(undefined,f,[f],t)}}}));var Be=f.useCallbackRef((function(e){return W==null?void 0:W(e)}));var Ye=C((function(){var e=m(we.treeList||[]);if(Ae&&ie!=="highlight"){return a(m(we.treeList||[]),(function(e){var r;var t=(r=e[ke.label])==null?void 0:r.toLowerCase();return t.indexOf(Ae.toLowerCase())>=0}),{childrenName:ke.children})}return e}),[ke.children,ke.label,ie,we.treeList,Ae]);var Ge=C((function(){var e=function e(r){return r==null?void 0:r.map((function(r){var t,n;var a=(Be==null?void 0:Be(r))||r;var i=re?undefined:a.disabled;var s=(t=a[ke.label])==null?void 0:t.toLowerCase();var o;if(Ae){var u=s.indexOf(Ae.toLowerCase());var d=s.substring(0,u);var f=s.slice(u+Ae.length);var v=s.slice(u,u+Ae.length);o=u>-1?E("span",{className:c({"v-tree-item-disabled":a.disabled}),children:[d,_("span",{className:"site-tree-search-value",children:v}),f]}):null}if(!o&&a.disabled){o=_("span",{className:c({"v-tree-item-disabled":a.disabled}),children:s})}var m=a[ke.children];return p({},a,(n={disabled:i},n[ke.label]=o||s,n._treeItemName=s,n._disabled=a.disabled,n[ke.children]=l(m)&&m.length>0?e(m):undefined,n))}))};return e(Ye)}),[Ye,Be,re,ke.label,ke.children,Ae]);var We=f.useCallbackRef((function(r){return new Promise((function(t,n){return new Promise((function(a,i){var l,s,o,u;if(r[ke.children]){t();return a()}var c=function(){try{return a()}catch(e){return i(e)}};var d=function(e){try{void b.error(e.message||"数据加载异常...");n();return c()}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(e){try{o=e;u=me.onRequestResultAdapter?me.onRequestResultAdapter(o):o;void Ce.treeListAppendChildren({value:r[ke.value],appendList:u,childrenName:ke.children,valueName:ke.value}).then((function(e){Ke(e.treeList);t()}));return c()}catch(e){return d(e)}}),d)}catch(e){d(e)}}))}))}));var Je=f.useCallbackRef((function(r){var t=r==null?void 0:r[ke.children];var n=e.loadDataFlag;var a=n?!r.isLeaf:false;var i=t&&t.length>0||a;return!i}));var Qe=f.useCallbackRef((function(r){var t,n,a;var i=r._treeItemName||r[ke.label];var l=fe==null?void 0:fe(p({},r,(t={},t[ke.label]=i,t)));if(l){return E(R,{children:[_("span",{className:"tree-item-title",children:(oe==null?void 0:oe(r))||(r==null?void 0:r[ke.label])}),_(k,p({gap:5},l,{dropdownMenuProps:p({placement:"bottomRight",isFixed:true},l==null?void 0:l.dropdownMenuProps),className:c("tree-item-title-operate",l.className)}))]})}if(xe==="fold"){var s;var o=[];if((s=e.menuOptions)!=null&&s.fold){var d,f,v;o=((d=e.menuOptions)==null||(f=d[xe])==null?void 0:f.call(d,p({},r,(v={},v[ke.label]=i,v))))||[]}else{var m;o=(e.getMenuOptions==null?void 0:e.getMenuOptions(p({},r,(m={},m[ke.label]=i,m))))||[]}return E(R,{children:[_("span",{className:"tree-item-title",children:(oe==null?void 0:oe(r))||(r==null?void 0:r[ke.label])}),o.length>0&&_(x,{menuList:o,placement:"bottomRight",children:_(u,{})})]})}var h=(n=e.menuOptions)==null||n.tile==null?void 0:n.tile(p({},r,(a={},a[ke.label]=i,a)));return E(R,{children:[_("span",{className:"tree-item-title",children:(oe==null?void 0:oe(r))||(r==null?void 0:r[ke.label])}),h?_(k,p({gap:5},h,{className:c("tree-item-title-operate",h.className)})):null]})}));var Xe=f.useDebounceCallback((function(r){Ee(r);e.onSearchValueChange==null?void 0:e.onSearchValueChange(r)}),300);var Ze=f.useCallbackRef((function(e){Xe(e.target.value)}));var $e=f.useCallbackRef((function(r){if(!e.icon)return null;if(q(e.icon))return e.icon;var t=Je(r.data);return e.icon(p({},r,{isParent:!t,isLeaf:t}))}));var er=C((function(){return{title:ke.label,key:ke.value,children:ke.children}}),[ke]);var rr=Ge.length>0&&we.requestStatus!=="request-error";var tr=p({showLine:{showLeafIcon:false},titleRender:Qe,blockNode:true,switcherIcon:_(o,{}),onDrop:function e(r){if(se){var t=se(r);if(!t)return}var n=H(Ye,ke,r),a=n.dataList,i=n.dragNodeData;le==null?void 0:le(i);Ke(a)},expandedKeys:ye},ve,{fieldNames:er,treeData:Ge,onExpand:Ue,loadData:e.loadDataFlag?We:undefined,style:{width:"100%"},icon:$e});var nr={onCheck:He,checkable:K,checkedKeys:Ie};var ar={onSelect:He,multiple:false,selectedKeys:Ie};var ir=K?nr:ar;var lr=c("v-tree-wrapper","v-tree-wrapper-menu-"+Se,ce);var sr=we.treeList.length>0&&!rr&&Ae;return E("div",{className:lr,style:t,children:[!!Q&&E("div",{className:"v-tree-wrapper-search-area",style:ue,children:[_(T,{className:"v-tree-wrapper-search",placeholder:n(X)?"搜索":X,onChange:Ze,value:J,allowClear:true}),!!e.searchExtraElement&&_("span",{className:"v-tree-wrapper-search-extra",children:e.searchExtraElement})]}),rr?E("div",{className:"v-tree-wrapper-tree-wrapper",children:[_(h,{spinning:we.requestStatus==="request-progress"}),_(g,p({},ir,tr,{className:"v-tree-wrapper-tree"}))]}):_(P,{status:we.requestStatus,loading:Ne,messageConfig:p({"request-success":sr?"搜索结果为空":"暂无数据"},Z),errorButton:_(y,{type:"primary",onClick:Fe,children:"重新获取数据"})})]})}));G.defaultProps={disabledCanUse:true};var W=i(G,{getTreeDataList:K});export{W as TreeWrapper};
|
|
16
|
+
import{treeToArray as e,treeToTiledArray as r,treeLeafParentsArray as t,isUndefinedOrNull as n,treeFilter as a,attachPropertiesToComponent as i}from"@flatbiz/utils";import{isArray as l}from"@dimjs/lang/cjs/is-array";import{Model as s}from"@dimjs/model-react";import o from"@ant-design/icons/es/icons/CaretDownFilled";import u from"@ant-design/icons/es/icons/MoreOutlined";import{classNames as c}from"@dimjs/utils/cjs/class-names";import{extend as d}from"@dimjs/utils/cjs/extend";import{hooks as f}from"@wove/react/cjs/hooks";import{get as v}from"@dimjs/utils/cjs/get";import{a as p,_ as m}from"../_rollupPluginBabelHelpers-fc015ef2.js";import{cloneState as h}from"@dimjs/model";import{Spin as g,Tree as y,Button as b,message as L}from"antd";import{forwardRef as w,useState as j,useMemo as C,useRef as N,useImperativeHandle as R,Fragment as q,isValidElement as k}from"react";import{ButtonOperate as x}from"../button-operate/index.js";import{DropdownMenuWrapper as S}from"../dropdown-menu-wrapper/index.js";import{fbaHooks as T}from"../fba-hooks/index.js";import{InputSearchWrapper as P}from"../input-search-wrapper/index.js";import{RequestStatus as D}from"../request-status/index.js";import{tree as A}from"@dimjs/utils/cjs/tree";import{isObject as E}from"@dimjs/lang/cjs/is-object";import"dequal";import{jsxs as _,jsx as I}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-undefined";import"@dimjs/lang/cjs/is-plain-object";import"@dimjs/lang/cjs/is-string";import"@dimjs/lang/cjs/is-promise";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../config-provider-wrapper/index.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"../index-ac189a77.js";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"../use-responsive-point-21b8c601.js";var O={treeList:[],treeTiledArray:[],queryIsEmpty:false};var V={actions:{setTreeList:function r(t){return function(r){r.treeList=t.treeList||[];r.treeTiledArray=e(r.treeList,t.childrenName);r.requestStatus="request-success"}},resetTreeList:function e(){return function(e){e.treeList=[];e.treeTiledArray=[]}},changeRequestStatus:function e(r){return function(e){e.requestStatus=r;if(r==="request-error"){e.treeList=[];e.treeTiledArray=[]}}},treeListAppendChildren:function r(t){return function(r){var n=e(r.treeList,t.childrenName);var a=n.find((function(e){return e[t.valueName]===t.value}));if(a){if(l(t.appendList)&&t.appendList.length>0){a[t.childrenName]=t.appendList}else{a.isLeaf=true}}r.treeTiledArray=e(r.treeList,t.childrenName)}}},state:O};var F={};var K=function e(r){if(!F[r]){F[r]=s(V)}return F[r]};var M=function e(r){var t=K(r).getState();return t.treeList};var U=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 z=function e(n,a,i){var l=r(a,i);return t(n,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 H=function e(r,t){var a=n(r)?[]:r;a=l(a)?a:[a];a=a.map((function(e){if(E(e))return e[t.value];return e}));return a};var B=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 o=t.value;var u=t.children;var c=function e(r,t,n){for(var a=0;a<r.length;a++){if(r[a][o]===t){return n(r[a],a,r)}if(r[a][u]){e(r[a][u],t,n)}}};var d=h(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[u]=e[u]||[];e[u].unshift(f)}))}else if((n.node.props.children||[]).length>0&&n.node.props.expanded&&s===1){c(d,a,(function(e){e[u]=e[u]||[];e[u].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:Y(i,d,t)}};var Y=function r(t,n,a){var i;var l=a.value;var s=a.children;A.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 o=e(n,s);var u=o.find((function(e){return e[l]===t}));return{parentId:u==null?void 0:u["__parentId"],id:u==null?void 0:u[l],index:u==null?void 0:u["__index"]}};var G=["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"];var W=w((function(e,r){var t=e.style,i=e.serviceConfig,s=e.effectDependencyList,w=e.selectorTreeList,A=e.value,E=e.onChange,O=e.modelKey,V=e.checkableResponseParentNode,F=V===void 0?true:V,M=e.checkable,Y=e.onSelectorTreeListChange,W=e.onRequestResponseChange,J=e.treeItemDataAdapter,Q=e.searchValue,X=e.showSearch,Z=e.searchPlaceholder,$=e.requestMessageConfig,ee=e.labelInValueFieldNames,re=e.labelInValue,te=e.disabledCanUse,ne=e.menuLayoutType,ae=e.menuTriggerType,ie=e.initRootExpand,le=e.searchResultType,se=e.onDropNodeHandle,oe=e.onDropPrev,ue=e.labelRender,ce=e.searchStyle,de=e.className,fe=e.defaultExpandAll,ve=e.menus,pe=p(e,G);var me=e.hasOwnProperty("selectorTreeList");var he=i||{};var ge=s||[];var ye=j([]),be=ye[0],Le=ye[1];var we=K(O).useStore(),je=we[0],Ce=we[1];var Ne=T.useSafeState(false),Re=Ne[0],qe=Ne[1];var ke="request-progress-"+e.modelKey;var xe=C((function(){return m({label:"label",value:"value",children:"children"},e.fieldNames)}),[e.fieldNames]);var Se=ne===undefined?"fold":ne;var Te=ae===undefined?"click":ae;var Pe=N(true);var De=C((function(){return m({label:"label",value:"value"},ee)}),[ee]);var Ae=j(),Ee=Ae[0],_e=Ae[1];var Ie=N();var Oe=C((function(){return H(A,De)}),[De,A]);T.useEffectCustom((function(){if(je.treeList.length>0){if(Pe.current){Pe.current=false;if(fe){Le(U(je.treeList,xe));return}else if(ie&&je.treeList.length){Le([je.treeList[0][xe.value]]);return}}if(!n(A)){var e=Ue(Oe,true);Le(Array.from(new Set(be==null?void 0:be.concat(e))))}}}),[A,je.treeList,Oe]);var Ve=function e(r){return r===""||n(r)};var Fe=function e(r){if(he.onRequestResultAdapter){return he.onRequestResultAdapter(r)}if(xe.list){return v(r,xe.list,[])||[]}if(!l(r)){console.warn("接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析");return[]}return r};T.useEffectCustom((function(){_e(Q)}),[Q]);var Ke=f.useCallbackRef((function(){return new Promise((function(e,r){var t,n,a,i,l,s;var o=function(){try{return e()}catch(e){return r(e)}};var u=function(e){try{Pe.current=false;qe(false);void L.error(e.message||"数据查询异常...");return o()}catch(e){return r(e)}};try{if(!he.onRequest){throw new Error("onRequest 调用接口服务不能为空")}t=he.requiredParamsKeys;n=d({},he.params);if(t){a=t.find((function(e){return Ve(n[e])}));if(a){console.warn("TreeWrapper组件:参数:"+t.join("、")+"不能为空");return e()}}var c=function(){try{return o()}catch(e){return u(e)}};var f=function(e){try{window[ke]=false;qe(false);void Ce.changeRequestStatus("request-error");return c()}catch(e){return u(e)}};try{qe(true);return Promise.resolve(Ce.changeRequestStatus("request-progress")).then((function(e){try{window[ke]=true;return Promise.resolve(he.onRequest==null?void 0:he.onRequest(n)).then((function(e){try{i=e;W==null?void 0:W(i);l=Fe(i);s=l||[];if(s.length===0){Pe.current=false}Me(s);qe(false);window[ke]=false;return c()}catch(e){return f(e)}}),f)}catch(e){return f(e)}}),f)}catch(e){f(e)}}catch(e){u(e)}}))}));T.useEffectCustom((function(){if(me)return;if(ge.length){void Ke();return}var e=K(O).getState();if(e.requestStatus==="request-success"){Y==null?void 0:Y(e.treeList);return}if(!window[ke]){void Ke()}else{Y==null?void 0:Y(e.treeList)}}),ge);T.useEffectCustom((function(){if(me){Me(w||[])}}),[w]);var Me=f.useCallbackRef((function(e){if((e==null?void 0:e.length)===0&&je.treeList.length===0){void Ce.changeRequestStatus("request-success");return}void Ce.setTreeList({treeList:e||[],childrenName:xe.children});Y==null?void 0:Y(e)}));var Ue=function e(r,t){var n=[];r.forEach((function(e){if(!t&&be!=null&&be.includes(e))return;var r=z(e,je.treeList,xe);n=n.concat(r)}));return n};f.useUpdateEffect((function(){if(Ee){var e=je.treeTiledArray.filter((function(e){var r=e[xe.label]||"";return String(r).toLowerCase().includes(Ee.toLowerCase())}));Le((function(r){var t=e.map((function(e){return e[xe.value]})).concat(r||[]);var n=Ue(t);return Array.from(new Set(n))}))}else{Le([])}}),[Ee]);R(r,(function(){return{onClearSelectorList:function e(){void Ce.resetTreeList()},getTreeDataList:function e(){return je.treeList},onChangeExpandedKeys:function e(r){Le(r)}}}));var ze=f.useCallbackRef((function(e){Le(e)}));var He=f.useCallbackRef((function(e,r,t,a){Ie.current=e;var i=n(r)?[]:l(r)?r:[r];if(n(e)){E==null?void 0:E(e,r,t);return}if(re){var s=De.label;var o=De.value;var u=i.map((function(e){var r;return r={},r[s]=e[xe.label],r[o]=e[xe.value],r}));if(l(e)){E==null?void 0:E(u,i,t,a)}else{E==null?void 0:E(u[0],i[0],t,a)}}else{if(l(e)){E==null?void 0:E(e,i,t,a)}else{E==null?void 0:E(e,i[0],t,a)}}}));var Be=f.useCallbackRef((function(r,t){var a=n(r)?[]:r;a=e.checkStrictly?r.checked:r;a=l(a)?a:[a];var i=[];var s=[];var o=[];var u=[];a.forEach((function(e){var r=je.treeTiledArray.find((function(r){return r[xe.value]===e}));if(!r)return;var t=r==null?void 0:r[xe.children];if(!l(t)||t.length===0){i.push(r);s.push(r[xe.value])}o.push(r);u.push(r[xe.value])}));if(M){Le((function(e){var r=Ue(s).concat(e||[]);return Array.from(new Set(r))}));if(!F&&!e.checkStrictly){He(s,i,o,t)}else{He(u,o,o,t)}}else{if(a[0]){var c=o.find((function(e){return e[xe.value]===a[0]}));He(a[0],c,[c],t)}else{var d=t.node[xe.value];var f=je.treeTiledArray.find((function(e){return e[xe.value]===d}));He(undefined,f,[f],t)}}}));var Ye=f.useCallbackRef((function(e){return J==null?void 0:J(e)}));var Ge=C((function(){var e=h(je.treeList||[]);if(Ee&&le!=="highlight"){return a(h(je.treeList||[]),(function(e){var r;var t=(r=e[xe.label])==null?void 0:r.toLowerCase();return t.indexOf(Ee.toLowerCase())>=0}),{childrenName:xe.children})}return e}),[xe.children,xe.label,le,je.treeList,Ee]);var We=C((function(){var e=function e(r){return r==null?void 0:r.map((function(r){var t,n;var a=(Ye==null?void 0:Ye(r))||r;var i=te?undefined:a.disabled;var s=(t=a[xe.label])==null?void 0:t.toLowerCase();var o;if(Ee){var u=s.indexOf(Ee.toLowerCase());var d=s.substring(0,u);var f=s.slice(u+Ee.length);var v=s.slice(u,u+Ee.length);o=u>-1?_("span",{className:c({"v-tree-item-disabled":a.disabled}),children:[d,I("span",{className:"site-tree-search-value",children:v}),f]}):null}if(!o&&a.disabled){o=I("span",{className:c({"v-tree-item-disabled":a.disabled}),children:s})}var p=a[xe.children];return m({},a,(n={disabled:i},n[xe.label]=o||s,n._treeItemName=s,n._disabled=a.disabled,n[xe.children]=l(p)&&p.length>0?e(p):undefined,n))}))};return e(Ge)}),[Ge,Ye,te,xe.label,xe.children,Ee]);var Je=f.useCallbackRef((function(r){return new Promise((function(t,n){return new Promise((function(a,i){var l,s,o,u;if(r[xe.children]){t();return a()}var c=function(){try{return a()}catch(e){return i(e)}};var d=function(e){try{void L.error(e.message||"数据加载异常...");n();return c()}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(e){try{o=e;u=he.onRequestResultAdapter?he.onRequestResultAdapter(o):o;void Ce.treeListAppendChildren({value:r[xe.value],appendList:u,childrenName:xe.children,valueName:xe.value}).then((function(e){Me(e.treeList);t()}));return c()}catch(e){return d(e)}}),d)}catch(e){d(e)}}))}))}));var Qe=f.useCallbackRef((function(r){var t=r==null?void 0:r[xe.children];var n=e.loadDataFlag;var a=n?!r.isLeaf:false;var i=t&&t.length>0||a;return!i}));var Xe=f.useCallbackRef((function(r){var t,n,a;var i=r._treeItemName||r[xe.label];var l=ve==null?void 0:ve(m({},r,(t={},t[xe.label]=i,t)));if(l!=null&&l.operateList.length){return _(q,{children:[I("span",{className:"tree-item-title",children:(ue==null?void 0:ue(r))||(r==null?void 0:r[xe.label])}),I(x,m({gap:5},l,{dropdownMenuProps:m({placement:"bottomRight",isFixed:true},l==null?void 0:l.dropdownMenuProps),className:c("tree-item-title-operate",l.className)}))]})}if(Se==="fold"){var s;var o=[];if((s=e.menuOptions)!=null&&s.fold){var d,f,v;o=((d=e.menuOptions)==null||(f=d[Se])==null?void 0:f.call(d,m({},r,(v={},v[xe.label]=i,v))))||[]}else{var p;o=(e.getMenuOptions==null?void 0:e.getMenuOptions(m({},r,(p={},p[xe.label]=i,p))))||[]}return _(q,{children:[I("span",{className:"tree-item-title",children:(ue==null?void 0:ue(r))||(r==null?void 0:r[xe.label])}),o.length>0&&I(S,{menuList:o,placement:"bottomRight",children:I(u,{})})]})}var h=(n=e.menuOptions)==null||n.tile==null?void 0:n.tile(m({},r,(a={},a[xe.label]=i,a)));return _(q,{children:[I("span",{className:"tree-item-title",children:(ue==null?void 0:ue(r))||(r==null?void 0:r[xe.label])}),h?I(x,m({gap:5},h,{className:c("tree-item-title-operate",h.className)})):null]})}));var Ze=f.useDebounceCallback((function(r){_e(r);e.onSearchValueChange==null?void 0:e.onSearchValueChange(r)}),300);var $e=f.useCallbackRef((function(e){Ze(e.target.value)}));var er=f.useCallbackRef((function(r){if(!e.icon)return null;if(k(e.icon))return e.icon;var t=Qe(r.data);return e.icon(m({},r,{isParent:!t,isLeaf:t}))}));var rr=C((function(){return{title:xe.label,key:xe.value,children:xe.children}}),[xe]);var tr=We.length>0&&je.requestStatus!=="request-error";var nr=m({showLine:{showLeafIcon:false},titleRender:Xe,blockNode:true,switcherIcon:I(o,{}),onDrop:function e(r){if(oe){var t=oe(r);if(!t)return}var n=B(Ge,xe,r),a=n.dataList,i=n.dragNodeData;se==null?void 0:se(i);Me(a)},expandedKeys:be},pe,{fieldNames:rr,treeData:We,onExpand:ze,loadData:e.loadDataFlag?Je:undefined,style:{width:"100%"},icon:er});var ar={onCheck:Be,checkable:M,checkedKeys:Oe};var ir={onSelect:Be,multiple:false,selectedKeys:Oe};var lr=M?ar:ir;var sr=c("v-tree-wrapper","v-tree-wrapper-menu-"+Te,de);var or=je.treeList.length>0&&!tr&&Ee;return _("div",{className:sr,style:t,children:[!!X&&_("div",{className:"v-tree-wrapper-search-area",style:ce,children:[I(P,{className:"v-tree-wrapper-search",placeholder:n(Z)?"搜索":Z,onChange:$e,value:Q,allowClear:true}),!!e.searchExtraElement&&I("span",{className:"v-tree-wrapper-search-extra",children:e.searchExtraElement})]}),tr?_("div",{className:"v-tree-wrapper-tree-wrapper",children:[I(g,{spinning:je.requestStatus==="request-progress"}),I(y,m({},lr,nr,{className:"v-tree-wrapper-tree"}))]}):I(D,{status:je.requestStatus,loading:Re,messageConfig:m({"request-success":or?"搜索结果为空":"暂无数据"},$),errorButton:I(b,{type:"primary",onClick:Ke,children:"重新获取数据"})})]})}));W.defaultProps={disabledCanUse:true};var J=i(W,{getTreeDataList:M});export{J 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 { TAny, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: TRequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend } from '@dimjs/utils';\n\nimport { isUndefinedOrNull, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport { getDefaultExpandAllKeys, getExpandedKeys, getVauleList, onTreeDrop } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n modelKey: string;\n\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n * ```\n */\n fieldNames?: { label?: string; value?: string; children?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /** 异步加载数据配置 */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n // required?: boolean;\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n labelInValue?: boolean;\n /**\n * ```\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义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\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n ...otherProps\n } = props;\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (!isUndefinedOrNull(value)) {\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(expandedKeys))));\n }\n }\n }, [value, state.treeList, valueList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n return (\n newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n const respDataListNew = respData || [];\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\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('request-success');\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n setTreeExpandedKeys((prev) => {\n const mergeValueList = targetList.map((item) => item[fieldNames.value]).concat(prev || []);\n const mergeList = getTreeExpandedKeys(mergeValueList);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?, operateInfo?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList, operateInfo);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList, operateInfo);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList, operateInfo);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList, operateInfo);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode], operateInfo);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target], operateInfo);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n }\n return list;\n }, [fieldNames.children, fieldNames.label, searchResultType, state.treeList, treeSearchValue]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] as string)?.toLowerCase();\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.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 className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\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 className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || 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 newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.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) {\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList as TPlainObject[], fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n","import { attachPropertiesToComponent } from '@flatbiz/utils';\nimport { getTreeDataList } from './hooks';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type * 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 = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","childrenValue","map","getExpandedKeys","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","undefined","_parent","tileList","parentId","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","innerOperateValueRef","valueList","useEffectCustom","current","expandedKeys","getTreeExpandedKeys","Array","from","Set","concat","valueIsEmpty","serviceResponseHandle","respData","onRequestResultAdapter","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","console","warn","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","forEach","includes","targetKeys","useUpdateEffect","targetList","labelValue","String","toLowerCase","prev","mergeValueList","mergeList","useImperativeHandle","onClearSelectorList","onChangeExpandedKeys","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","operateInfo","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","temp","push","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","originalDataList","list","treeFilter","_node$fieldNames$labe","indexOf","treeData","_adapterItem$fieldNam","_extends2","adapterItem","disabled","strTitle","titleDom","beforeStr","substring","afterStr","slice","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","defaultProps","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["@flatbiz/antd/src/tree-wrapper/model.ts","@flatbiz/antd/src/tree-wrapper/hooks.ts","@flatbiz/antd/src/tree-wrapper/utils.ts","@flatbiz/antd/src/tree-wrapper/tree-wrapper.tsx","@flatbiz/antd/src/tree-wrapper/index.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { type API, type ModelType } from '@dimjs/model';\nimport { Model } from '@dimjs/model-react';\nimport { TAny, treeToArray, type TPlainObject, type TSetDefaultDefined } from '@flatbiz/utils';\nimport { type TreeProps } from 'antd';\nimport { TRequestStatus } from '../request-status';\n\nexport type ModelState = {\n treeList: TSetDefaultDefined<TreeProps['treeData'], []>;\n treeTiledArray: TPlainObject[];\n queryIsEmpty: boolean;\n requestStatus?: TRequestStatus;\n};\n\ntype ModelActionParams = {\n setTreeList: {\n treeList: ModelState['treeList'];\n childrenName: string;\n };\n resetTreeList: void;\n changeRequestStatus: TRequestStatus;\n treeListAppendChildren: {\n value: string | number;\n appendList: TPlainObject[];\n childrenName: string;\n valueName: string;\n };\n};\n\nconst defaultState: ModelState = {\n treeList: [],\n treeTiledArray: [],\n queryIsEmpty: false,\n};\n\nconst TreeWrapperModel: ModelType<ModelState, ModelActionParams> = {\n actions: {\n setTreeList: (params) => {\n return (state) => {\n state.treeList = params.treeList || [];\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n state.requestStatus = 'request-success';\n };\n },\n resetTreeList: () => {\n return (state) => {\n state.treeList = [];\n state.treeTiledArray = [];\n };\n },\n changeRequestStatus: (params) => {\n return (state) => {\n state.requestStatus = params;\n if (params === 'request-error') {\n state.treeList = [];\n state.treeTiledArray = [];\n }\n };\n },\n treeListAppendChildren: (params) => {\n return (state) => {\n const array = treeToArray(state.treeList, params.childrenName);\n const target = array.find((item) => item[params.valueName] === params.value);\n if (target) {\n if (isArray(params.appendList) && params.appendList.length > 0) {\n target[params.childrenName] = params.appendList;\n } else {\n target.isLeaf = true;\n }\n }\n state.treeTiledArray = treeToArray(state.treeList, params.childrenName);\n };\n },\n },\n state: defaultState,\n};\n\nconst treeWrapperModels: Record<string, API<ModelType<ModelState, ModelActionParams, TAny>>> = {};\n\n/**\n * ```\n * 使用方式\n * const [state, actions] = useTreeWrapperModel('key值').useStore();\n * ```\n */\nexport const treeWrapperModel = (key: string) => {\n if (!treeWrapperModels[key]) {\n treeWrapperModels[key] = Model(TreeWrapperModel);\n }\n return treeWrapperModels[key];\n};\n","import { type TPlainObject } from '@flatbiz/utils';\nimport { treeWrapperModel } from './model';\n\nexport const getTreeDataList = (modelKey: string) => {\n const state = treeWrapperModel(modelKey).getState();\n return state.treeList as TPlainObject[];\n};\n","import { isArray, isObject } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { tree } from '@dimjs/utils';\nimport {\n isUndefinedOrNull,\n treeLeafParentsArray,\n treeToArray,\n treeToTiledArray,\n type LabelValueItem,\n type TAny,\n type TPlainObject,\n} from '@flatbiz/utils';\nimport { type DataNode } from 'antd/es/tree';\nimport { dequal } from 'dequal';\n\nexport const getDefaultExpandAllKeys = (\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const allValues = treeToArray(treeList, fieldNames.children)\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => {\n return item[fieldNames.value];\n });\n return allValues as Array<string | number>;\n};\n\nexport const getExpandedKeys = (\n value: string | number,\n treeList: TPlainObject[],\n fieldNames: { label: string; value: string; children: string },\n) => {\n const tiledArray = treeToTiledArray(treeList, fieldNames);\n return treeLeafParentsArray(value, tiledArray, true, { value: 'value', parentValue: 'parentValue' })\n .filter((item) => {\n const childrenValue = item[fieldNames.children] as TAny[] | undefined;\n return childrenValue && childrenValue.length > 0;\n })\n .map((item) => item.value);\n};\n\nexport const getVauleList = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n let tempList = isUndefinedOrNull(data) ? [] : data;\n tempList = isArray(tempList) ? tempList : [tempList];\n tempList = tempList.map((item) => {\n if (isObject(item)) return item[labelInValueFieldNames.value];\n return item;\n });\n return tempList as Array<string | number>;\n};\n\nexport const array2map = (data, labelInValueFieldNames: LabelValueItem<string | number>) => {\n const list = getVauleList(data, labelInValueFieldNames);\n const map = {};\n list.forEach((item) => {\n map[item] = true;\n });\n return map;\n};\n\n/**\n * value的类型包括\n * string、number、\n * Array<string | number>、{ label: string, value: string | nuber }、\n * Array<{ label: string, value: string | nuber }>\n * 将数组转成对象,深度比较时不用考虑顺序问题\n * @param value1\n * @param value2\n * @returns\n */\nexport const treeWrapperValueDeepEqual = (\n value1: TAny,\n value2: TAny,\n labelInValueFieldNames: LabelValueItem<string | number>,\n) => {\n if (isUndefinedOrNull(value1) && isUndefinedOrNull(value2)) return true;\n const object1 = array2map(value1, labelInValueFieldNames);\n const object2 = array2map(value2, labelInValueFieldNames);\n return dequal(object1, object2);\n};\n\ntype OnTreeDropMethod = (\n dataList: TPlainObject[],\n fieldNames: { value: string; children: string },\n info: TAny,\n) => {\n dataList: TPlainObject[];\n dragNodeData: {\n parentId?: string | number;\n id: string | number;\n index: number;\n };\n};\n\nexport const onTreeDrop: OnTreeDropMethod = (dataList, fieldNames, info) => {\n const dropKey = info.node.key;\n const dragKey = info.dragNode.key;\n const dropPos = info.node.pos.split('-');\n const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1]);\n const treeKeyName = fieldNames.value;\n const treeChildrenName = fieldNames.children;\n\n const loop = (\n data: DataNode[],\n key: React.Key,\n callback: (node: DataNode, i: number, data: DataNode[]) => void,\n ) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i][treeKeyName] === key) {\n return callback(data[i], i, data);\n }\n if (data[i][treeChildrenName]) {\n loop(data[i][treeChildrenName]!, key, callback);\n }\n }\n };\n const data = cloneState(dataList) as DataNode[];\n\n // Find dragObject\n let dragObj: DataNode;\n loop(data, dragKey, (item, index, arr) => {\n arr.splice(index, 1);\n dragObj = item;\n });\n\n if (!info.dropToGap) {\n // Drop on the content\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n });\n } else if (\n (info.node.props.children || []).length > 0 && // Has children\n info.node.props.expanded && // Is expanded\n dropPosition === 1 // On the bottom gap\n ) {\n loop(data, dropKey, (item) => {\n item[treeChildrenName] = item[treeChildrenName] || [];\n // where to insert 示例添加到头部,可以是随意位置\n item[treeChildrenName].unshift(dragObj);\n // in previous version, we use item.children.push(dragObj) to insert the\n // item to the tail of the children\n });\n } else {\n let ar: DataNode[] = [];\n let i: number;\n loop(data, dropKey, (_item, index, arr) => {\n ar = arr;\n i = index;\n });\n if (dropPosition === -1) {\n ar.splice(i!, 0, dragObj!);\n } else {\n ar.splice(i! + 1, 0, dragObj!);\n }\n }\n return {\n dataList: data,\n dragNodeData: dragNodeData(dragKey, data, fieldNames),\n };\n};\n\nexport const dragNodeData = (\n dorpNodeId: TAny,\n dataList: TAny[],\n fieldNames: { value: string; children: string },\n) => {\n const id = fieldNames.value;\n const children = fieldNames.children;\n tree.walkThroughTree<TPlainObject, TAny>(\n { [id]: undefined, [children]: dataList } as TAny,\n (node, index, _parent) => {\n node['__index'] = index;\n node['__parentId'] = _parent?.[id];\n },\n children,\n );\n const tileList = treeToArray(dataList, children);\n const target = tileList.find((item) => item[id] === dorpNodeId);\n return {\n parentId: target?.['__parentId'],\n id: target?.[id],\n index: target?.['__index'],\n };\n};\n","import { CaretDownFilled, MoreOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames, extend, get } from '@dimjs/utils';\n\nimport { isUndefinedOrNull, treeFilter, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Button, message, Spin, Tree, type TreeProps } from 'antd';\nimport {\n forwardRef,\n Fragment,\n isValidElement,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type DependencyList,\n type ReactElement,\n} from 'react';\n\nimport { treeWrapperModel } from './model';\n\nimport { ButtonOperate, ButtonOperateItem, ButtonOperateProps } from '../button-operate';\nimport { DropdownMenuItem, DropdownMenuWrapper } from '../dropdown-menu-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { InputSearchWrapper } from '../input-search-wrapper';\nimport { RequestStatus, TRequestStatusProps } from '../request-status';\nimport './style.less';\nimport { getDefaultExpandAllKeys, getExpandedKeys, getVauleList, onTreeDrop } from './utils';\n\ntype TreeWrapperValue =\n | string\n | number\n | Array<string | number>\n | TPlainObject<string | number>\n | Array<TPlainObject<string | number>>;\n\ntype TreeServiceConfig = {\n params?: TPlainObject;\n requiredParamsKeys?: string[];\n onRequest?: (params?: TAny) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\ntype TreeLoadDataServiceConfig = {\n getParams?: (dataItem: TPlainObject) => TPlainObject;\n onRequest: (params: TPlainObject) => TAny;\n /**\n * 响应数据适配器\n */\n onRequestResultAdapter?: (respData: TAny) => TPlainObject[];\n};\n\nexport type TreeWrapperMenuItem = {\n title: string;\n onClick: (dataItem: TPlainObject, event) => void;\n icon?: ReactElement;\n};\n\nexport type TreeWrapperProps = Omit<\n TreeProps,\n | 'treeData'\n | 'onExpand'\n | 'selectedKeys'\n | 'checkedKeys'\n | 'onCheck'\n | 'onSelect'\n | 'fieldNames'\n | 'multiple'\n | 'loadData'\n | 'icon'\n | 'defaultCheckedKeys'\n | 'defaultExpandParent'\n | 'defaultSelectedKeys'\n> & {\n /** 唯一值,用于缓存数据 */\n modelKey: string;\n /**\n * 字段映射\n * ```\n * 默认值:\n * label = 'label'\n * value = 'value'\n * children = 'children'\n *\n * 如果未设置list,则说明接口返回数据为数组\n * 如果返回数据存在多级,可通过设置 list='a.b.list'\n * ```\n */\n fieldNames?: { label?: string; value?: string; children?: string; list?: string };\n /**\n * useEffect依赖项数组,用于重新发起获取接口数据\n */\n effectDependencyList?: DependencyList;\n /**\n * 请求服务需求的数据,当设置`selectorTreeList`后无效果\n */\n serviceConfig?: TreeServiceConfig;\n /**\n * 是否开启异步加载\n */\n loadDataFlag?: boolean;\n /**\n * 异步加载数据配置\n * ```\n * 1. 会通过fieldNames配置label、value、children进行转义\n * 2. fieldNames.list 配置在此处无效\n * ```\n */\n loadDataServiceConfig?: TreeLoadDataServiceConfig;\n /**\n * 当设置selectorTreeList后,serviceConfig将失效\n * ```\n * 1. 不支持异步数据,异步使用serviceConfig方式\n * ```\n */\n selectorTreeList?: TPlainObject[];\n /**\n * 通过服务获取数据后回调,当设置`selectorList`后无效果\n * ```\n * 相同modelKey,同时发起多个渲染时,只有第一个会执行 onSelectorTreeListChange 回调\n * ```\n */\n onSelectorTreeListChange?: (dataList: TPlainObject[]) => void;\n /** 接口响应数据变更 */\n onRequestResponseChange?: (data: TAny) => void;\n onChange?: (\n selectedKey?: TreeWrapperValue,\n operateNodeData?: TPlainObject[] | TPlainObject,\n operateAllNodeDataList?: TPlainObject[],\n extraData?: TPlainObject,\n ) => void;\n\n /**\n * 搜索关键字,打开tree折叠过滤关键字\n */\n searchValue?: string;\n /**\n * checkable模式下,onChange是否返回父节点,默认值true\n * 1. checkStrictly = true,模式下失效\n */\n checkableResponseParentNode?: boolean;\n\n /**\n * 菜单结构类型 tile/平铺 fold/折叠;默认:fold\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuLayoutType?: 'tile' | 'fold';\n /**\n * 获取菜单类别\n * @param dataItem\n * @deprecated 已过期 4.3.0版本移除,请使用 menus\n * @returns\n * ```\n * 1. menuLayoutType = tile 无效\n * 2. 自定义设置 titleRender 后失效\n * ```\n */\n getMenuOptions?: (dataItem: TPlainObject) => DropdownMenuItem[] | ButtonOperateItem[];\n /**\n * 根据 menuLayoutType 类型赋值\n * @deprecated 已过期 4.3.0版本移除,请使用 menuOptions\n */\n menuOptions?: {\n tile?: (dataItem: TPlainObject) => ButtonOperateProps;\n fold?: (dataItem: TPlainObject) => DropdownMenuItem[];\n };\n /**\n * 菜单触发类型,默认:click\n * ```\n * 自定义设置 titleRender 后失效\n * ```\n */\n menuTriggerType?: 'click' | 'hover';\n menus?: (dataItem) => ButtonOperateProps;\n\n showSearch?: boolean;\n onSearchValueChange?: (searchValue?: string) => void;\n searchPlaceholder?: string;\n searchStyle?: CSSProperties;\n icon?: (data: { isParent: boolean; isLeaf: boolean; [key: string]: TAny }) => ReactElement;\n /**\n * 是否必选,最后一个不能取消\n */\n // required?: boolean;\n /**\n * 状态文案配置\n */\n requestMessageConfig?: TRequestStatusProps['messageConfig'];\n /**\n * value格式\n *```\n * 1. string 、number\n * 2. Array<string | number>\n * 3. lableInValue = true,根据labelInValueFieldNames配置格式\n * 4. lableInValue = true,Array<labelInValueFieldNames配置>\n * ```\n */\n value?: TreeWrapperValue;\n /**\n * 选择的节点数据,是否包含label信息\n * ```\n * 默认选择的节点只有value数据\n * ```\n */\n labelInValue?: boolean;\n /**\n * ```\n * @deprecated 废弃\n * lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }\n * ```\n */\n labelInValueFieldNames?: { label: string; value: string };\n /**\n * 禁用状态是否可选,默认值true\n * 当dateItem中包含 disabled 则数据为禁用状态\n */\n disabledCanUse?: boolean;\n\n /** treeItem数据适配器 */\n treeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;\n /** 搜索位置额外元素 */\n searchExtraElement?: ReactElement;\n /** 有唯一跟节点时,初始化是否展开,默认值:false */\n initRootExpand?: boolean;\n /** 搜素过滤方式,高亮 | 过滤;默认:filter */\n searchResultType?: 'highlight' | 'filter';\n /**\n * 拖拽节点处理,自定义onDrop事件后,失效\n * ```\n * 参数\n * 1. parentId 拖拽结束位置父节点ID\n * 2. id 当前拖拽节点ID\n * 3. index 拖拽结束位置所在数组下标\n * ```\n */\n onDropNodeHandle?: (result: { parentId?: string | number; id: string | number; index: number }) => void;\n /**\n * 拖拽排序前判断,如果返回 true,可排序,其他不可排序\n * ```\n * 可用于需要权限控制判断\n * ```\n */\n onDropPrev?: (info) => boolean;\n /**\n * 标签渲染\n * ```\n * 1. 自定义设置 titleRender 后失效\n * 2. 与titleRender的区别\n * a. 设置 labelRender 后,menuLayout有效\n * b. 设置 titleRender 后,menuLayout失效\n * ```\n */\n labelRender?: (nodeData: TPlainObject) => ReactElement;\n};\n\nexport type TreeWrapperRefApi = {\n onClearSelectorList: () => void;\n getTreeDataList: () => TreeProps['treeData'];\n onChangeExpandedKeys: (expandedKeys: Array<string | number>) => void;\n};\n\n/**\n * Tree包装组件,默认返回父节点,可配置不返回\n * @param props\n * @returns\n * ```\n * 1. treeNode内置字段说明(如需要相关功能,可在接口中添加固定字段)\n * a. disabled 禁掉响应\n * b. isLeaf 设置为叶子节点 (设置了 loadData 时有效)。为 false 时会强制将其作为父节点\n * c. disableCheckbox checkable模式下,treeNode复选框是否可选\n * 2. 当设置selectorTreeList属性后,serviceConfig将失效\n * 3. checkable=true,为多选模式\n * 4. 设置value后,组件显示受控\n * 5. 设置loadDataFlag=true,会动态获取children,当treeNode中包含isLeaf=true字段,表示为叶子节点,没有children了\n * 6. 内置 onDrop 事件已处理数组排序,通过 onDropNodeHandle 事件可获取操作节点排序数据;自定义onDrop后,内置onDrop失效\n * ```\n */\nexport const TreeWrapper = forwardRef<TreeWrapperRefApi, TreeWrapperProps>((props, ref) => {\n const {\n style,\n serviceConfig,\n effectDependencyList,\n selectorTreeList,\n value,\n onChange,\n modelKey,\n checkableResponseParentNode = true,\n checkable,\n onSelectorTreeListChange,\n onRequestResponseChange,\n treeItemDataAdapter,\n searchValue,\n showSearch,\n searchPlaceholder,\n requestMessageConfig,\n labelInValueFieldNames,\n labelInValue,\n disabledCanUse,\n menuLayoutType,\n menuTriggerType,\n initRootExpand,\n searchResultType,\n onDropNodeHandle,\n onDropPrev,\n labelRender,\n searchStyle,\n className,\n defaultExpandAll,\n menus,\n ...otherProps\n } = props;\n // eslint-disable-next-line no-prototype-builtins\n const hasSelectorTreeList = props.hasOwnProperty('selectorTreeList');\n const newServiceConfig = serviceConfig || {};\n const newEffectDependencyList = effectDependencyList || [];\n const [treeExpandedKeys, setTreeExpandedKeys] = useState<Array<string | number>>([]);\n const [state, actions] = treeWrapperModel(modelKey).useStore();\n const [loading, setLoading] = fbaHooks.useSafeState(false);\n const requestPreKey = `request-progress-${props.modelKey}`;\n const fieldNames = useMemo(() => {\n return { label: 'label', value: 'value', children: 'children', ...props.fieldNames };\n }, [props.fieldNames]);\n const menuLayoutTypeNew = menuLayoutType === undefined ? 'fold' : menuLayoutType;\n const menuTriggerTypeNew = menuTriggerType === undefined ? 'click' : menuTriggerType;\n const responseFirstRef = useRef(true);\n\n const labelInValueFieldNamesMerge = useMemo(() => {\n return { label: 'label', value: 'value', ...labelInValueFieldNames };\n }, [labelInValueFieldNames]);\n // tree 搜索值\n const [treeSearchValue, setTreeSearchValue] = useState<string>();\n\n const innerOperateValueRef = useRef<Array<string | number> | string | number>();\n\n const valueList = useMemo(() => {\n return getVauleList(value, labelInValueFieldNamesMerge);\n }, [labelInValueFieldNamesMerge, value]);\n\n fbaHooks.useEffectCustom(() => {\n if (state.treeList.length > 0) {\n if (responseFirstRef.current) {\n responseFirstRef.current = false;\n if (defaultExpandAll) {\n setTreeExpandedKeys(getDefaultExpandAllKeys(state.treeList, fieldNames));\n return;\n } else if (initRootExpand && state.treeList.length) {\n setTreeExpandedKeys([state.treeList[0][fieldNames.value]]);\n return;\n }\n }\n if (!isUndefinedOrNull(value)) {\n const expandedKeys = getTreeExpandedKeys(valueList, true);\n setTreeExpandedKeys(Array.from(new Set(treeExpandedKeys?.concat(expandedKeys))));\n }\n }\n }, [value, state.treeList, valueList]);\n\n const valueIsEmpty = (data: string | number) => {\n return data === '' || isUndefinedOrNull(data);\n };\n\n const serviceResponseHandle = (respData) => {\n if (newServiceConfig.onRequestResultAdapter) {\n return newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject);\n }\n if (fieldNames.list) {\n return get(respData, fieldNames.list, []) || [];\n }\n if (!isArray(respData)) {\n console.warn('接口返回数据为非数组结构,确认是否需要配置fieldNames.list进行解析');\n return [];\n }\n return respData;\n };\n\n fbaHooks.useEffectCustom(() => {\n setTreeSearchValue(searchValue);\n }, [searchValue]);\n\n const startDataSourceRequest = hooks.useCallbackRef(async () => {\n try {\n if (!newServiceConfig.onRequest) {\n throw new Error('onRequest 调用接口服务不能为空');\n }\n const requiredParamsKeys = newServiceConfig.requiredParamsKeys;\n const params = extend({}, newServiceConfig.params);\n if (requiredParamsKeys) {\n const isEmpty = requiredParamsKeys.find((key) => {\n return valueIsEmpty(params[key] as string | number);\n });\n if (isEmpty) {\n console.warn(`TreeWrapper组件:参数:${requiredParamsKeys.join('、')}不能为空`);\n return;\n }\n }\n try {\n setLoading(true);\n await actions.changeRequestStatus('request-progress');\n window[requestPreKey] = true;\n const _respData = await newServiceConfig.onRequest?.(params);\n onRequestResponseChange?.(_respData);\n const respData = serviceResponseHandle(_respData) as TreeProps['treeData'];\n const respDataListNew = respData || [];\n if (respDataListNew.length === 0) {\n responseFirstRef.current = false;\n }\n onChangeSelectorList(respDataListNew);\n setLoading(false);\n\n window[requestPreKey] = false;\n } catch (error) {\n window[requestPreKey] = false;\n setLoading(false);\n void actions.changeRequestStatus('request-error');\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('request-success');\n return;\n }\n void actions.setTreeList({\n treeList: dataList || [],\n childrenName: fieldNames.children,\n });\n onSelectorTreeListChange?.(dataList);\n });\n\n const getTreeExpandedKeys = (valueList: Array<string | number>, refresh?: boolean) => {\n let newTreeExpandedKeys = [] as Array<string | number>;\n valueList.forEach((value) => {\n if (!refresh && treeExpandedKeys?.includes(value)) return;\n const targetKeys = getExpandedKeys(value, state.treeList, fieldNames);\n newTreeExpandedKeys = newTreeExpandedKeys.concat(targetKeys);\n });\n return newTreeExpandedKeys;\n };\n\n hooks.useUpdateEffect(() => {\n if (treeSearchValue) {\n const targetList = state.treeTiledArray.filter((item) => {\n const labelValue = (item[fieldNames.label] || '') as string;\n return String(labelValue).toLowerCase().includes(treeSearchValue.toLowerCase());\n });\n setTreeExpandedKeys((prev) => {\n const mergeValueList = targetList.map((item) => item[fieldNames.value]).concat(prev || []);\n const mergeList = getTreeExpandedKeys(mergeValueList);\n return Array.from(new Set(mergeList));\n });\n } else {\n setTreeExpandedKeys([]);\n }\n }, [treeSearchValue]);\n\n useImperativeHandle(ref, () => {\n return {\n onClearSelectorList: () => {\n void actions.resetTreeList();\n },\n getTreeDataList: () => {\n return state.treeList;\n },\n onChangeExpandedKeys: (dataList) => {\n setTreeExpandedKeys(dataList);\n },\n };\n });\n\n const onExpand = hooks.useCallbackRef((expandedKeys) => {\n setTreeExpandedKeys(expandedKeys as string[]);\n });\n\n const onRespChange = hooks.useCallbackRef((selectedKey, selectInfo?, selectAllList?, operateInfo?) => {\n innerOperateValueRef.current = selectedKey;\n const selectList = isUndefinedOrNull(selectInfo) ? [] : isArray(selectInfo) ? selectInfo : [selectInfo];\n if (isUndefinedOrNull(selectedKey)) {\n onChange?.(selectedKey, selectInfo, selectAllList);\n return;\n }\n if (labelInValue) {\n const lvLabel = labelInValueFieldNamesMerge.label;\n const lvValue = labelInValueFieldNamesMerge.value;\n const labelInValueList = selectList.map((item) => {\n return {\n [lvLabel]: item[fieldNames.label],\n [lvValue]: item[fieldNames.value],\n };\n });\n if (isArray(selectedKey)) {\n onChange?.(labelInValueList, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(labelInValueList[0], selectList[0], selectAllList, operateInfo);\n }\n } else {\n if (isArray(selectedKey)) {\n onChange?.(selectedKey, selectList, selectAllList, operateInfo);\n } else {\n onChange?.(selectedKey, selectList[0], selectAllList, operateInfo);\n }\n }\n });\n\n const onTreeChangeHandle = hooks.useCallbackRef((checkedData, operateInfo) => {\n let checkedValueList = isUndefinedOrNull(checkedData) ? [] : checkedData;\n checkedValueList = props.checkStrictly ? checkedData.checked : checkedData;\n\n checkedValueList = isArray(checkedValueList) ? checkedValueList : [checkedValueList];\n\n const selectedLeafList = [] as TPlainObject[];\n const selectedLeafValueList = [] as Array<string | number>;\n const selectedAllList = [] as TPlainObject[];\n const selectedAllValueList = [] as Array<string | number>;\n checkedValueList.forEach((item) => {\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === item);\n if (!target) return;\n const children = target?.[fieldNames.children];\n if (!isArray(children) || children.length === 0) {\n selectedLeafList.push(target);\n selectedLeafValueList.push(target[fieldNames.value]);\n }\n selectedAllList.push(target);\n selectedAllValueList.push(target[fieldNames.value]);\n });\n\n if (checkable) {\n setTreeExpandedKeys((prev) => {\n const mergeList = getTreeExpandedKeys(selectedLeafValueList).concat(prev || []);\n return Array.from(new Set(mergeList));\n });\n if (!checkableResponseParentNode && !props.checkStrictly) {\n onRespChange(selectedLeafValueList, selectedLeafList, selectedAllList, operateInfo);\n } else {\n onRespChange(selectedAllValueList, selectedAllList, selectedAllList, operateInfo);\n }\n } else {\n if (checkedValueList[0]) {\n const currentNode = selectedAllList.find((item) => item[fieldNames.value] === checkedValueList[0]);\n onRespChange(checkedValueList[0], currentNode, [currentNode], operateInfo);\n } else {\n const nodeValue = operateInfo.node[fieldNames.value];\n const target = state.treeTiledArray.find((temp) => temp[fieldNames.value] === nodeValue);\n onRespChange(undefined, target, [target], operateInfo);\n }\n }\n });\n\n const treeItemDataAdapterHandle = hooks.useCallbackRef((dataItem) => {\n return treeItemDataAdapter?.(dataItem);\n });\n\n const originalDataList = useMemo(() => {\n const list = cloneState(state.treeList || []);\n if (treeSearchValue && searchResultType !== 'highlight') {\n return treeFilter(\n cloneState(state.treeList || []),\n (node) => {\n const value = node[fieldNames.label]?.toLowerCase();\n return value.indexOf(treeSearchValue.toLowerCase()) >= 0;\n },\n { childrenName: fieldNames.children },\n );\n }\n return list;\n }, [fieldNames.children, fieldNames.label, searchResultType, state.treeList, treeSearchValue]);\n\n const treeData = useMemo(() => {\n const loop = (data: TAny[]): TAny[] =>\n data?.map((item) => {\n const adapterItem = treeItemDataAdapterHandle?.(item) || item;\n const disabled = disabledCanUse ? undefined : adapterItem.disabled;\n const strTitle = (adapterItem[fieldNames.label] as string)?.toLowerCase();\n let titleDom;\n if (treeSearchValue) {\n const index = strTitle.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 className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>\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 className={classNames({ 'v-tree-item-disabled': adapterItem.disabled })}>{strTitle}</span>\n );\n }\n const children = adapterItem[fieldNames.children];\n return {\n ...adapterItem,\n disabled,\n [fieldNames.label]: titleDom || 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 newServiceConfig.onRequestResultAdapter\n ? newServiceConfig.onRequestResultAdapter(respData as unknown as TPlainObject)\n : respData\n ) as TPlainObject[];\n\n void actions\n .treeListAppendChildren({\n value: dataItem[fieldNames.value],\n appendList: respDataList,\n childrenName: fieldNames.children,\n valueName: fieldNames.value,\n })\n .then((allState) => {\n onChangeSelectorList(allState.treeList as TPlainObject[]);\n resolve();\n });\n } catch (error: TAny) {\n void message.error(error.message || '数据加载异常...');\n // 此处失败后,会重试“loadData”请求多次\n reject();\n }\n });\n });\n\n const isLeafNode = hooks.useCallbackRef((nodeData) => {\n const children = nodeData?.[fieldNames.children];\n // 当loadDataFlag=true,考虑叶子节点显示问题\n const loadDataFlag = props.loadDataFlag;\n const loadHasChildren = loadDataFlag ? !nodeData.isLeaf : false;\n const hasChildren = (children && children.length > 0) || loadHasChildren;\n return !hasChildren;\n });\n\n const titleRender = hooks.useCallbackRef((nodeData) => {\n const stringLabel = nodeData._treeItemName || nodeData[fieldNames.label];\n const buttonOperateConfig = menus?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n if (buttonOperateConfig?.operateList.length) {\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n <ButtonOperate\n gap={5}\n {...buttonOperateConfig}\n dropdownMenuProps={{\n placement: 'bottomRight',\n isFixed: true,\n ...buttonOperateConfig?.dropdownMenuProps,\n }}\n className={classNames('tree-item-title-operate', buttonOperateConfig.className)}\n />\n </Fragment>\n );\n }\n\n if (menuLayoutTypeNew === 'fold') {\n let menuOptions: TAny[] = [];\n if (props.menuOptions?.fold) {\n menuOptions =\n props.menuOptions?.[menuLayoutTypeNew]?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n } else {\n menuOptions =\n props.getMenuOptions?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n }) || [];\n }\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions.length > 0 && (\n <DropdownMenuWrapper menuList={menuOptions} placement=\"bottomRight\">\n <MoreOutlined />\n </DropdownMenuWrapper>\n )}\n </Fragment>\n );\n }\n const menuOptions = props.menuOptions?.tile?.({\n ...nodeData,\n [fieldNames.label]: stringLabel,\n });\n\n return (\n <Fragment>\n <span className=\"tree-item-title\">{labelRender?.(nodeData) || nodeData?.[fieldNames.label]}</span>\n {menuOptions ? (\n <ButtonOperate\n gap={5}\n {...menuOptions}\n className={classNames('tree-item-title-operate', menuOptions.className)}\n />\n ) : null}\n </Fragment>\n );\n });\n\n const onChangeDebounce = hooks.useDebounceCallback((value: string) => {\n setTreeSearchValue(value);\n props.onSearchValueChange?.(value);\n }, 300);\n\n const onSearchChange = hooks.useCallbackRef((e: React.ChangeEvent<HTMLInputElement>) => {\n onChangeDebounce(e.target.value);\n });\n\n const iconHandle = hooks.useCallbackRef((treeData) => {\n if (!props.icon) return null;\n if (isValidElement(props.icon)) return props.icon;\n const isLeafFlag = isLeafNode(treeData.data);\n return props.icon({\n ...treeData,\n isParent: !isLeafFlag,\n isLeaf: isLeafFlag,\n });\n });\n\n const treeFieldNames = useMemo(() => {\n return { title: fieldNames.label, key: fieldNames.value, children: fieldNames.children };\n }, [fieldNames]);\n const showTree = treeData.length > 0 && state.requestStatus !== 'request-error';\n const commonProps = {\n showLine: { showLeafIcon: false },\n titleRender,\n blockNode: true,\n switcherIcon: <CaretDownFilled />,\n onDrop: (info) => {\n if (onDropPrev) {\n const boo = onDropPrev(info);\n if (!boo) return;\n }\n const { dataList, dragNodeData } = onTreeDrop(originalDataList as TPlainObject[], fieldNames, info);\n onDropNodeHandle?.(dragNodeData);\n onChangeSelectorList(dataList);\n },\n expandedKeys: treeExpandedKeys,\n ...otherProps,\n fieldNames: treeFieldNames,\n treeData,\n onExpand,\n loadData: props.loadDataFlag ? loadData : undefined,\n style: { width: '100%' },\n icon: iconHandle,\n };\n\n const checkedProps = {\n onCheck: onTreeChangeHandle,\n checkable,\n checkedKeys: valueList,\n };\n\n const selectedProps = {\n onSelect: onTreeChangeHandle,\n multiple: false,\n selectedKeys: valueList,\n };\n const sceneProps = checkable ? checkedProps : selectedProps;\n const cName = classNames('v-tree-wrapper', `v-tree-wrapper-menu-${menuTriggerTypeNew}`, className);\n const isSearchEmpty = state.treeList.length > 0 && !showTree && treeSearchValue;\n return (\n <div className={cName} style={style}>\n {!!showSearch && (\n <div className=\"v-tree-wrapper-search-area\" style={searchStyle}>\n <InputSearchWrapper\n className=\"v-tree-wrapper-search\"\n placeholder={isUndefinedOrNull(searchPlaceholder) ? '搜索' : searchPlaceholder}\n onChange={onSearchChange}\n value={searchValue}\n allowClear\n />\n {!!props.searchExtraElement && (\n <span className=\"v-tree-wrapper-search-extra\">{props.searchExtraElement}</span>\n )}\n </div>\n )}\n\n {showTree ? (\n <div className=\"v-tree-wrapper-tree-wrapper\">\n <Spin spinning={state.requestStatus === 'request-progress'} />\n <Tree {...sceneProps} {...commonProps} className=\"v-tree-wrapper-tree\"></Tree>\n </div>\n ) : (\n <RequestStatus\n status={state.requestStatus}\n loading={loading}\n messageConfig={{\n 'request-success': isSearchEmpty ? '搜索结果为空' : '暂无数据',\n ...requestMessageConfig,\n }}\n errorButton={\n <Button type=\"primary\" onClick={startDataSourceRequest}>\n 重新获取数据\n </Button>\n }\n />\n )}\n </div>\n );\n});\n\nTreeWrapper.defaultProps = {\n disabledCanUse: true,\n};\n","import { attachPropertiesToComponent } from '@flatbiz/utils';\nimport { getTreeDataList } from './hooks';\nimport { TreeWrapper as TreeWrapperInner } from './tree-wrapper';\nexport type * 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 = attachPropertiesToComponent(TreeWrapperInner, {\n /**\n * 获取树形原数据\n * ```\n * 参数 modelKey 与 TreeWrapper属性 modelKey相同,才能获取数据\n * ```\n */\n getTreeDataList: getTreeDataList,\n});\n"],"names":["defaultState","treeList","treeTiledArray","queryIsEmpty","TreeWrapperModel","actions","setTreeList","params","state","treeToArray","childrenName","requestStatus","resetTreeList","changeRequestStatus","treeListAppendChildren","array","target","find","item","valueName","value","_isArray","appendList","length","isLeaf","treeWrapperModels","treeWrapperModel","key","Model","getTreeDataList","modelKey","getState","getDefaultExpandAllKeys","fieldNames","allValues","children","filter","childrenValue","map","getExpandedKeys","tiledArray","treeToTiledArray","treeLeafParentsArray","parentValue","getVauleList","data","labelInValueFieldNames","tempList","isUndefinedOrNull","_isObject","onTreeDrop","dataList","info","dropKey","node","dragKey","dragNode","dropPos","pos","split","dropPosition","Number","treeKeyName","treeChildrenName","loop","callback","i","cloneState","dragObj","index","arr","splice","dropToGap","unshift","props","expanded","ar","_item","dragNodeData","dorpNodeId","_tree$walkThroughTree","id","_tree","walkThroughTree","undefined","_parent","tileList","parentId","TreeWrapper","forwardRef","ref","style","serviceConfig","effectDependencyList","selectorTreeList","onChange","_props$checkableRespo","checkableResponseParentNode","checkable","onSelectorTreeListChange","onRequestResponseChange","treeItemDataAdapter","searchValue","showSearch","searchPlaceholder","requestMessageConfig","labelInValue","disabledCanUse","menuLayoutType","menuTriggerType","initRootExpand","searchResultType","onDropNodeHandle","onDropPrev","labelRender","searchStyle","className","defaultExpandAll","menus","otherProps","_objectWithoutPropertiesLoose","_excluded","hasSelectorTreeList","hasOwnProperty","newServiceConfig","newEffectDependencyList","_useState","useState","treeExpandedKeys","setTreeExpandedKeys","_treeWrapperModel$use","useStore","_fbaHooks$useSafeStat","fbaHooks","useSafeState","loading","setLoading","requestPreKey","useMemo","_extends","label","menuLayoutTypeNew","menuTriggerTypeNew","responseFirstRef","useRef","labelInValueFieldNamesMerge","_useState2","treeSearchValue","setTreeSearchValue","innerOperateValueRef","valueList","useEffectCustom","current","expandedKeys","getTreeExpandedKeys","Array","from","Set","concat","valueIsEmpty","serviceResponseHandle","respData","onRequestResultAdapter","list","_get","console","warn","startDataSourceRequest","_hooks","useCallbackRef","Promise","$return","$error","requiredParamsKeys","_params","isEmpty","_respData","_respData2","respDataListNew","$Try_1_Post","$boundEx","$Try_1_Catch","error","message","onRequest","Error","_extend","join","$Try_2_Post","$Try_2_Catch","window","resolve","then","$await_4","$await_5","onChangeSelectorList","allState","refresh","newTreeExpandedKeys","forEach","includes","targetKeys","useUpdateEffect","targetList","labelValue","String","toLowerCase","prev","mergeValueList","mergeList","useImperativeHandle","onClearSelectorList","onChangeExpandedKeys","onExpand","onRespChange","selectedKey","selectInfo","selectAllList","operateInfo","selectList","lvLabel","lvValue","labelInValueList","_ref","onTreeChangeHandle","checkedData","checkedValueList","checkStrictly","checked","selectedLeafList","selectedLeafValueList","selectedAllList","selectedAllValueList","temp","push","currentNode","nodeValue","treeItemDataAdapterHandle","dataItem","originalDataList","treeFilter","_node$fieldNames$labe","indexOf","treeData","_adapterItem$fieldNam","_extends2","adapterItem","disabled","strTitle","titleDom","beforeStr","substring","afterStr","slice","centerStr","_jsxs","_classNames","_jsx","_treeItemName","_disabled","loadData","reject","_props$loadDataServic","_props$loadDataServic2","_respData3","respDataList","$Try_3_Post","$Try_3_Catch","loadDataServiceConfig","getParams","$await_6","isLeafNode","nodeData","loadDataFlag","loadHasChildren","hasChildren","titleRender","_extends3","_props$menuOptions3","_extends6","stringLabel","buttonOperateConfig","operateList","Fragment","ButtonOperate","gap","dropdownMenuProps","placement","isFixed","_props$menuOptions","menuOptions","fold","_props$menuOptions2","_props$menuOptions2$m","_extends4","call","_extends5","getMenuOptions","DropdownMenuWrapper","menuList","_MoreOutlined","tile","onChangeDebounce","useDebounceCallback","onSearchValueChange","onSearchChange","e","iconHandle","icon","isValidElement","isLeafFlag","isParent","treeFieldNames","title","showTree","commonProps","showLine","showLeafIcon","blockNode","switcherIcon","_CaretDownFilled","onDrop","boo","_onTreeDrop","width","checkedProps","onCheck","checkedKeys","selectedProps","onSelect","multiple","selectedKeys","sceneProps","cName","isSearchEmpty","InputSearchWrapper","placeholder","allowClear","searchExtraElement","Spin","spinning","Tree","RequestStatus","status","messageConfig","errorButton","Button","type","onClick","defaultProps","attachPropertiesToComponent","TreeWrapperInner"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1359,7 +1359,10 @@ export type SelectorWrapperProps = Omit<SelectProps, "onSearch" | "notFoundConte
|
|
|
1359
1359
|
* 2. 可配置label、value
|
|
1360
1360
|
* ```
|
|
1361
1361
|
*/
|
|
1362
|
-
showAllOption?: true |
|
|
1362
|
+
showAllOption?: true | {
|
|
1363
|
+
label: string;
|
|
1364
|
+
value: string | number;
|
|
1365
|
+
};
|
|
1363
1366
|
onLabelRenderAdapter?: (dataItem: TPlainObject) => string | ReactElement;
|
|
1364
1367
|
onChange?: (value?: SelectorWrapperValue, selectedList?: TPlainObject[] | TPlainObject) => void;
|
|
1365
1368
|
showIcon?: boolean;
|
|
@@ -1823,6 +1826,7 @@ export declare const fbaHooks: {
|
|
|
1823
1826
|
S,
|
|
1824
1827
|
import("react").Dispatch<import("react").SetStateAction<S>>
|
|
1825
1828
|
];
|
|
1829
|
+
useMemoCustom: <T_1>(fn: () => T_1, deps?: import("react").DependencyList | undefined) => T_1;
|
|
1826
1830
|
};
|
|
1827
1831
|
declare function attachPropertiesToComponent<C, P extends Record<string, unknown>>(component: C, properties: P): C & P;
|
|
1828
1832
|
export declare const fbaUtils: {
|
|
@@ -1872,21 +1876,21 @@ export type FileSelectProps = {
|
|
|
1872
1876
|
export declare const FileSelect: (props: FileSelectProps) => import("react/jsx-runtime").JSX.Element;
|
|
1873
1877
|
export type FlexLayoutProps = {
|
|
1874
1878
|
className?: string;
|
|
1875
|
-
|
|
1879
|
+
/** 子组件铺满的索引值,从0开始 */
|
|
1880
|
+
fullIndex: number | number[];
|
|
1881
|
+
/**方向,默认值vertical */
|
|
1876
1882
|
direction?: "vertical" | "horizontal";
|
|
1877
1883
|
onClick?: () => void;
|
|
1878
1884
|
style?: CSSProperties;
|
|
1885
|
+
/** 间隙尺寸 */
|
|
1879
1886
|
gap?: number;
|
|
1880
1887
|
children?: ReactNode | null | Array<ReactNode | null>;
|
|
1881
1888
|
};
|
|
1882
1889
|
/**
|
|
1883
|
-
* flex
|
|
1884
|
-
*
|
|
1885
|
-
* 2.
|
|
1886
|
-
*
|
|
1887
|
-
* 4. 为children添加key属性
|
|
1888
|
-
* @param props
|
|
1889
|
-
* @returns
|
|
1890
|
+
* flex布局,主要用于Flex结构性布局
|
|
1891
|
+
* ```
|
|
1892
|
+
* 4.2.87版本中将fullIndex改为了必填属性,如果在升级中遇到问题,不确定怎么写,可设置 fullIndex=[] 保持原样
|
|
1893
|
+
* ```
|
|
1890
1894
|
*/
|
|
1891
1895
|
export declare const FlexLayout: (props: FlexLayoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
1892
1896
|
export type FormColProps = {
|
|
@@ -2454,6 +2458,8 @@ export interface RichTextEditorProps extends Omit<IAllProps, "onChange" | "init"
|
|
|
2454
2458
|
/** 工具栏添加;自定义toolbar后失效 */
|
|
2455
2459
|
toolbar_append?: string;
|
|
2456
2460
|
};
|
|
2461
|
+
/** 点击全屏按钮回调 */
|
|
2462
|
+
onFullScreenChange?: (state?: boolean) => void;
|
|
2457
2463
|
}
|
|
2458
2464
|
/**
|
|
2459
2465
|
* 富文本编辑器,配置参考tinymce https://www.tiny.cloud/docs/tinymce/6
|
|
@@ -3085,13 +3091,21 @@ export type TagWrapperProps = Omit<TagProps, "onClick"> & {
|
|
|
3085
3091
|
*/
|
|
3086
3092
|
export declare const TagWrapper: (props: TagWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
3087
3093
|
export type CssTextEllipsisProps = {
|
|
3088
|
-
text
|
|
3089
|
-
width
|
|
3094
|
+
text: string;
|
|
3095
|
+
width?: number;
|
|
3096
|
+
/** 隐藏tips */
|
|
3097
|
+
hideTips?: boolean;
|
|
3090
3098
|
};
|
|
3091
3099
|
/**
|
|
3092
|
-
*
|
|
3093
|
-
*
|
|
3094
|
-
*
|
|
3100
|
+
* 内容超过宽度截取,并在尾部添加...,被截取的添加Tooltip显示完整数据
|
|
3101
|
+
* ```
|
|
3102
|
+
* 1. 如果配置 width,则使用文本长度与width进行比较
|
|
3103
|
+
* 2. 如果没有配置 width,则使用文本长度与当前节点父节点宽度进行比较
|
|
3104
|
+
*
|
|
3105
|
+
* 注意:
|
|
3106
|
+
* 1. 当前节点父节点可能需要添加 overflow-x: hidden;
|
|
3107
|
+
* 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;
|
|
3108
|
+
* ```
|
|
3095
3109
|
*/
|
|
3096
3110
|
export declare const TextCssEllipsis: (props: CssTextEllipsisProps) => import("react/jsx-runtime").JSX.Element;
|
|
3097
3111
|
export type TextOverflowRenderProps = {
|
|
@@ -3290,7 +3304,17 @@ export type TreeSelectorWrapperProps = Omit<TreeSelectProps, "treeExpandedKeys"
|
|
|
3290
3304
|
*/
|
|
3291
3305
|
onChange?: (selectedValue?: TreeSelectorWrapperValue, selectedData?: TPlainObject[] | TPlainObject, triggerInfo?: TPlainObject) => void;
|
|
3292
3306
|
/**
|
|
3293
|
-
* tree item
|
|
3307
|
+
* tree item 数据适配器,返回的数据会通过fieldNames配置取数据
|
|
3308
|
+
* ```
|
|
3309
|
+
* 1. 可用于设置disabled状态
|
|
3310
|
+
* onTreeItemDataAdapter: (dataItem) => {
|
|
3311
|
+
* if(dataItem.xx === xx){
|
|
3312
|
+
* dataItem['disabled] = true;
|
|
3313
|
+
* }
|
|
3314
|
+
* return dataItem;
|
|
3315
|
+
* }
|
|
3316
|
+
* 2. 可设置label数据显示
|
|
3317
|
+
* ```
|
|
3294
3318
|
*/
|
|
3295
3319
|
onTreeItemDataAdapter?: (dataItem: TPlainObject) => TPlainObject;
|
|
3296
3320
|
/** 自定义异常提示文案 */
|
|
@@ -3360,6 +3384,7 @@ export type TreeWrapperMenuItem = {
|
|
|
3360
3384
|
icon?: ReactElement;
|
|
3361
3385
|
};
|
|
3362
3386
|
export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "selectedKeys" | "checkedKeys" | "onCheck" | "onSelect" | "fieldNames" | "multiple" | "loadData" | "icon" | "defaultCheckedKeys" | "defaultExpandParent" | "defaultSelectedKeys"> & {
|
|
3387
|
+
/** 唯一值,用于缓存数据 */
|
|
3363
3388
|
modelKey: string;
|
|
3364
3389
|
/**
|
|
3365
3390
|
* 字段映射
|
|
@@ -3368,12 +3393,16 @@ export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "select
|
|
|
3368
3393
|
* label = 'label'
|
|
3369
3394
|
* value = 'value'
|
|
3370
3395
|
* children = 'children'
|
|
3396
|
+
*
|
|
3397
|
+
* 如果未设置list,则说明接口返回数据为数组
|
|
3398
|
+
* 如果返回数据存在多级,可通过设置 list='a.b.list'
|
|
3371
3399
|
* ```
|
|
3372
3400
|
*/
|
|
3373
3401
|
fieldNames?: {
|
|
3374
3402
|
label?: string;
|
|
3375
3403
|
value?: string;
|
|
3376
3404
|
children?: string;
|
|
3405
|
+
list?: string;
|
|
3377
3406
|
};
|
|
3378
3407
|
/**
|
|
3379
3408
|
* useEffect依赖项数组,用于重新发起获取接口数据
|
|
@@ -3387,7 +3416,13 @@ export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "select
|
|
|
3387
3416
|
* 是否开启异步加载
|
|
3388
3417
|
*/
|
|
3389
3418
|
loadDataFlag?: boolean;
|
|
3390
|
-
/**
|
|
3419
|
+
/**
|
|
3420
|
+
* 异步加载数据配置
|
|
3421
|
+
* ```
|
|
3422
|
+
* 1. 会通过fieldNames配置label、value、children进行转义
|
|
3423
|
+
* 2. fieldNames.list 配置在此处无效
|
|
3424
|
+
* ```
|
|
3425
|
+
*/
|
|
3391
3426
|
loadDataServiceConfig?: TreeLoadDataServiceConfig;
|
|
3392
3427
|
/**
|
|
3393
3428
|
* 当设置selectorTreeList后,serviceConfig将失效
|
|
@@ -3457,10 +3492,14 @@ export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "select
|
|
|
3457
3492
|
icon?: (data: {
|
|
3458
3493
|
isParent: boolean;
|
|
3459
3494
|
isLeaf: boolean;
|
|
3495
|
+
[key: string]: TAny;
|
|
3460
3496
|
}) => ReactElement;
|
|
3461
3497
|
/**
|
|
3462
3498
|
* 是否必选,最后一个不能取消
|
|
3463
3499
|
*/
|
|
3500
|
+
/**
|
|
3501
|
+
* 状态文案配置
|
|
3502
|
+
*/
|
|
3464
3503
|
requestMessageConfig?: TRequestStatusProps["messageConfig"];
|
|
3465
3504
|
/**
|
|
3466
3505
|
* value格式
|
|
@@ -3472,9 +3511,16 @@ export type TreeWrapperProps = Omit<TreeProps, "treeData" | "onExpand" | "select
|
|
|
3472
3511
|
* ```
|
|
3473
3512
|
*/
|
|
3474
3513
|
value?: TreeWrapperValue;
|
|
3514
|
+
/**
|
|
3515
|
+
* 选择的节点数据,是否包含label信息
|
|
3516
|
+
* ```
|
|
3517
|
+
* 默认选择的节点只有value数据
|
|
3518
|
+
* ```
|
|
3519
|
+
*/
|
|
3475
3520
|
labelInValue?: boolean;
|
|
3476
3521
|
/**
|
|
3477
3522
|
* ```
|
|
3523
|
+
* @deprecated 废弃
|
|
3478
3524
|
* lableInValue = true,onChange输出数据字段名称,默认:{ label: string; value: string|number }
|
|
3479
3525
|
* ```
|
|
3480
3526
|
*/
|
|
@@ -3554,6 +3600,7 @@ export declare const TreeWrapper: import("react").ForwardRefExoticComponent<Omit
|
|
|
3554
3600
|
label?: string | undefined;
|
|
3555
3601
|
value?: string | undefined;
|
|
3556
3602
|
children?: string | undefined;
|
|
3603
|
+
list?: string | undefined;
|
|
3557
3604
|
} | undefined;
|
|
3558
3605
|
effectDependencyList?: import("react").DependencyList | undefined;
|
|
3559
3606
|
serviceConfig?: {
|
|
@@ -3587,6 +3634,7 @@ export declare const TreeWrapper: import("react").ForwardRefExoticComponent<Omit
|
|
|
3587
3634
|
searchPlaceholder?: string | undefined;
|
|
3588
3635
|
searchStyle?: import("react").CSSProperties | undefined;
|
|
3589
3636
|
icon?: ((data: {
|
|
3637
|
+
[key: string]: any;
|
|
3590
3638
|
isParent: boolean;
|
|
3591
3639
|
isLeaf: boolean;
|
|
3592
3640
|
}) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>) | undefined;
|