@flatbiz/antd 4.5.27 → 4.5.29

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.
@@ -7,5 +7,5 @@ import './../fba-utils/index.css';
7
7
  import './../flex-layout/index.css';
8
8
  import './index.css';
9
9
  /*! @flatjs/forge MIT @flatbiz/antd */
10
- import{isString as e}from"@dimjs/lang/cjs/is-string";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{_ as o,a as r}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isPromise as i}from"@dimjs/lang/cjs/is-promise";import{hooks as n}from"@wove/react/cjs/hooks";import{dom as l}from"@flatbiz/utils";import{useSize as a}from"ahooks";import{Form as d,Modal as s}from"antd";import{useState as m,useMemo as c}from"react";import{createRoot as u}from"react-dom/client";import{ButtonWrapper as f}from"../button-wrapper/index.js";import{C as p}from"../index-7f4ad045.js";import{fbaHooks as v}from"../fba-hooks/index.js";import{FlexLayout as h}from"../flex-layout/index.js";import{createCtx as g}from"@wove/react/cjs/create-ctx";import{jsx as y,jsxs as j}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";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"@dimjs/utils/cjs/extend";import"../use-responsive-point-21b8c601.js";var w=g(),k=w[0],x=w[1];var C=["title","titleExtra","divElement","elementId","onOk","onCancel","okButtonProps","cancelButtonProps","content","configProviderProps","className","okHidden","cancelHidden","footer","cancelText","okText","size","bodyHeight"];var b=function e(u){var g,w;var k=u.title,b=u.titleExtra,_=u.divElement,P=u.elementId,E=u.onOk,H=u.onCancel,B=u.okButtonProps,I=u.cancelButtonProps,z=u.content,F=u.configProviderProps,O=u.className,R=u.okHidden,N=u.cancelHidden,T=u.footer,D=u.cancelText,M=u.okText,S=u.size,Y=u.bodyHeight,q=r(u,C);var A=m(true),L=A[0],U=A[1];var G=d.useForm(),J=G[0];var K=a(document.querySelector("html"));var Q=v.useResponsivePoint()||"";var V=m({}),W=V[0],X=V[1];var Z=n.useCallbackRef((function(){try{delete window[P]}catch(e){}U(false)}));v.useEffectCustom((function(){window[P]=Z}),[Z]);var $=n.useCallbackRef((function(e){if(H){var t=H(J,e);if(t&&i(t)){return t.then(Z)}}return Z()}));var ee=n.useCallbackRef((function(e){if(E){var t=E(J,e);if(t&&i(t)){return t.then(Z)}}return Z()}));var te=n.useCallbackRef((function(){l.removeBodyChild("#"+P);u.afterClose==null?void 0:u.afterClose()}));var oe=v.useMemoCustom((function(){if(T){return typeof T==="function"?T(J,W):T}if(N&&R){return null}return[y(f,o({},I,{onClick:$,hidden:N,children:D||"取消"}),"0"),y(f,o({type:"primary"},B,{onClick:ee,hidden:R,children:M||"提交"}),"1")].filter(Boolean)}),[W]);var re=c((function(){if(!(K!=null&&K.height)||!Q)return undefined;var e=["xs","sm"].includes(Q);if(S=="large"){return{height:(K==null?void 0:K.height)*.7,width:e?"90%":K.width*.6}}if(S=="small"){var t=K.width*.3;return{height:(K==null?void 0:K.height)*.4,width:e?"90%":t<470?470:t}}if(S=="middle"){return{height:(K==null?void 0:K.height)*.4,width:e?"90%":K.width*.5}}return undefined}),[K==null?void 0:K.height,K==null?void 0:K.width,Q,S]);var ie=t("v-dialog-modal",{"v-dialog-modal-title-extra":!!b},O);var ne=function e(t){X(t)};var le=((g=q.styles)==null||(g=g.body)==null?void 0:g.height)||Y;return y(x,{value:{rerenderFooter:ne},children:y(p,o({},F,{children:y(s,o({title:b?j(h,{direction:"horizontal",fullIndex:0,children:[y("span",{children:k}),b]}):k,maskClosable:true,centered:true,onCancel:Z,destroyOnClose:true,width:re==null?void 0:re.width},q,{footer:oe,styles:o({},q.styles,{body:o({height:le||(re==null?void 0:re.height),maxHeight:"calc(100vh - 200px)"},(w=q.styles)==null?void 0:w.body)}),className:ie,open:L,afterClose:te,getContainer:_,children:typeof z==="function"?z(J,{onClose:Z}):z}))}))})};var _={open:function e(t){var r=l.bodyAppendDivElement(),i=r.divElement,n=r.elementId;window["__dialog_modal_elementId"]=n;var a=u(i);a.render(y(b,o({},t,{divElement:i,elementId:n})));return{close:function e(){var t,o;(t=(o=window)[n])==null?void 0:t.call(o)}}},close:function t(){try{var o,r;var i=window["__dialog_modal_elementId"];if(e(i))(o=(r=window)[i])==null?void 0:o.call(r)}catch(e){}},useDialogModal:function e(){var t=k();return{rerenderFooter:function e(o){t.rerenderFooter(o)}}}};export{_ as dialogModal};
10
+ import{isString as e}from"@dimjs/lang/cjs/is-string";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{_ as o,a as r}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isPromise as i}from"@dimjs/lang/cjs/is-promise";import{hooks as n}from"@wove/react/cjs/hooks";import{dom as l}from"@flatbiz/utils";import{useSize as a}from"ahooks";import{Form as d,Modal as s}from"antd";import{useState as m,useMemo as c}from"react";import{createRoot as u}from"react-dom/client";import{ButtonWrapper as f}from"../button-wrapper/index.js";import{C as p}from"../index-7f4ad045.js";import{fbaHooks as v}from"../fba-hooks/index.js";import{FlexLayout as h}from"../flex-layout/index.js";import{createCtx as g}from"@wove/react/cjs/create-ctx";import{jsx as y,jsxs as j}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";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"@dimjs/utils/cjs/extend";import"../use-responsive-point-21b8c601.js";var w=g(),k=w[0],x=w[1];var C=["title","titleExtra","divElement","elementId","onOk","onCancel","okButtonProps","cancelButtonProps","content","configProviderProps","className","okHidden","cancelHidden","footer","cancelText","okText","size","bodyHeight"];var b=function e(u){var g,w;var k=u.title,b=u.titleExtra,_=u.divElement,P=u.elementId,E=u.onOk,H=u.onCancel,B=u.okButtonProps,I=u.cancelButtonProps,z=u.content,F=u.configProviderProps,O=u.className,R=u.okHidden,N=u.cancelHidden,T=u.footer,D=u.cancelText,M=u.okText,S=u.size,Y=u.bodyHeight,q=r(u,C);var A=m(true),L=A[0],U=A[1];var G=d.useForm(),J=G[0];var K=a(document.querySelector("html"));var Q=v.useResponsivePoint()||"";var V=m({}),W=V[0],X=V[1];var Z=n.useCallbackRef((function(){try{delete window[P]}catch(e){}U(false)}));v.useEffectCustom((function(){window[P]=Z}),[Z]);var $=n.useCallbackRef((function(e){if(H){var t=H(J,e);if(t&&i(t)){return t.then(Z)}}return Z()}));var ee=n.useCallbackRef((function(e){if(E){var t=E(J,e);if(t&&i(t)){return t.then(Z)}}return Z()}));var te=n.useCallbackRef((function(){l.removeBodyChild("#"+P);u.afterClose==null?void 0:u.afterClose()}));var oe=v.useMemoCustom((function(){if(T){return typeof T==="function"?T(J,W):T}if(N&&R||T===null){return null}return[y(f,o({},I,{onClick:$,hidden:N,children:D||"取消"}),"0"),y(f,o({type:"primary"},B,{onClick:ee,hidden:R,children:M||"提交"}),"1")].filter(Boolean)}),[W]);var re=c((function(){if(!(K!=null&&K.height)||!Q)return undefined;var e=["xs","sm"].includes(Q);if(S=="large"){return{height:(K==null?void 0:K.height)*.7,width:e?"90%":K.width*.6}}if(S=="small"){var t=K.width*.3;return{height:(K==null?void 0:K.height)*.4,width:e?"90%":t<470?470:t}}if(S=="middle"){return{height:(K==null?void 0:K.height)*.4,width:e?"90%":K.width*.5}}return undefined}),[K==null?void 0:K.height,K==null?void 0:K.width,Q,S]);var ie=t("v-dialog-modal",{"v-dialog-modal-title-extra":!!b},O);var ne=function e(t){X(t)};var le=((g=q.styles)==null||(g=g.body)==null?void 0:g.height)||Y;return y(x,{value:{rerenderFooter:ne},children:y(p,o({},F,{children:y(s,o({title:b?j(h,{direction:"horizontal",fullIndex:0,children:[y("span",{children:k}),b]}):k,maskClosable:true,centered:true,onCancel:Z,destroyOnClose:true,width:re==null?void 0:re.width},q,{footer:oe,styles:o({},q.styles,{body:o({height:le||(re==null?void 0:re.height),maxHeight:"calc(100vh - 200px)"},(w=q.styles)==null?void 0:w.body)}),className:ie,open:L,afterClose:te,getContainer:_,children:typeof z==="function"?z(J,{onClose:Z}):z}))}))})};var _={open:function e(t){var r=l.bodyAppendDivElement(),i=r.divElement,n=r.elementId;window["__dialog_modal_elementId"]=n;var a=u(i);a.render(y(b,o({},t,{divElement:i,elementId:n})));return{close:function e(){var t,o;(t=(o=window)[n])==null?void 0:t.call(o)}}},close:function t(){try{var o,r;var i=window["__dialog_modal_elementId"];if(e(i))(o=(r=window)[i])==null?void 0:o.call(r)}catch(e){}},useDialogModal:function e(){var t=k();return{rerenderFooter:function e(o){t.rerenderFooter(o)}}}};export{_ as dialogModal};
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/dialog-modal/context.ts","@flatbiz/antd/src/dialog-modal/dialog-modal.tsx"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useDialogModalCtx, DialogModalCtxProvider] = createCtx<{\n /** 重新渲染footer */\n rerenderFooter: (data?: TPlainObject) => void;\n}>();\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\n\nimport { BodyAppendDivElementProps, dom, TNoopDefine, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useSize } from 'ahooks';\nimport { Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { FlexLayout } from '../flex-layout';\nimport { DialogModalCtxProvider, useDialogModalCtx } from './context';\nimport './style.less';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps' | 'footer'\n> & {\n /**\n * 内置尺寸,根据比例固定高度、宽度,默认:无\n * ```\n * 1. 如果自定义了width、bodyHeight属性,size中的height、width将对应失效\n * 2. 不传、传null值可取消内置尺寸\n * ```\n */\n size?: 'small' | 'middle' | 'large' | null;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n /**\n * 设置modal body height 为当前窗口height的百分比,例如:30\n * @deprecated 已失效,可通过size属性设置\n * ```\n * 1. 最大值:80\n * 1. 设置bodyStyle.height 后,bodyHeightPercent失效\n * ```\n */\n bodyHeightPercent?: number;\n titleExtra?: ReactElement;\n /**\n * null则隐藏footer\n * ```\n * extraData 为外部通过 useDialogModal.rerenderFooter 重新渲染footer携带的数据\n * ```\n */\n footer?:\n | null\n | ReactElement\n | ReactElement[]\n | ((form: FormInstance, extraData?: TPlainObject) => ReactElement);\n /** 内容高度,为styles.body.height快捷配置,优先级低于styles.body.height */\n bodyHeight?: number;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n title,\n titleExtra,\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n size,\n bodyHeight,\n ...otherProps\n } = props;\n\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n const htmlSize = useSize(document.querySelector('html'));\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [footerExtraData, setFooterExtraData] = useState<TPlainObject>({});\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n fbaHooks.useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n dom.removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const footerNew = fbaHooks.useMemoCustom(() => {\n if (footer) {\n return typeof footer === 'function' ? footer(form, footerExtraData) : footer;\n }\n if (cancelHidden && okHidden) {\n return null;\n }\n return [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ].filter(Boolean);\n }, [footerExtraData]);\n\n const customSize = useMemo(() => {\n if (!htmlSize?.height || !screenType) return undefined;\n const isXsSm = ['xs', 'sm'].includes(screenType);\n if (size == 'large') {\n return {\n height: htmlSize?.height * 0.7,\n width: isXsSm ? '90%' : htmlSize.width * 0.6,\n };\n }\n if (size == 'small') {\n const width = htmlSize.width * 0.3;\n return {\n height: htmlSize?.height * 0.4,\n width: isXsSm ? '90%' : width < 470 ? 470 : width,\n };\n }\n\n if (size == 'middle') {\n return {\n height: htmlSize?.height * 0.4,\n width: isXsSm ? '90%' : htmlSize.width * 0.5,\n };\n }\n\n return undefined;\n }, [htmlSize?.height, htmlSize?.width, screenType, size]);\n\n const classNameNew = classNames(\n 'v-dialog-modal',\n { 'v-dialog-modal-title-extra': !!titleExtra },\n className,\n );\n\n const rerenderFooter = (data) => {\n setFooterExtraData(data);\n };\n\n const bodyHeightNew = otherProps.styles?.body?.height || bodyHeight;\n\n return (\n <DialogModalCtxProvider value={{ rerenderFooter }}>\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n title={\n titleExtra ? (\n <FlexLayout direction=\"horizontal\" fullIndex={0}>\n <span>{title}</span>\n {titleExtra}\n </FlexLayout>\n ) : (\n title\n )\n }\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n width={customSize?.width}\n {...otherProps}\n footer={footerNew}\n styles={{\n ...otherProps.styles,\n body: {\n height: bodyHeightNew || customSize?.height,\n maxHeight: 'calc(100vh - 200px)',\n ...otherProps.styles?.body,\n },\n }}\n className={classNameNew}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n </DialogModalCtxProvider>\n );\n};\n\n/**\n * 居中弹框\n * ```\n * 1. 可嵌套使用\n * 2. 为什么不推荐使用\n * dialogModal.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化\n * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)\n * 3. 需要修改默认主题风格的场景,请使用\n * const { appDialogModal } = FbaApp.useDialogModal();\n * appDialogModal.open({})\n * 4. size属性可使用预设的弹窗尺寸(默认值middle),如果不使用内置尺寸可设置 size = null\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = dom.bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n /**\n * ```\n * 1. rerenderFooter 携带指定数据重新渲染 footer,可用于切换footer中的按钮状态\n * ```\n */\n useDialogModal: () => {\n const ctx = useDialogModalCtx();\n return {\n /** 重新渲染 footer, data为携带的数据,是footer的第二个参数 */\n rerenderFooter: (data?: TPlainObject) => {\n ctx.rerenderFooter(data);\n },\n };\n },\n};\n"],"names":["_createCtx","_createCtx2","useDialogModalCtx","DialogModalCtxProvider","ModalRender","props","_otherProps$styles","_otherProps$styles2","title","titleExtra","divElement","elementId","onOk","onCancel","okButtonProps","cancelButtonProps","content","configProviderProps","className","okHidden","cancelHidden","footer","cancelText","okText","size","bodyHeight","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","open","setOpen","_Form$useForm","Form","useForm","form","htmlSize","useSize","document","querySelector","screenType","fbaHooks","useResponsivePoint","_useState2","footerExtraData","setFooterExtraData","onClose","_hooks","useCallbackRef","window","error","useEffectCustom","onCancelHandle","e","response","_isPromise","then","onOkHandle","onAfterClose","dom","removeBodyChild","afterClose","footerNew","useMemoCustom","_jsx","ButtonWrapper","_extends","onClick","hidden","children","type","filter","Boolean","customSize","useMemo","height","undefined","isXsSm","includes","width","classNameNew","_classNames","rerenderFooter","data","bodyHeightNew","styles","body","value","ConfigProviderWrapper","Modal","_jsxs","FlexLayout","direction","fullIndex","maskClosable","centered","destroyOnClose","maxHeight","getContainer","dialogModal","_dom$bodyAppendDivEle","bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","_isString","useDialogModal","ctx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/dialog-modal/context.ts","@flatbiz/antd/src/dialog-modal/dialog-modal.tsx"],"sourcesContent":["import { TPlainObject } from '@flatbiz/utils';\nimport { createCtx } from '@wove/react';\n\nexport const [useDialogModalCtx, DialogModalCtxProvider] = createCtx<{\n /** 重新渲染footer */\n rerenderFooter: (data?: TPlainObject) => void;\n}>();\n","import { isPromise, isString } from '@dimjs/lang';\nimport { classNames } from '@dimjs/utils';\n\nimport { BodyAppendDivElementProps, dom, TNoopDefine, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { useSize } from 'ahooks';\nimport { Form, FormInstance, Modal, ModalProps } from 'antd';\nimport { ReactElement, useMemo, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ButtonWrapper, ButtonWrapperProps } from '../button-wrapper';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { FlexLayout } from '../flex-layout';\nimport { DialogModalCtxProvider, useDialogModalCtx } from './context';\nimport './style.less';\n\nexport type DialogModalProps = Omit<\n ModalProps,\n 'onOk' | 'onCancel' | 'getContainer' | 'open' | 'open' | 'okButtonProps' | 'cancelButtonProps' | 'footer'\n> & {\n /**\n * 内置尺寸,根据比例固定高度、宽度,默认:无\n * ```\n * 1. 如果自定义了width、bodyHeight属性,size中的height、width将对应失效\n * 2. 不传、传null值可取消内置尺寸\n * ```\n */\n size?: 'small' | 'middle' | 'large' | null;\n onOk?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n onCancel?: (form: FormInstance, e: React.MouseEvent<HTMLElement>) => void | Promise<void>;\n content: string | ReactElement | ((form: FormInstance, operate: { onClose: TNoopDefine }) => ReactElement);\n configProviderProps?: ConfigProviderWrapperProps;\n okHidden?: boolean;\n cancelHidden?: boolean;\n okButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n cancelButtonProps?: Omit<ButtonWrapperProps, 'hidden' | 'children' | 'onClick'>;\n /**\n * 设置modal body height 为当前窗口height的百分比,例如:30\n * @deprecated 已失效,可通过size属性设置\n * ```\n * 1. 最大值:80\n * 1. 设置bodyStyle.height 后,bodyHeightPercent失效\n * ```\n */\n bodyHeightPercent?: number;\n titleExtra?: ReactElement;\n /**\n * null则隐藏footer\n * ```\n * extraData 为外部通过 useDialogModal.rerenderFooter 重新渲染footer携带的数据\n * ```\n */\n footer?:\n | null\n | ReactElement\n | ReactElement[]\n | ((form: FormInstance, extraData?: TPlainObject) => ReactElement);\n /** 内容高度,为styles.body.height快捷配置,优先级低于styles.body.height */\n bodyHeight?: number;\n};\n\nconst ModalRender = (props: BodyAppendDivElementProps & DialogModalProps) => {\n const {\n title,\n titleExtra,\n divElement,\n elementId,\n onOk,\n onCancel,\n okButtonProps,\n cancelButtonProps,\n content,\n configProviderProps,\n className,\n okHidden,\n cancelHidden,\n footer,\n cancelText,\n okText,\n size,\n bodyHeight,\n ...otherProps\n } = props;\n\n const [open, setOpen] = useState(true);\n const [form] = Form.useForm();\n const htmlSize = useSize(document.querySelector('html'));\n const screenType = fbaHooks.useResponsivePoint() || '';\n const [footerExtraData, setFooterExtraData] = useState<TPlainObject>({});\n\n const onClose = hooks.useCallbackRef(() => {\n try {\n delete window[elementId];\n } catch (error) {\n //\n }\n setOpen(false);\n });\n\n fbaHooks.useEffectCustom(() => {\n window[elementId] = onClose;\n }, [onClose]);\n\n const onCancelHandle = hooks.useCallbackRef((e) => {\n if (onCancel) {\n const response = onCancel(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onOkHandle = hooks.useCallbackRef((e) => {\n if (onOk) {\n const response = onOk(form, e);\n if (response && isPromise(response)) {\n return response.then(onClose);\n }\n }\n return onClose();\n });\n\n const onAfterClose = hooks.useCallbackRef(() => {\n dom.removeBodyChild(`#${elementId}`);\n props.afterClose?.();\n });\n\n const footerNew = fbaHooks.useMemoCustom(() => {\n if (footer) {\n return typeof footer === 'function' ? footer(form, footerExtraData) : footer;\n }\n if ((cancelHidden && okHidden) || footer === null) {\n return null;\n }\n return [\n <ButtonWrapper key=\"0\" {...cancelButtonProps} onClick={onCancelHandle} hidden={cancelHidden}>\n {cancelText || '取消'}\n </ButtonWrapper>,\n <ButtonWrapper key=\"1\" type=\"primary\" {...okButtonProps} onClick={onOkHandle} hidden={okHidden}>\n {okText || '提交'}\n </ButtonWrapper>,\n ].filter(Boolean);\n }, [footerExtraData]);\n\n const customSize = useMemo(() => {\n if (!htmlSize?.height || !screenType) return undefined;\n const isXsSm = ['xs', 'sm'].includes(screenType);\n if (size == 'large') {\n return {\n height: htmlSize?.height * 0.7,\n width: isXsSm ? '90%' : htmlSize.width * 0.6,\n };\n }\n if (size == 'small') {\n const width = htmlSize.width * 0.3;\n return {\n height: htmlSize?.height * 0.4,\n width: isXsSm ? '90%' : width < 470 ? 470 : width,\n };\n }\n\n if (size == 'middle') {\n return {\n height: htmlSize?.height * 0.4,\n width: isXsSm ? '90%' : htmlSize.width * 0.5,\n };\n }\n\n return undefined;\n }, [htmlSize?.height, htmlSize?.width, screenType, size]);\n\n const classNameNew = classNames(\n 'v-dialog-modal',\n { 'v-dialog-modal-title-extra': !!titleExtra },\n className,\n );\n\n const rerenderFooter = (data) => {\n setFooterExtraData(data);\n };\n\n const bodyHeightNew = otherProps.styles?.body?.height || bodyHeight;\n\n return (\n <DialogModalCtxProvider value={{ rerenderFooter }}>\n <ConfigProviderWrapper {...configProviderProps}>\n <Modal\n title={\n titleExtra ? (\n <FlexLayout direction=\"horizontal\" fullIndex={0}>\n <span>{title}</span>\n {titleExtra}\n </FlexLayout>\n ) : (\n title\n )\n }\n maskClosable={true}\n centered={true}\n onCancel={onClose}\n destroyOnClose\n width={customSize?.width}\n {...otherProps}\n footer={footerNew}\n styles={{\n ...otherProps.styles,\n body: {\n height: bodyHeightNew || customSize?.height,\n maxHeight: 'calc(100vh - 200px)',\n ...otherProps.styles?.body,\n },\n }}\n className={classNameNew}\n open={open}\n afterClose={onAfterClose}\n getContainer={divElement}\n >\n {typeof content === 'function' ? content(form, { onClose }) : content}\n </Modal>\n </ConfigProviderWrapper>\n </DialogModalCtxProvider>\n );\n};\n\n/**\n * 居中弹框\n * ```\n * 1. 可嵌套使用\n * 2. 为什么不推荐使用\n * dialogModal.open 打开的内容无法适配兼容自定义主题、无法适配兼容旧版浏览器、无法兼容国际化\n * 适配兼容旧版浏览器(https://ant-design.antgroup.com/docs/react/compatible-style-cn)\n * 3. 需要修改默认主题风格的场景,请使用\n * const { appDialogModal } = FbaApp.useDialogModal();\n * appDialogModal.open({})\n * 4. size属性可使用预设的弹窗尺寸(默认值middle),如果不使用内置尺寸可设置 size = null\n * ```\n */\nexport const dialogModal = {\n open: (props: DialogModalProps) => {\n const { divElement, elementId } = dom.bodyAppendDivElement();\n window['__dialog_modal_elementId'] = elementId;\n const root = createRoot(divElement);\n root.render(<ModalRender {...props} divElement={divElement} elementId={elementId} />);\n return {\n close: () => {\n window[elementId]?.();\n },\n };\n },\n /**\n * ```\n * 1. 关闭最新弹框,如果有多个弹框只能关闭最后一个\n * 2. 多个弹框主动关闭,只能使用 dialogModal.open()返回值中的close\n * ```\n */\n close: () => {\n try {\n const elementId = window['__dialog_modal_elementId'] as string;\n if (isString(elementId)) window[elementId]?.();\n } catch (error) {\n //\n }\n },\n /**\n * ```\n * 1. rerenderFooter 携带指定数据重新渲染 footer,可用于切换footer中的按钮状态\n * ```\n */\n useDialogModal: () => {\n const ctx = useDialogModalCtx();\n return {\n /** 重新渲染 footer, data为携带的数据,是footer的第二个参数 */\n rerenderFooter: (data?: TPlainObject) => {\n ctx.rerenderFooter(data);\n },\n };\n },\n};\n"],"names":["_createCtx","_createCtx2","useDialogModalCtx","DialogModalCtxProvider","ModalRender","props","_otherProps$styles","_otherProps$styles2","title","titleExtra","divElement","elementId","onOk","onCancel","okButtonProps","cancelButtonProps","content","configProviderProps","className","okHidden","cancelHidden","footer","cancelText","okText","size","bodyHeight","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","open","setOpen","_Form$useForm","Form","useForm","form","htmlSize","useSize","document","querySelector","screenType","fbaHooks","useResponsivePoint","_useState2","footerExtraData","setFooterExtraData","onClose","_hooks","useCallbackRef","window","error","useEffectCustom","onCancelHandle","e","response","_isPromise","then","onOkHandle","onAfterClose","dom","removeBodyChild","afterClose","footerNew","useMemoCustom","_jsx","ButtonWrapper","_extends","onClick","hidden","children","type","filter","Boolean","customSize","useMemo","height","undefined","isXsSm","includes","width","classNameNew","_classNames","rerenderFooter","data","bodyHeightNew","styles","body","value","ConfigProviderWrapper","Modal","_jsxs","FlexLayout","direction","fullIndex","maskClosable","centered","destroyOnClose","maxHeight","getContainer","dialogModal","_dom$bodyAppendDivEle","bodyAppendDivElement","root","createRoot","render","close","_window$elementId","_window","call","_window$elementId2","_window2","_isString","useDialogModal","ctx"],"mappings":"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"}
@@ -5,5 +5,5 @@ import './../form-wrapper/index.css';
5
5
  import './../pre-defined-class-name/index.css';
6
6
  import './index.css';
7
7
  /*! @flatjs/forge MIT @flatbiz/antd */
8
- import{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as e,_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isUndefinedOrNull as n,dom as l}from"@flatbiz/utils";import{useMemo as i,useRef as o,Fragment as a,Children as m}from"react";import{BoxGrid as s}from"../box-grid/index.js";import{fbaHooks as u}from"../fba-hooks/index.js";import{FormWrapper as d}from"../form-wrapper/index.js";import{preDefinedClassName as f}from"../pre-defined-class-name/index.js";import{jsxs as c,jsx as p}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-number";import"ahooks";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";import"antd";var x=["column","forceColumn","children","width","gridGutter","labelWidth","labelItemVertical","labelAlign","formItemGap","isPure","nonuseFormWrapper"];var v=function v(y){var h=u.useResponsivePoint()||"";var g=y.column,b=y.forceColumn,j=y.children,I=y.width,N=y.gridGutter,w=y.labelWidth,F=y.labelItemVertical,G=y.labelAlign,W=y.formItemGap,A=W===void 0?"15":W,C=y.isPure,T=y.nonuseFormWrapper,P=e(y,x);var V=i((function(){if(b){var r=24/b;return{xs:r,sm:r,md:r,lg:r,xl:r,xxl:r}}if(!g){return{xs:24,sm:12,md:12,lg:8,xl:8,xxl:6}}var e={1:{xs:24,sm:24,md:24,lg:24,xl:24,xxl:24},2:{xs:24,sm:12,md:12,lg:12,xl:12,xxl:12},3:{xs:24,sm:12,md:12,lg:8,xl:8,xxl:8},4:{xs:24,sm:12,md:12,lg:6,xl:6,xxl:6}};return e[g]}),[g,b]);var k=function r(){return m.toArray(j).filter((function(r){return r.props["hidden"]||r.type["domTypeName"]=="FormItemHidden"}))};var B=function r(){return m.toArray(j).filter((function(r){return!r.props["hidden"]&&r.type["domTypeName"]!="FormItemHidden"})).map((function(r,e){if(r.type["domTypeName"]==="BoxGridCol")return p(a,{children:r},e);var n=undefined;if(r.type["domTypeName"]==="FormItemWrapper"||r.type["domTypeName"]==="FormItemText"){n=r.props["span"];if(n){if(h==="xs"){n=24}else if(h==="sm"){n=n>12?n:12}}}return p(s.Col,t({},V,{span:n,children:r}),e)})).filter(Boolean)};var H=i((function(){if(["xs","sm"].includes(h)||!I){return{}}return{width:I}}),[h,I]);var R=n(N)?[15,0]:N;var L=o(null);var _=function r(){try{if(T){return true}if(L.current){var e=l.findParentsElement(L.current,(function(r){var e;return(e=r.classList)==null||e.contains==null?void 0:e.contains("easy-form")}));return e?true:false}return undefined}catch(r){console.log("error",r);return false}};var z=_();var E=i((function(){if(["xs"].includes(h)){return"left"}return G}),[G,h]);var q=i((function(){return f.getFormLayoutClassName({labelWidth:w,labelItemVertical:F,labelAlign:E,formItemGap:A,className:P.className})}),[w,F,E,A,P.className]);return c(a,{children:[p("div",{className:"easy-form-anchor",ref:L}),z===true?p("div",{style:t({},H,P.style),className:r("easy-form",{"easy-form-pure":C},"easy-form-nested",q),children:C?j:c(a,{children:[k(),p(s.Row,{gutter:R,children:B()})]})}):undefined,z===false?p(d,t({},P,{labelWidth:w,labelAlign:E,labelItemVertical:F,formItemGap:A,style:t({},H,P.style),className:r("easy-form",{"easy-form-pure":C},q),autoComplete:"off",children:C?j:c(a,{children:[k(),p(s.Row,{gutter:R,children:B()})]})})):undefined]})};export{v as EasyForm};
8
+ import{classNames as r}from"@dimjs/utils/cjs/class-names";import{a as e,_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isUndefinedOrNull as n,dom as l}from"@flatbiz/utils";import{useMemo as i,useRef as o,Fragment as a,Children as s,cloneElement as m}from"react";import{BoxGrid as u}from"../box-grid/index.js";import{fbaHooks as d}from"../fba-hooks/index.js";import{FormWrapper as f}from"../form-wrapper/index.js";import{preDefinedClassName as c}from"../pre-defined-class-name/index.js";import{jsxs as p,jsx as x}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-number";import"ahooks";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"../use-responsive-point-21b8c601.js";import"antd";var v=["column","forceColumn","children","width","gridGutter","labelWidth","labelItemVertical","labelAlign","formItemGap","isPure","nonuseFormWrapper"];var h=function h(y){var g=d.useResponsivePoint()||"";var b=y.column,j=y.forceColumn,I=y.children,N=y.width,F=y.gridGutter,w=y.labelWidth,G=y.labelItemVertical,W=y.labelAlign,A=y.formItemGap,C=A===void 0?"15":A,P=y.isPure,k=y.nonuseFormWrapper,T=e(y,v);var V=i((function(){if(j){var r=24/j;return{xs:r,sm:r,md:r,lg:r,xl:r,xxl:r}}if(!b){return{xs:24,sm:12,md:12,lg:8,xl:8,xxl:6}}var e={1:{xs:24,sm:24,md:24,lg:24,xl:24,xxl:24},2:{xs:24,sm:12,md:12,lg:12,xl:12,xxl:12},3:{xs:24,sm:12,md:12,lg:8,xl:8,xxl:8},4:{xs:24,sm:12,md:12,lg:6,xl:6,xxl:6}};return e[b]}),[b,j]);var B=function r(){return s.toArray(I).filter((function(r){return r.props["hidden"]||r.type["domTypeName"]=="FormItemHidden"}))};var H=function r(){return s.toArray(I).filter((function(r){return!r.props["hidden"]&&r.type["domTypeName"]!="FormItemHidden"})).map((function(r,e){var n=r.type["domTypeName"];if(n==="BoxGridCol")return x(a,{children:r},e);var l=undefined;if(n==="FormItemWrapper"||n==="FormItemText"||n==="FormItemSpan"){l=r.props["span"];if(l){if(g==="xs"){l=24}else if(g==="sm"){l=l>12?l:12}}}if(n==="FormItemSpan"){return m(r,t({},r.props,V,{span:l,key:e}))}return x(u.Col,t({},V,{span:l,children:r}),e)})).filter(Boolean)};var R=i((function(){if(["xs","sm"].includes(g)||!N){return{}}return{width:N}}),[g,N]);var L=n(F)?[15,0]:F;var S=o(null);var _=function r(){try{if(k){return true}if(S.current){var e=l.findParentsElement(S.current,(function(r){var e;return(e=r.classList)==null||e.contains==null?void 0:e.contains("easy-form")}));return e?true:false}return undefined}catch(r){console.log("error",r);return false}};var z=_();var E=i((function(){if(["xs"].includes(g)){return"left"}return W}),[W,g]);var q=i((function(){return c.getFormLayoutClassName({labelWidth:w,labelItemVertical:G,labelAlign:E,formItemGap:C,className:T.className})}),[w,G,E,C,T.className]);return p(a,{children:[x("div",{className:"easy-form-anchor",ref:S}),z===true?x("div",{style:t({},R,T.style),className:r("easy-form",{"easy-form-pure":P},"easy-form-nested",q),children:P?I:p(a,{children:[B(),x(u.Row,{gutter:L,children:H()})]})}):undefined,z===false?x(f,t({},T,{labelWidth:w,labelAlign:E,labelItemVertical:G,formItemGap:C,style:t({},R,T.style),className:r("easy-form",{"easy-form-pure":P},q),autoComplete:"off",children:P?I:p(a,{children:[B(),x(u.Row,{gutter:L,children:H()})]})})):undefined]})};export{h as EasyForm};
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/easy-form/form.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { dom, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Children, Fragment, ReactNode, useMemo, useRef } from 'react';\nimport { BoxGrid } from '../box-grid';\nimport { BoxRowProps } from '../box-grid/row';\nimport { GutterParams } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { FormWrapper, FormWrapperProps } from '../form-wrapper';\nimport { preDefinedClassName } from '../pre-defined-class-name';\nimport './style.less';\n\nexport type EasyFormProps = Omit<FormWrapperProps, 'children'> & {\n /**\n * 定义一行显示几列(当外层宽度尺寸大于 992px(lg) 时,一行显示几列), 默认值:3\n * ```\n * 1. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响(column=1除外)\n * 2. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 3. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4;\n /**\n * Form显示宽度,可数值、可百分比;在小屏幕尺寸(xs、sm)上无效\n */\n width?: number | string;\n /** 网格间距 */\n gridGutter?: BoxRowProps['gutter'];\n children: ReactNode;\n /**\n * 是否为纯净模式,对EasyForm的子节点不做任何包装处理\n */\n isPure?: boolean;\n /**\n * true: 不使用Antd Form包裹,可在Form、EasyForm、FormWrapper内部使用\n */\n nonuseFormWrapper?: boolean;\n};\n\n/**\n * 简单Form布局,可自定义网格布局\n * ```\n * 1. demo:https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * 2. EasyForm的children列表会进行网格化布局,可通过设置 isPure = true设置纯净模式(对EasyForm的子节点不做任何包装处理)\n * 3. EasyForm可嵌套使用,嵌套内部的<EasyForm />节点Form相关属性失效,例如属性form、initialValues等都失效\n * <EasyForm form={form}>\n * ....\n * <EasyForm>...</EasyForm>\n * ....\n * <EasyForm>...</EasyForm>\n * ....\n * </EasyForm>\n * 4. 布局网格以当前组件的宽度来计算的,不是屏幕宽度\n * 5. EasyForm 子节点包含 hidden = true 会被忽略\n * 6. 通过 column 可定义一行显示几列FormItem\n * 7. 通过 labelItemVertical 可定义 formitem 竖直布局\n * 8. 通过 formItemGap 可定义 formItem竖直方向间隙\n * 9. 通过 forceColumn 可强制定义一行显示几列,不考虑响应式\n * 10. 通过 labelWidth 可控制Form内部所有label的宽度(可实现整齐效果)\n * 11. 自定义栅格占位格数,见下方`例如`\n\n * 例如\n * <EasyForm column={3}>\n *\t <FormItemWrapper name=\"field1\" label=\"条件1\">\n *\t <Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t <!-- !!自定义栅格占位格数第一种方式:可通过使用 BoxGrid.Col 包裹元素来自定义网格占比 -->\n *\t <BoxGrid.Col span={24}>\n *\t <FormItemWrapper name=\"field5\" label=\"条件5\">\n *\t \t<Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t </BoxGrid.Col>\n *\t <!-- !!自定义栅格占位格数第二种方式:如果为FormItemWrapper组件,可设置span属性 -->\n *\t <FormItemWrapper name=\"field6\" label=\"条件6\" span={24}>\n *\t <Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t <FormItemWrapper noStyle span={24}>\n *\t <Button>按钮</Buttone>\n *\t </FormItemWrapper>\n * </EasyForm>\n * ```\n */\nexport const EasyForm = (props: EasyFormProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n\n const {\n column,\n forceColumn,\n children,\n width,\n gridGutter,\n labelWidth,\n labelItemVertical,\n labelAlign,\n formItemGap = '15',\n isPure,\n nonuseFormWrapper,\n ...otherProps\n } = props;\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n if (!column) {\n return { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n };\n return columnMap[column];\n }, [column, forceColumn]);\n\n const getHiddenRowChildren = () => {\n return Children.toArray(children).filter((item: TAny) => {\n return item.props['hidden'] || item.type['domTypeName'] == 'FormItemHidden';\n });\n };\n\n const getFormRowChildren = () => {\n return Children.toArray(children)\n .filter((item: TAny) => {\n return !item.props['hidden'] && item.type['domTypeName'] != 'FormItemHidden';\n })\n .map((item: TAny, index) => {\n if (item.type['domTypeName'] === 'BoxGridCol') return <Fragment key={index}>{item}</Fragment>;\n let span: number | undefined = undefined;\n if (item.type['domTypeName'] === 'FormItemWrapper' || item.type['domTypeName'] === 'FormItemText') {\n span = item.props['span'] as number;\n if (span) {\n if (screenType === 'xs') {\n span = 24;\n } else if (screenType === 'sm') {\n span = span > 12 ? span : 12;\n }\n }\n }\n return (\n <BoxGrid.Col key={index} {...gridSize} span={span}>\n {item}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const gutter = isUndefinedOrNull(gridGutter) ? ([15, 0] as GutterParams) : gridGutter;\n const anchorRef = useRef<HTMLDivElement>(null);\n\n // 是否嵌套内部EasyForm节点\n const getIsNestedEasyForm = () => {\n try {\n if (nonuseFormWrapper) {\n return true;\n }\n if (anchorRef.current) {\n const target = dom.findParentsElement(anchorRef.current, (node) => {\n return node.classList?.contains?.('easy-form');\n });\n return target ? true : false;\n }\n return undefined;\n } catch (error) {\n console.log('error', error);\n return false;\n }\n };\n\n const isNestedEasyForm = getIsNestedEasyForm();\n\n const labelAlignNew = useMemo(() => {\n if (['xs'].includes(screenType)) {\n return 'left';\n }\n return labelAlign;\n }, [labelAlign, screenType]);\n\n const fromLayoutClassName = useMemo(() => {\n return preDefinedClassName.getFormLayoutClassName({\n labelWidth,\n labelItemVertical,\n labelAlign: labelAlignNew,\n formItemGap,\n className: otherProps.className,\n });\n }, [labelWidth, labelItemVertical, labelAlignNew, formItemGap, otherProps.className]);\n\n return (\n <Fragment>\n <div className=\"easy-form-anchor\" ref={anchorRef}></div>\n {isNestedEasyForm === true ? (\n <div\n style={{ ...innerStyle, ...otherProps.style }}\n className={classNames(\n 'easy-form',\n { 'easy-form-pure': isPure },\n 'easy-form-nested',\n fromLayoutClassName,\n )}\n >\n {isPure ? (\n children\n ) : (\n <Fragment>\n {getHiddenRowChildren()}\n <BoxGrid.Row gutter={gutter}>{getFormRowChildren()}</BoxGrid.Row>\n </Fragment>\n )}\n </div>\n ) : undefined}\n {isNestedEasyForm === false ? (\n <FormWrapper\n {...otherProps}\n labelWidth={labelWidth}\n labelAlign={labelAlignNew}\n labelItemVertical={labelItemVertical}\n formItemGap={formItemGap}\n style={{ ...innerStyle, ...otherProps.style }}\n className={classNames('easy-form', { 'easy-form-pure': isPure }, fromLayoutClassName)}\n autoComplete=\"off\"\n >\n {isPure ? (\n children\n ) : (\n <Fragment>\n {getHiddenRowChildren()}\n <BoxGrid.Row gutter={gutter}>{getFormRowChildren()}</BoxGrid.Row>\n </Fragment>\n )}\n </FormWrapper>\n ) : undefined}\n </Fragment>\n );\n};\n"],"names":["EasyForm","props","screenType","fbaHooks","useResponsivePoint","column","forceColumn","children","width","gridGutter","labelWidth","labelItemVertical","labelAlign","_props$formItemGap","formItemGap","isPure","nonuseFormWrapper","otherProps","_objectWithoutPropertiesLoose","_excluded","gridSize","useMemo","num","xs","sm","md","lg","xl","xxl","columnMap","getHiddenRowChildren","Children","toArray","filter","item","type","getFormRowChildren","map","index","_jsx","Fragment","span","undefined","BoxGrid","Col","_extends","Boolean","innerStyle","includes","gutter","isUndefinedOrNull","anchorRef","useRef","getIsNestedEasyForm","current","target","dom","findParentsElement","node","_node$classList","classList","contains","error","console","log","isNestedEasyForm","labelAlignNew","fromLayoutClassName","preDefinedClassName","getFormLayoutClassName","className","_jsxs","ref","style","_classNames","Row","FormWrapper","autoComplete"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/easy-form/form.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { dom, isUndefinedOrNull, TAny } from '@flatbiz/utils';\nimport { Children, cloneElement, Fragment, ReactNode, useMemo, useRef } from 'react';\nimport { BoxGrid } from '../box-grid';\nimport { BoxRowProps } from '../box-grid/row';\nimport { GutterParams } from '../box-grid/type';\nimport { fbaHooks } from '../fba-hooks';\nimport { FormWrapper, FormWrapperProps } from '../form-wrapper';\nimport { preDefinedClassName } from '../pre-defined-class-name';\nimport './style.less';\n\nexport type EasyFormProps = Omit<FormWrapperProps, 'children'> & {\n /**\n * 定义一行显示几列(当外层宽度尺寸大于 992px(lg) 时,一行显示几列), 默认值:3\n * ```\n * 1. 当外层宽度尺寸小于992px(lg),为xs、sm、md情况下不受column值影响(column=1除外)\n * 2. 宽度尺寸定义\n * xs: 宽度 < 576px\n * sm: 宽度 ≥ 576px\n * md: 宽度 ≥ 768px\n * lg: 宽度 ≥ 992px\n * xl: 宽度 ≥ 1200px\n * xxl: 宽度 ≥ 1600px\n * 3. 列数尺寸定义\n * {\n * 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n * 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n * 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n * 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n * };\n * ```\n */\n column?: 1 | 2 | 3 | 4;\n /**\n * 强制定义一行显示几列,不考虑响应式\n * ```\n * 1. 优先级大于column\n * 2. 建议优先使用column配置\n * ```\n */\n forceColumn?: 1 | 2 | 3 | 4;\n /**\n * Form显示宽度,可数值、可百分比;在小屏幕尺寸(xs、sm)上无效\n */\n width?: number | string;\n /** 网格间距 */\n gridGutter?: BoxRowProps['gutter'];\n children: ReactNode;\n /**\n * 是否为纯净模式,对EasyForm的子节点不做任何包装处理\n */\n isPure?: boolean;\n /**\n * true: 不使用Antd Form包裹,可在Form、EasyForm、FormWrapper内部使用\n */\n nonuseFormWrapper?: boolean;\n};\n\n/**\n * 简单Form布局,可自定义网格布局\n * ```\n * 1. demo:https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * 2. EasyForm的children列表会进行网格化布局,可通过设置 isPure = true设置纯净模式(对EasyForm的子节点不做任何包装处理)\n * 3. EasyForm可嵌套使用,嵌套内部的<EasyForm />节点Form相关属性失效,例如属性form、initialValues等都失效\n * <EasyForm form={form}>\n * ....\n * <EasyForm>...</EasyForm>\n * ....\n * <EasyForm>...</EasyForm>\n * ....\n * </EasyForm>\n * 4. 布局网格以当前组件的宽度来计算的,不是屏幕宽度\n * 5. EasyForm 子节点包含 hidden = true 会被忽略\n * 6. 通过 column 可定义一行显示几列FormItem\n * 7. 通过 labelItemVertical 可定义 formitem 竖直布局\n * 8. 通过 formItemGap 可定义 formItem竖直方向间隙\n * 9. 通过 forceColumn 可强制定义一行显示几列,不考虑响应式\n * 10. 通过 labelWidth 可控制Form内部所有label的宽度(可实现整齐效果)\n * 11. 自定义栅格占位格数,见下方`例如`\n\n * 例如\n * <EasyForm column={3}>\n *\t <FormItemWrapper name=\"field1\" label=\"条件1\">\n *\t <Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t <!-- !!自定义栅格占位格数第一种方式:可通过使用 BoxGrid.Col 包裹元素来自定义网格占比 -->\n *\t <BoxGrid.Col span={24}>\n *\t <FormItemWrapper name=\"field5\" label=\"条件5\">\n *\t \t<Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t </BoxGrid.Col>\n *\t <!-- !!自定义栅格占位格数第二种方式:如果为FormItemWrapper组件,可设置span属性 -->\n *\t <FormItemWrapper name=\"field6\" label=\"条件6\" span={24}>\n *\t <Input placeholder=\"请输入\" allowClear={true} />\n *\t </FormItemWrapper>\n *\t <FormItemWrapper noStyle span={24}>\n *\t <Button>按钮</Buttone>\n *\t </FormItemWrapper>\n * </EasyForm>\n * ```\n */\nexport const EasyForm = (props: EasyFormProps) => {\n const screenType = fbaHooks.useResponsivePoint() || '';\n\n const {\n column,\n forceColumn,\n children,\n width,\n gridGutter,\n labelWidth,\n labelItemVertical,\n labelAlign,\n formItemGap = '15',\n isPure,\n nonuseFormWrapper,\n ...otherProps\n } = props;\n\n const gridSize = useMemo(() => {\n if (forceColumn) {\n const num = 24 / forceColumn;\n return { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num };\n }\n if (!column) {\n return { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 };\n }\n const columnMap = {\n 1: { xs: 24, sm: 24, md: 24, lg: 24, xl: 24, xxl: 24 },\n 2: { xs: 24, sm: 12, md: 12, lg: 12, xl: 12, xxl: 12 },\n 3: { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 8 },\n 4: { xs: 24, sm: 12, md: 12, lg: 6, xl: 6, xxl: 6 },\n };\n return columnMap[column];\n }, [column, forceColumn]);\n\n const getHiddenRowChildren = () => {\n return Children.toArray(children).filter((item: TAny) => {\n return item.props['hidden'] || item.type['domTypeName'] == 'FormItemHidden';\n });\n };\n\n const getFormRowChildren = () => {\n return Children.toArray(children)\n .filter((item: TAny) => {\n return !item.props['hidden'] && item.type['domTypeName'] != 'FormItemHidden';\n })\n .map((item: TAny, index) => {\n const domTypeName = item.type['domTypeName'];\n if (domTypeName === 'BoxGridCol') return <Fragment key={index}>{item}</Fragment>;\n let span: number | undefined = undefined;\n if (\n domTypeName === 'FormItemWrapper' ||\n domTypeName === 'FormItemText' ||\n domTypeName === 'FormItemSpan'\n ) {\n span = item.props['span'] as number;\n if (span) {\n if (screenType === 'xs') {\n span = 24;\n } else if (screenType === 'sm') {\n span = span > 12 ? span : 12;\n }\n }\n }\n if (domTypeName === 'FormItemSpan') {\n return cloneElement(item, {\n ...item.props,\n ...gridSize,\n span,\n key: index,\n });\n }\n return (\n <BoxGrid.Col key={index} {...gridSize} span={span}>\n {item}\n </BoxGrid.Col>\n );\n })\n .filter(Boolean);\n };\n\n const innerStyle = useMemo(() => {\n /** 小屏幕不控制宽度 */\n if (['xs', 'sm'].includes(screenType) || !width) {\n return {};\n }\n return { width };\n }, [screenType, width]);\n\n const gutter = isUndefinedOrNull(gridGutter) ? ([15, 0] as GutterParams) : gridGutter;\n const anchorRef = useRef<HTMLDivElement>(null);\n\n // 是否嵌套内部EasyForm节点\n const getIsNestedEasyForm = () => {\n try {\n if (nonuseFormWrapper) {\n return true;\n }\n if (anchorRef.current) {\n const target = dom.findParentsElement(anchorRef.current, (node) => {\n return node.classList?.contains?.('easy-form');\n });\n return target ? true : false;\n }\n return undefined;\n } catch (error) {\n console.log('error', error);\n return false;\n }\n };\n\n const isNestedEasyForm = getIsNestedEasyForm();\n\n const labelAlignNew = useMemo(() => {\n if (['xs'].includes(screenType)) {\n return 'left';\n }\n return labelAlign;\n }, [labelAlign, screenType]);\n\n const fromLayoutClassName = useMemo(() => {\n return preDefinedClassName.getFormLayoutClassName({\n labelWidth,\n labelItemVertical,\n labelAlign: labelAlignNew,\n formItemGap,\n className: otherProps.className,\n });\n }, [labelWidth, labelItemVertical, labelAlignNew, formItemGap, otherProps.className]);\n\n return (\n <Fragment>\n <div className=\"easy-form-anchor\" ref={anchorRef}></div>\n {isNestedEasyForm === true ? (\n <div\n style={{ ...innerStyle, ...otherProps.style }}\n className={classNames(\n 'easy-form',\n { 'easy-form-pure': isPure },\n 'easy-form-nested',\n fromLayoutClassName,\n )}\n >\n {isPure ? (\n children\n ) : (\n <Fragment>\n {getHiddenRowChildren()}\n <BoxGrid.Row gutter={gutter}>{getFormRowChildren()}</BoxGrid.Row>\n </Fragment>\n )}\n </div>\n ) : undefined}\n {isNestedEasyForm === false ? (\n <FormWrapper\n {...otherProps}\n labelWidth={labelWidth}\n labelAlign={labelAlignNew}\n labelItemVertical={labelItemVertical}\n formItemGap={formItemGap}\n style={{ ...innerStyle, ...otherProps.style }}\n className={classNames('easy-form', { 'easy-form-pure': isPure }, fromLayoutClassName)}\n autoComplete=\"off\"\n >\n {isPure ? (\n children\n ) : (\n <Fragment>\n {getHiddenRowChildren()}\n <BoxGrid.Row gutter={gutter}>{getFormRowChildren()}</BoxGrid.Row>\n </Fragment>\n )}\n </FormWrapper>\n ) : undefined}\n </Fragment>\n );\n};\n"],"names":["EasyForm","props","screenType","fbaHooks","useResponsivePoint","column","forceColumn","children","width","gridGutter","labelWidth","labelItemVertical","labelAlign","_props$formItemGap","formItemGap","isPure","nonuseFormWrapper","otherProps","_objectWithoutPropertiesLoose","_excluded","gridSize","useMemo","num","xs","sm","md","lg","xl","xxl","columnMap","getHiddenRowChildren","Children","toArray","filter","item","type","getFormRowChildren","map","index","domTypeName","_jsx","Fragment","span","undefined","cloneElement","_extends","key","BoxGrid","Col","Boolean","innerStyle","includes","gutter","isUndefinedOrNull","anchorRef","useRef","getIsNestedEasyForm","current","target","dom","findParentsElement","node","_node$classList","classList","contains","error","console","log","isNestedEasyForm","labelAlignNew","fromLayoutClassName","preDefinedClassName","getFormLayoutClassName","className","_jsxs","ref","style","_classNames","Row","FormWrapper","autoComplete"],"mappings":";22BAqGaA,EAAW,SAAXA,EAAYC,GACvB,IAAMC,EAAaC,EAASC,sBAAwB,GAEpD,IACEC,EAYEJ,EAZFI,OACAC,EAWEL,EAXFK,YACAC,EAUEN,EAVFM,SACAC,EASEP,EATFO,MACAC,EAQER,EARFQ,WACAC,EAOET,EAPFS,WACAC,EAMEV,EANFU,kBACAC,EAKEX,EALFW,WAAUC,EAKRZ,EAJFa,YAAAA,EAAWD,SAAG,EAAA,KAAIA,EAClBE,EAGEd,EAHFc,OACAC,EAEEf,EAFFe,kBACGC,EAAUC,EACXjB,EAAKkB,GAET,IAAMC,EAAWC,GAAQ,WACvB,GAAIf,EAAa,CACf,IAAMgB,EAAM,GAAKhB,EACjB,MAAO,CAAEiB,GAAID,EAAKE,GAAIF,EAAKG,GAAIH,EAAKI,GAAIJ,EAAKK,GAAIL,EAAKM,IAAKN,EAC7D,CACA,IAAKjB,EAAQ,CACX,MAAO,CAAEkB,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,EACtD,CACA,IAAMC,EAAY,CAChB,EAAG,CAAEN,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,IAClD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,IAClD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,GAChD,EAAG,CAAEL,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGC,GAAI,EAAGC,IAAK,IAElD,OAAOC,EAAUxB,EACnB,GAAG,CAACA,EAAQC,IAEZ,IAAMwB,EAAuB,SAAvBA,IACJ,OAAOC,EAASC,QAAQzB,GAAU0B,QAAO,SAACC,GACxC,OAAOA,EAAKjC,MAAM,WAAaiC,EAAKC,KAAK,gBAAkB,gBAC7D,KAGF,IAAMC,EAAqB,SAArBA,IACJ,OAAOL,EAASC,QAAQzB,GACrB0B,QAAO,SAACC,GACP,OAAQA,EAAKjC,MAAM,WAAaiC,EAAKC,KAAK,gBAAkB,gBAC7D,IACAE,KAAI,SAACH,EAAYI,GAChB,IAAMC,EAAcL,EAAKC,KAAK,eAC9B,GAAII,IAAgB,aAAc,OAAOC,EAACC,EAAQ,CAAAlC,SAAc2B,GAARI,GACxD,IAAII,EAA2BC,UAC/B,GACEJ,IAAgB,mBAChBA,IAAgB,gBAChBA,IAAgB,eAChB,CACAG,EAAOR,EAAKjC,MAAM,QAClB,GAAIyC,EAAM,CACR,GAAIxC,IAAe,KAAM,CACvBwC,EAAO,EACT,MAAO,GAAIxC,IAAe,KAAM,CAC9BwC,EAAOA,EAAO,GAAKA,EAAO,EAC5B,CACF,CACF,CACA,GAAIH,IAAgB,eAAgB,CAClC,OAAOK,EAAaV,EAAIW,KACnBX,EAAKjC,MACLmB,EAAQ,CACXsB,KAAAA,EACAI,IAAKR,IAET,CACA,OACEE,EAACO,EAAQC,IAAGH,KAAiBzB,EAAQ,CAAEsB,KAAMA,EAAKnC,SAC/C2B,IADeI,EAItB,IACCL,OAAOgB,UAGZ,IAAMC,EAAa7B,GAAQ,WAEzB,GAAI,CAAC,KAAM,MAAM8B,SAASjD,KAAgBM,EAAO,CAC/C,MAAO,EACT,CACA,MAAO,CAAEA,MAAAA,EACX,GAAG,CAACN,EAAYM,IAEhB,IAAM4C,EAASC,EAAkB5C,GAAe,CAAC,GAAI,GAAsBA,EAC3E,IAAM6C,EAAYC,EAAuB,MAGzC,IAAMC,EAAsB,SAAtBA,IACJ,IACE,GAAIxC,EAAmB,CACrB,OAAO,IACT,CACA,GAAIsC,EAAUG,QAAS,CACrB,IAAMC,EAASC,EAAIC,mBAAmBN,EAAUG,SAAS,SAACI,GAAS,IAAAC,EACjE,OAAAA,EAAOD,EAAKE,YAALD,MAAAA,EAAgBE,sBAAhBF,EAAgBE,SAAW,YACpC,IACA,OAAON,EAAS,KAAO,KACzB,CACA,OAAOf,SACR,CAAC,MAAOsB,GACPC,QAAQC,IAAI,QAASF,GACrB,OAAO,KACT,GAGF,IAAMG,EAAmBZ,IAEzB,IAAMa,EAAgBhD,GAAQ,WAC5B,GAAI,CAAC,MAAM8B,SAASjD,GAAa,CAC/B,MAAO,MACT,CACA,OAAOU,CACT,GAAG,CAACA,EAAYV,IAEhB,IAAMoE,EAAsBjD,GAAQ,WAClC,OAAOkD,EAAoBC,uBAAuB,CAChD9D,WAAAA,EACAC,kBAAAA,EACAC,WAAYyD,EACZvD,YAAAA,EACA2D,UAAWxD,EAAWwD,WAE1B,GAAG,CAAC/D,EAAYC,EAAmB0D,EAAevD,EAAaG,EAAWwD,YAE1E,OACEC,EAACjC,EAAQ,CAAAlC,UACPiC,EAAA,MAAA,CAAKiC,UAAU,mBAAmBE,IAAKrB,IACtCc,IAAqB,KACpB5B,EAAA,MAAA,CACEoC,MAAK/B,EAAOK,CAAAA,EAAAA,EAAejC,EAAW2D,OACtCH,UAAWI,EACT,YACA,CAAE,iBAAkB9D,GACpB,mBACAuD,GACA/D,SAEDQ,EACCR,EAEAmE,EAACjC,EAAQ,CAAAlC,SAAA,CACNuB,IACDU,EAACO,EAAQ+B,IAAG,CAAC1B,OAAQA,EAAO7C,SAAE6B,WAIlCO,UACHyB,IAAqB,MACpB5B,EAACuC,EAAWlC,KACN5B,EAAU,CACdP,WAAYA,EACZE,WAAYyD,EACZ1D,kBAAmBA,EACnBG,YAAaA,EACb8D,MAAK/B,EAAOK,CAAAA,EAAAA,EAAejC,EAAW2D,OACtCH,UAAWI,EAAW,YAAa,CAAE,iBAAkB9D,GAAUuD,GACjEU,aAAa,MAAKzE,SAEjBQ,EACCR,EAEAmE,EAACjC,EAAQ,CAAAlC,SAAA,CACNuB,IACDU,EAACO,EAAQ+B,IAAG,CAAC1B,OAAQA,EAAO7C,SAAE6B,YAIlCO,YAGV"}
@@ -16,5 +16,5 @@ import './../form-item-wrapper/index.css';
16
16
  import './../tips-wrapper/index.css';
17
17
  import './index.css';
18
18
  /*! @flatjs/forge MIT @flatbiz/antd */
19
- import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as i}from"@wove/react/cjs/hooks";import{toArray as o,isUndefinedOrNull as t}from"@flatbiz/utils";import{Form as a,Empty as l}from"antd";import{useRef as d,useMemo as s,Fragment as m,createElement as u,isValidElement as p}from"react";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{CardWrapper as f}from"../card-wrapper/index.js";import{DeleteNode as v}from"../delete-node/index.js";import{EasyForm as g}from"../easy-form/index.js";import{fbaUtils as y}from"../fba-utils/index.js";import{FormItemHidden as j}from"../form-item-hidden/index.js";import{FormItemWrapper as h}from"../form-item-wrapper/index.js";import{TipsWrapper as x}from"../tips-wrapper/index.js";import{jsx as b,jsxs as F}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"@dimjs/model";import"@ant-design/icons/es/icons/CloseCircleFilled";import"@ant-design/icons/es/icons/DeleteOutlined";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../box-grid/index.js";import"@dimjs/lang/cjs/is-number";import"ahooks";import"../form-wrapper/index.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var k=function k(w){var C=a.useFormInstance();var P=o(w.formListName);var R=d();var N=i.useForceUpdate();var I=w.formListCompleteName||P;var E=i.useCallbackRef((function(e,r){return new Promise((function(n,i){return Promise.resolve(C.validateFields(r.map((function(r){return[].concat(e,o(r))})))).then((function(e){try{return n()}catch(e){return i(e)}}),i)}))}));var D=i.useCallbackRef((function(e){return C.getFieldValue(e)}));var q=i.useCallbackRef((function(e,r){y.setFormFieldsAndTriggerValuesChange(C,r.map((function(r){return{name:[].concat(I,[e],o(r.name)),value:r.value}})));N()}));var L=s((function(){return w.columns.map((function(e){var r;var i=e.title;var a=i;if(e.tips){a=b(x,{tipType:"popover",popoverProps:{content:e.tips},children:i})}var l=e.required;if(!l&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){l=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}var d=o(e["dataIndex"]);return{render:function r(i,o,s){var p;var c=C.getFieldValue([].concat(I,[o.name]));var f=C.getFieldValue([].concat(I,[o.name],d));if(t(e.render)){return b(m,{children:f})}var v=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(c,i):e==null?void 0:e.editable;var g=[].concat(I,[o.name]);var y={index:i,editable:v,add:s.add,remove:s.remove,move:s.move,rowFormItemName:o.name,rowFormItemCompleteName:g,setCurrentRowField:q.bind(null,o.name),validateRowFields:E.bind(null,g),getCurrentRowData:D.bind(null,g),forceUpdate:N};if(e.hidden!=null&&e.hidden(c,i)){return b(j,{name:[o.name].concat(d)},o.key)}var x=typeof e.formItemProps==="function"?e.formItemProps(y):e.formItemProps;if(!((p=x)!=null&&(p=p.rules)!=null&&p.length)&&l){x=n({},x,{rules:[{required:true,message:""}]})}if(v===true){return u(h,n({},x,{name:[o.name].concat(d),label:a,span:e.gridNumber,key:o.key}),e.render==null?void 0:e.render(y))}return b(h,n({label:a,span:e.gridNumber},x,{children:e.render==null?void 0:e.render(y)}),o.key)}}}))}),[w.columns,C,I,q,E,D,N]);var V=r("editable-card",w.className);return b("div",{className:V,style:w.style,children:b(a.List,{name:P,rules:w.rules,children:function r(i,o,t){var d=t.errors;R.current=o;return F("div",{style:{borderRadius:"6px",border:d!=null&&d.length?"1px solid #ff4d4f":"1px solid transparent"},children:[w.contentBeforeRender==null?void 0:w.contentBeforeRender(o,i.length),i.map((function(e,r){var t;var a=w.onCustomGroupName?w.onCustomGroupName(r):r+1;var l={index:r,fields:i,fieldItem:e,operation:o,required:w.required,key:""+e.key};if(w.onCustomWrapper){var d;return w.onCustomWrapper(b(g,n({nonuseFormWrapper:true},w.cardEasyFormProps,{style:n({padding:0,margin:0},(d=w.cardEasyFormProps)==null?void 0:d.style),children:L.map((function(r,n){return r.render(n,e,o)}))}),e.key),l)}var s=w.cardExtraRender==null?void 0:w.cardExtraRender(l);return b(f,{className:w.cardClassName,title:a,size:"small",style:n({padding:0,margin:"0 0 15px 0"},w.cardStyle),bodyStyle:{paddingBottom:0},extra:p(s)?s:F("div",{style:{display:"inline-flex",alignItems:"center",gap:"8px"},children:[s==null?void 0:s["before"],b(v,{style:{color:"red"},hidden:w.required&&i.length===1,onDelete:function e(){o.remove(r)}}),s==null?void 0:s["after"]]}),children:b(g,n({nonuseFormWrapper:true},w.cardEasyFormProps,{style:n({padding:0,margin:0},(t=w.cardEasyFormProps)==null?void 0:t.style),children:L.map((function(r,n){return r.render(n,e,o)}))}),e.key)},e.key)})),i.length===0?b("div",{className:"editable-card-empty",children:b(l,{image:l.PRESENTED_IMAGE_SIMPLE})}):null,b(c,{block:true,hidden:w.hiddenFooterBtn,type:"dashed",icon:b(e,{}),style:{marginTop:i.length?15:0},onClick:function e(){var r=w.addRowDefaultValues==null?void 0:w.addRowDefaultValues();o.add(n({},r))},children:"新增"}),w.contentAfterRender==null?void 0:w.contentAfterRender(o,i.length),d.length?b(a.ErrorList,{errors:[b("div",{style:{color:"#ff4d4f",padding:"5px"},children:d},"0")]}):null]})}})})};export{k as EditableCard};
19
+ import e from"@ant-design/icons/es/icons/PlusOutlined";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as n}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as i}from"@wove/react/cjs/hooks";import{toArray as o,isUndefinedOrNull as t}from"@flatbiz/utils";import{Form as a,ConfigProvider as d,Empty as l}from"antd";import{useRef as s,useMemo as m,Fragment as u,createElement as p,isValidElement as c}from"react";import{ButtonWrapper as f}from"../button-wrapper/index.js";import{CardWrapper as v}from"../card-wrapper/index.js";import{DeleteNode as g}from"../delete-node/index.js";import{EasyForm as y}from"../easy-form/index.js";import{fbaUtils as j}from"../fba-utils/index.js";import{FormItemHidden as h}from"../form-item-hidden/index.js";import{FormItemWrapper as x}from"../form-item-wrapper/index.js";import{TipsWrapper as b}from"../tips-wrapper/index.js";import{jsx as F,jsxs as w}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"@dimjs/model";import"@ant-design/icons/es/icons/CloseCircleFilled";import"@ant-design/icons/es/icons/DeleteOutlined";import"../icon-wrapper/index.js";import"@dimjs/lang/cjs/is-undefined";import"../box-grid/index.js";import"@dimjs/lang/cjs/is-number";import"ahooks";import"../form-wrapper/index.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var C=function C(k){var P=a.useFormInstance();var R=o(k.formListName);var I=s();var N=i.useForceUpdate();var E=d.useConfig(),D=E.componentDisabled;var V=k.formListCompleteName||R;var _=i.useCallbackRef((function(e,r){return new Promise((function(n,i){return Promise.resolve(P.validateFields(r.map((function(r){return[].concat(e,o(r))})))).then((function(e){try{return n()}catch(e){return i(e)}}),i)}))}));var q=i.useCallbackRef((function(e){return P.getFieldValue(e)}));var B=i.useCallbackRef((function(e,r){j.setFormFieldsAndTriggerValuesChange(P,r.map((function(r){return{name:[].concat(V,[e],o(r.name)),value:r.value}})));N()}));var L=m((function(){return k.columns.map((function(e){var r;var i=e.title;var a=i;if(e.tips){a=F(b,{tipType:"popover",popoverProps:{content:e.tips},children:i})}var d=e.required;if(!d&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){d=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}var l=o(e["dataIndex"]);return{dataIndex:l,render:function r(i,o,s){var m;var c=P.getFieldValue([].concat(V,[o.name],l));if(t(e.render)){return F(u,{children:c})}var f=[].concat(V,[o.name]);var v=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable({index:i,getCurrentRowData:q.bind(null,f)},i):e==null?void 0:e.editable;var g={index:i,editable:v,add:s.add,remove:s.remove,move:s.move,rowFormItemName:o.name,rowFormItemCompleteName:f,setCurrentRowField:B.bind(null,o.name),validateRowFields:_.bind(null,f),getCurrentRowData:q.bind(null,f),forceUpdate:N};if(e.remove!=null&&e.remove(g,i)){return F(u,{})}if(e.hidden!=null&&e.hidden(g,i)){return F(h,{name:[o.name].concat(l)},o.key)}var y=typeof e.formItemProps==="function"?e.formItemProps(g):e.formItemProps;if(!((m=y)!=null&&(m=m.rules)!=null&&m.length)&&d){y=n({},y,{rules:[{required:true,message:""}]})}if(v===true){return p(x,n({},y,{name:[o.name].concat(l),label:a,span:e.gridNumber,key:o.key}),e.render==null?void 0:e.render(g))}return F(x,n({label:a,span:e.gridNumber},y,{children:e.render==null?void 0:e.render(g)}),o.key)}}}))}),[k.columns,P,V,B,_,q,N]);var O=r("editable-card",k.className);return F("div",{className:O,style:k.style,children:F(a.List,{name:R,rules:k.rules,initialValue:k.initialValue,children:function r(i,o,t){var d=t.errors;I.current=o;return w("div",{style:{borderRadius:"6px",border:d!=null&&d.length?"1px solid #ff4d4f":"1px solid transparent"},children:[k.contentBeforeRender==null?void 0:k.contentBeforeRender(o,i.length),i.map((function(e,r){var t;var a=k.onCustomGroupName?k.onCustomGroupName(r):r+1;var d={index:r,fields:i,fieldItem:e,operation:o,required:k.required,key:""+e.key};if(k.onCustomWrapper){var l;return F(u,{children:k.onCustomWrapper(F(y,n({nonuseFormWrapper:true},k.cardEasyFormProps,{style:n({padding:0,margin:0},(l=k.cardEasyFormProps)==null?void 0:l.style),children:L.map((function(n){return n.render(r,e,o)}))})),d)},e.key)}var s=k.cardExtraRender==null?void 0:k.cardExtraRender(d);return F(v,{className:k.cardClassName,title:a,size:"small",style:n({padding:0,margin:"0 0 15px 0"},k.cardStyle),bodyStyle:{paddingBottom:0},extra:c(s)?s:w("div",{style:{display:"inline-flex",alignItems:"center",gap:"8px"},children:[s==null?void 0:s["before"],F(g,{style:{color:"red"},hidden:k.required&&i.length===1||D,onDelete:function e(){o.remove(r)}}),s==null?void 0:s["after"]]}),children:F(y,n({nonuseFormWrapper:true},k.cardEasyFormProps,{style:n({padding:0,margin:0},(t=k.cardEasyFormProps)==null?void 0:t.style),children:L.map((function(n){return F(u,{children:n.render(r,e,o)},n.dataIndex.join("_"))}))}))},e.key)})),i.length===0?F("div",{className:"editable-card-empty",children:F(l,{image:l.PRESENTED_IMAGE_SIMPLE})}):null,F(f,{block:true,hidden:k.hiddenFooterBtn||D,type:"dashed",icon:F(e,{}),onClick:function e(){var r=k.addRowDefaultValues==null?void 0:k.addRowDefaultValues();o.add(n({},r))},children:k.addRowBtnName||"新增"}),k.contentAfterRender==null?void 0:k.contentAfterRender(o,i.length),d.length?F(a.ErrorList,{errors:[F("div",{style:{color:"#ff4d4f",padding:"5px"},children:d},"0")]}):null]})}})})};export{C as EditableCard};
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-card/editable-card.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\n\nimport type { TAny } from '@flatbiz/utils';\nimport { isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Empty, Form, FormListFieldData, type FormListOperation } from 'antd';\nimport type { ReactElement } from 'react';\nimport { Fragment, isValidElement, useMemo, useRef } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { CardWrapper } from '../card-wrapper';\nimport { DeleteNode } from '../delete-node';\nimport { EasyForm } from '../easy-form';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemHidden } from '../form-item-hidden';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type { EditableCardDataIndex, EditableCardOperation, EditableCardProps } from './type';\n\n/**\n * 使用FormList实现可编辑卡片\n * ```\n * 1. EditableCard有两种模式,正常 & 禁用\n * 2. 必须在外部包裹Form组件\n * 3. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowField 方法\n * 4. 可使用DragEditableCard组件实现拖拽排序\n * 5. 设置EditableCard disabled后,通过 LabelValueRender 组件展示数据,可通过 disabledRenderProps 配置布局\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * ```\n */\nexport const EditableCard = (props: EditableCardProps) => {\n const form = Form.useFormInstance();\n const formListName = toArray<string | number>(props.formListName);\n const formListOperationRef = useRef<FormListOperation>();\n const forceUpdate = hooks.useForceUpdate();\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableCardDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n const getCurrentRowData = hooks.useCallbackRef((formItemPrevName: Array<string | number>) => {\n return form.getFieldValue(formItemPrevName);\n });\n\n const setCurrentRowField = hooks.useCallbackRef(\n (\n formItemPrevName: string | number,\n dataIndexConfigs: {\n name: EditableCardDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n forceUpdate();\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n let titleRender: ReactElement | string | undefined = title;\n if (column.tips) {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tips }}>\n {title}\n </TipsWrapper>\n );\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n const dataIndex = toArray<string>(column['dataIndex']);\n\n return {\n render: (index, fieldData: FormListFieldData, operation: FormListOperation) => {\n const record = form.getFieldValue([...formListCompleteName, fieldData.name]);\n const value = form.getFieldValue([...formListCompleteName, fieldData.name, ...dataIndex]);\n if (isUndefinedOrNull(column.render)) {\n return <Fragment>{value}</Fragment>;\n }\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n\n const rowFormItemCompleteName = [...formListCompleteName, fieldData.name];\n\n const renderOperationProps: EditableCardOperation = {\n index,\n editable,\n add: operation.add,\n remove: operation.remove,\n move: operation.move,\n rowFormItemName: fieldData.name,\n rowFormItemCompleteName,\n setCurrentRowField: setCurrentRowField.bind(null, fieldData.name),\n validateRowFields: validateRowFields.bind(null, rowFormItemCompleteName),\n getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName),\n forceUpdate,\n };\n\n if (column.hidden?.(record, index)) {\n return <FormItemHidden name={[fieldData.name, ...dataIndex]} key={fieldData.key} />;\n }\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n if (editable === true) {\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[fieldData.name, ...dataIndex]}\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n >\n {column.render?.(renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return (\n <FormItemWrapper\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n {...formItemProps}\n >\n {column.render?.(renderOperationProps)}\n </FormItemWrapper>\n );\n },\n };\n });\n }, [\n props.columns,\n form,\n formListCompleteName,\n setCurrentRowField,\n validateRowFields,\n getCurrentRowData,\n forceUpdate,\n ]);\n\n const className = classNames('editable-card', props.className);\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.contentBeforeRender?.(formListOperation, fields.length)}\n {fields.map((fieldItem, index) => {\n const title = props.onCustomGroupName ? props.onCustomGroupName(index) : index + 1;\n\n const extraData = {\n index,\n fields,\n fieldItem,\n operation: formListOperation,\n required: props.required,\n key: `${fieldItem.key}`,\n };\n if (props.onCustomWrapper) {\n return props.onCustomWrapper(\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>,\n extraData,\n );\n }\n\n const cardExtraRenderResult = props.cardExtraRender?.(extraData);\n\n return (\n <CardWrapper\n key={fieldItem.key}\n className={props.cardClassName}\n title={title}\n size=\"small\"\n style={{\n padding: 0,\n margin: '0 0 15px 0',\n ...props.cardStyle,\n }}\n bodyStyle={{ paddingBottom: 0 }}\n // styles={{ body: { paddingBottom: 0 } }}\n extra={\n isValidElement(cardExtraRenderResult) ? (\n cardExtraRenderResult\n ) : (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n {cardExtraRenderResult?.['before']}\n <DeleteNode\n style={{ color: 'red' }}\n hidden={props.required && fields.length === 1}\n onDelete={() => {\n formListOperation.remove(index);\n }}\n />\n {cardExtraRenderResult?.['after']}\n </div>\n )\n }\n >\n <EasyForm\n nonuseFormWrapper={true}\n key={fieldItem.key}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column, index) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>\n </CardWrapper>\n );\n })}\n {fields.length === 0 ? (\n <div className=\"editable-card-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : null}\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: fields.length ? 15 : 0 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n formListOperation.add({ ...defaultValues });\n }}\n >\n 新增\n </ButtonWrapper>\n {props.contentAfterRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableCard","props","form","Form","useFormInstance","formListName","toArray","formListOperationRef","useRef","forceUpdate","_hooks","useForceUpdate","formListCompleteName","validateRowFields","useCallbackRef","formItemPrevName","nameList","Promise","$return","$error","resolve","validateFields","map","item","concat","then","$await_1","$boundEx","getCurrentRowData","getFieldValue","setCurrentRowField","dataIndexConfigs","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","columns","useMemo","column","_column$formItemProps","title","titleRender","tips","_jsx","TipsWrapper","tipType","popoverProps","content","children","required","formItemProps","rules","length","find","dataIndex","render","index","fieldData","operation","_formItemProps","record","isUndefinedOrNull","Fragment","editable","rowFormItemCompleteName","renderOperationProps","add","remove","move","rowFormItemName","bind","hidden","FormItemHidden","key","_extends","message","_createElement","FormItemWrapper","label","span","gridNumber","className","_classNames","style","List","fields","formListOperation","_ref","errors","current","_jsxs","borderRadius","border","contentBeforeRender","fieldItem","_props$cardEasyFormPr2","onCustomGroupName","extraData","onCustomWrapper","_props$cardEasyFormPr","EasyForm","nonuseFormWrapper","cardEasyFormProps","padding","margin","cardExtraRenderResult","cardExtraRender","CardWrapper","cardClassName","size","cardStyle","bodyStyle","paddingBottom","extra","isValidElement","display","alignItems","gap","DeleteNode","color","onDelete","Empty","image","PRESENTED_IMAGE_SIMPLE","ButtonWrapper","block","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","contentAfterRender","ErrorList"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-card/editable-card.tsx"],"sourcesContent":["import { PlusOutlined } from '@ant-design/icons';\nimport { classNames } from '@dimjs/utils';\n\nimport type { TAny } from '@flatbiz/utils';\nimport { isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { ConfigProvider, Empty, Form, FormListFieldData, type FormListOperation } from 'antd';\nimport type { ReactElement } from 'react';\nimport { Fragment, isValidElement, useMemo, useRef } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { CardWrapper } from '../card-wrapper';\nimport { DeleteNode } from '../delete-node';\nimport { EasyForm } from '../easy-form';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemHidden } from '../form-item-hidden';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type { EditableCardDataIndex, EditableCardOperation, EditableCardProps } from './type';\n\n/**\n * 使用FormList实现可编辑卡片\n * ```\n * 1. 必须在外部包裹Form组件或者EasyForm组件\n * 2. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowField 方法\n * 3. 可使用DragEditableCard组件实现拖拽排序\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/form/grid\n * ```\n */\nexport const EditableCard = (props: EditableCardProps) => {\n const form = Form.useFormInstance();\n const formListName = toArray<string | number>(props.formListName);\n const formListOperationRef = useRef<FormListOperation>();\n const forceUpdate = hooks.useForceUpdate();\n const { componentDisabled } = ConfigProvider.useConfig();\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableCardDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n const getCurrentRowData = hooks.useCallbackRef((formItemPrevName: Array<string | number>) => {\n return form.getFieldValue(formItemPrevName);\n });\n\n const setCurrentRowField = hooks.useCallbackRef(\n (\n formItemPrevName: string | number,\n dataIndexConfigs: {\n name: EditableCardDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n forceUpdate();\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n let titleRender: ReactElement | string | undefined = title;\n if (column.tips) {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tips }}>\n {title}\n </TipsWrapper>\n );\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n const dataIndex = toArray<string>(column['dataIndex']);\n\n return {\n dataIndex,\n render: (index, fieldData: FormListFieldData, operation: FormListOperation) => {\n const value = form.getFieldValue([...formListCompleteName, fieldData.name, ...dataIndex]);\n if (isUndefinedOrNull(column.render)) {\n return <Fragment>{value}</Fragment>;\n }\n\n const rowFormItemCompleteName = [...formListCompleteName, fieldData.name];\n\n const editable =\n typeof column?.editable === 'function'\n ? column?.editable(\n {\n index,\n getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName),\n },\n index,\n )\n : column?.editable;\n\n const renderOperationProps: EditableCardOperation = {\n index,\n editable,\n add: operation.add,\n remove: operation.remove,\n move: operation.move,\n rowFormItemName: fieldData.name,\n rowFormItemCompleteName,\n setCurrentRowField: setCurrentRowField.bind(null, fieldData.name),\n validateRowFields: validateRowFields.bind(null, rowFormItemCompleteName),\n getCurrentRowData: getCurrentRowData.bind(null, rowFormItemCompleteName),\n forceUpdate,\n };\n\n if (column.remove?.(renderOperationProps, index)) {\n return <Fragment />;\n }\n\n if (column.hidden?.(renderOperationProps, index)) {\n return <FormItemHidden name={[fieldData.name, ...dataIndex]} key={fieldData.key} />;\n }\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n if (editable === true) {\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[fieldData.name, ...dataIndex]}\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n >\n {column.render?.(renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return (\n <FormItemWrapper\n label={titleRender}\n span={column.gridNumber}\n key={fieldData.key}\n {...formItemProps}\n >\n {column.render?.(renderOperationProps)}\n </FormItemWrapper>\n );\n },\n };\n });\n }, [\n props.columns,\n form,\n formListCompleteName,\n setCurrentRowField,\n validateRowFields,\n getCurrentRowData,\n forceUpdate,\n ]);\n\n const className = classNames('editable-card', props.className);\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules} initialValue={props.initialValue}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.contentBeforeRender?.(formListOperation, fields.length)}\n {fields.map((fieldItem, index) => {\n const title = props.onCustomGroupName ? props.onCustomGroupName(index) : index + 1;\n\n const extraData = {\n index,\n fields,\n fieldItem,\n operation: formListOperation,\n required: props.required,\n key: `${fieldItem.key}`,\n };\n if (props.onCustomWrapper) {\n return (\n <Fragment key={fieldItem.key}>\n {props.onCustomWrapper(\n <EasyForm\n nonuseFormWrapper={true}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column) => {\n return column.render(index, fieldItem, formListOperation);\n })}\n </EasyForm>,\n extraData,\n )}\n </Fragment>\n );\n }\n\n const cardExtraRenderResult = props.cardExtraRender?.(extraData);\n\n return (\n <CardWrapper\n key={fieldItem.key}\n className={props.cardClassName}\n title={title}\n size=\"small\"\n style={{\n padding: 0,\n margin: '0 0 15px 0',\n ...props.cardStyle,\n }}\n bodyStyle={{ paddingBottom: 0 }}\n // styles={{ body: { paddingBottom: 0 } }}\n extra={\n isValidElement(cardExtraRenderResult) ? (\n cardExtraRenderResult\n ) : (\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n {cardExtraRenderResult?.['before']}\n <DeleteNode\n style={{ color: 'red' }}\n hidden={(props.required && fields.length === 1) || componentDisabled}\n onDelete={() => {\n formListOperation.remove(index);\n }}\n />\n {cardExtraRenderResult?.['after']}\n </div>\n )\n }\n >\n <EasyForm\n nonuseFormWrapper={true}\n {...props.cardEasyFormProps}\n style={{\n padding: 0,\n margin: 0,\n ...props.cardEasyFormProps?.style,\n }}\n >\n {columns.map((column) => {\n return (\n <Fragment key={column.dataIndex.join('_')}>\n {column.render(index, fieldItem, formListOperation)}\n </Fragment>\n );\n })}\n </EasyForm>\n </CardWrapper>\n );\n })}\n {fields.length === 0 ? (\n <div className=\"editable-card-empty\">\n <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : null}\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn || componentDisabled}\n type=\"dashed\"\n icon={<PlusOutlined />}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n formListOperation.add({ ...defaultValues });\n }}\n >\n {props.addRowBtnName || '新增'}\n </ButtonWrapper>\n {props.contentAfterRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableCard","props","form","Form","useFormInstance","formListName","toArray","formListOperationRef","useRef","forceUpdate","_hooks","useForceUpdate","_ConfigProvider$useCo","ConfigProvider","useConfig","componentDisabled","formListCompleteName","validateRowFields","useCallbackRef","formItemPrevName","nameList","Promise","$return","$error","resolve","validateFields","map","item","concat","then","$await_1","$boundEx","getCurrentRowData","getFieldValue","setCurrentRowField","dataIndexConfigs","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","columns","useMemo","column","_column$formItemProps","title","titleRender","tips","_jsx","TipsWrapper","tipType","popoverProps","content","children","required","formItemProps","rules","length","find","dataIndex","render","index","fieldData","operation","_formItemProps","isUndefinedOrNull","Fragment","rowFormItemCompleteName","editable","bind","renderOperationProps","add","remove","move","rowFormItemName","hidden","FormItemHidden","key","_extends","message","_createElement","FormItemWrapper","label","span","gridNumber","className","_classNames","style","List","initialValue","fields","formListOperation","_ref","errors","current","_jsxs","borderRadius","border","contentBeforeRender","fieldItem","_props$cardEasyFormPr2","onCustomGroupName","extraData","onCustomWrapper","_props$cardEasyFormPr","EasyForm","nonuseFormWrapper","cardEasyFormProps","padding","margin","cardExtraRenderResult","cardExtraRender","CardWrapper","cardClassName","size","cardStyle","bodyStyle","paddingBottom","extra","isValidElement","display","alignItems","gap","DeleteNode","color","onDelete","join","Empty","image","PRESENTED_IMAGE_SIMPLE","ButtonWrapper","block","hiddenFooterBtn","type","icon","_PlusOutlined","onClick","defaultValues","addRowDefaultValues","addRowBtnName","contentAfterRender","ErrorList"],"mappings":"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"}
@@ -10,5 +10,5 @@ import './../text-symbol-wrapper/index.css';
10
10
  import './../tips-wrapper/index.css';
11
11
  import './index.css';
12
12
  /*! @flatjs/forge MIT @flatbiz/antd */
13
- import e from"@ant-design/icons/es/icons/PlusOutlined";import r from"@ant-design/icons/es/icons/CloseCircleFilled";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as a}from"@wove/react/cjs/hooks";import{isArray as l}from"@dimjs/lang/cjs/is-array";import{cloneState as i}from"@dimjs/model";import{toArray as o,arrayReorder as s,isUndefinedOrNull as d}from"@flatbiz/utils";import{Form as u,Table as p,Space as m,message as c}from"antd";import{useState as f,useRef as v,useMemo as g,isValidElement as b}from"react";import{ButtonWrapper as h}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{fbaUtils as j}from"../fba-utils/index.js";import{FormItemWrapper as x}from"../form-item-wrapper/index.js";import{TextSymbolWrapper as C}from"../text-symbol-wrapper/index.js";import{TipsWrapper as w}from"../tips-wrapper/index.js";import{jsx as R,jsxs as F}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../use-responsive-point-21b8c601.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var P=function P(k){var A;var I=u.useFormInstance();var V=f([]),N=V[0],T=V[1];var U=o(k.formListName);var L=v({});var z=v({});var B=v();var K=k.uidFieldKey;var O=k.childrenColumnName||"children";var W=k.expandedIconLayout||"layout1";var q=k.formListCompleteName||U;var D=u.useWatch(q,I);var E=f(),S=E[0],_=E[1];var Y=g((function(){if(!D)return[];var e=false;function r(n,t,a){for(var l=0;l<n.length;l++){var i=n[l];if(!i[K]){console.error(i,"数据中未查询到唯一值");e=true;return}else{z.current[i[K]]={level:t,parentUid:a,index:l};L.current[i[K]]=i;r(i[O]||[],t+1,i[K])}}}z.current={};L.current={};r(l(D)?D:[],1);if(e){var n="数据源中存在唯一值【"+K+"】为空的情况,无法渲染表格";void c.error(n);_(n);return[]}return D}),[O,D,K]);y.useEffectCustom((function(){T(k.expandedRowKeys||[])}),[JSON.stringify(k.expandedRowKeys||[])]);var H=a.useCallbackRef((function(e){var r=e[K];var n=z.current[r];var t=[];while(n){t.push(n.index);if(n.level===1){break}n=n.parentUid?z.current[n.parentUid]:undefined}var a=[];t.reverse().forEach((function(e,r){a.push(e);if(r<t.length-1){a.push(O)}}));return a}));var J=a.useCallbackRef((function(e,r,n){var t=L.current[e];if(t){if(t.level===1){var a;(a=B.current)==null?void 0:a.add(r,n);return}t[O]=t[O]||[];if(n==undefined){t[O].push(r)}else{t[O].splice(n,0,r)}var l=new Set(N);l.add(t[K]);T([].concat(Array.from(l)));j.setFormFieldsAndTriggerValuesChange(I,[{name:q,value:[].concat(D)}])}}));var Q=a.useCallbackRef((function(e,r){var n=z.current[e];if(n.level===1){var t;(t=B.current)==null?void 0:t.remove(r);return}var a=n.parentUid;if(!a){D.splice(r,1)}else{var l=L.current[a];l[O].splice(r,1);if(l[O].length===0){delete l[O]}}j.setFormFieldsAndTriggerValuesChange(I,[{name:q,value:i(D)}])}));var G=a.useCallbackRef((function(e,r,n){if(r===n||n<0)return;var t=z.current[e];var a=t.parentUid;if(!a){var l=s(D,r,n);j.setFormFieldsAndTriggerValuesChange(I,[{name:q,value:l}])}else{var i=L.current[a];i[O]=s(i[O],r,n);j.setFormFieldsAndTriggerValuesChange(I,[{name:q,value:[].concat(D)}])}}));var M=a.useCallbackRef((function(e,r){j.setFormFieldsAndTriggerValuesChange(I,r.map((function(r){return{name:[].concat(q,e,o(r.name)),value:r.value}})))}));var X=a.useCallbackRef((function(e,r){M(e,[{name:O,value:r}])}));var Z=a.useCallbackRef((function(e,r){return new Promise((function(n,t){return Promise.resolve(I.validateFields(r.map((function(r){return[].concat(e,o(r))})))).then((function(e){try{return n()}catch(e){return t(e)}}),t)}))}));var $=g((function(){return k.columns.map((function(e){var r;var n=e.title;var a=b(n)||typeof n==="string";var l=n;if(e.tipsWrapperProps&&a){if(typeof e.tipsWrapperProps==="string"){l=R(w,{tipType:"popover",popoverProps:{content:e.tipsWrapperProps},children:n})}else{l=R(w,t({},e.tipsWrapperProps,{children:n}))}}var i=e.required;if(!i&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){i=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}return t({onCell:function e(){var r;return{valign:((r=k.tableProps)==null?void 0:r.cellVerticalAlign)||"middle"}}},e,{title:i?R(C,{style:{marginLeft:e.align==="center"?undefined:10},text:l,position:"before",symbolType:"required"}):l,render:function r(n,a,l){if(d(e.render)){return n}var s=a[K];var u=o(e["dataIndex"]);var p=H(a);var m=z.current[s];var c=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(a,l):e==null?void 0:e.editable;var f=[].concat(q,p);var v={editable:c,add:J.bind(null,s),remove:Q.bind(null,s),move:G.bind(null,s),level:m.level,parentItem:m.parentUid?z.current[m.parentUid]:null,tableRowFormItemName:p,tableRowFormItemCompleteName:f,setCurrentRowTargetField:M.bind(null,p),setCurrentRowChildrenValue:X.bind(null,p),validateRowFields:Z.bind(null,f)};if(c===true){var g,b;var h=typeof e.formItemProps==="function"?e.formItemProps(n,a,l,v):e.formItemProps;if(!((g=h)!=null&&(g=g.rules)!=null&&g.length)&&i){h=t({},h,{rules:[{required:true,message:""}]})}return R(x,t({},h,{name:[].concat(p,u),style:t({marginBottom:0},(b=h)==null?void 0:b.style),children:e.render==null?void 0:e.render(n,a,l,v)}))}return e.render==null?void 0:e.render(n,a,l,v)}})}))}),[k.columns,(A=k.tableProps)==null?void 0:A.cellVerticalAlign,K,H,q,J,Q,G,M,X,Z]);var ee=n("editable-table-pro",{"editable-table-pro-layout1":W==="layout1"},k.className);return R("div",{className:ee,style:k.style,children:R(u.List,{name:U,rules:k.rules,children:function n(a,l,i){var o;var s=i.errors;B.current=l;return F("div",{style:{borderRadius:"6px",border:s!=null&&s.length?"1px solid #ff4d4f":"1px solid transparent"},children:[k.tableBeforeAreaRender==null?void 0:k.tableBeforeAreaRender(l,a.length),R(p,t({scroll:{x:"max-content"},pagination:false,size:"small"},k.tableProps,{locale:{emptyText:S?F(m,{size:5,style:{color:"#ff4d4f"},children:[R(r,{}),R("span",{children:S})]}):undefined},expandable:t({expandedRowKeys:N,onExpandedRowsChange:function e(r){T(r)}},(o=k.tableProps)==null?void 0:o.expandable,{childrenColumnName:O}),columns:$,dataSource:Y,rowKey:K})),R(h,{block:true,hidden:k.hiddenFooterBtn,type:"dashed",icon:R(e,{}),style:{marginTop:15},onClick:function e(){var r=k.addRowDefaultValues==null?void 0:k.addRowDefaultValues();if(!(r!=null&&r[K])){void c.error("新增行默认值必须包含唯一值字段【"+K+"】,通过 addRowDefaultValues 设置");return}l.add(r)},children:"新增"}),k.tableAfterAreaRender==null?void 0:k.tableAfterAreaRender(l,a.length),s.length?R(u.ErrorList,{errors:[R("div",{style:{color:"#ff4d4f",padding:"5px"},children:s},"0")]}):null]})}})})};export{P as EditableTablePro};
13
+ import e from"@ant-design/icons/es/icons/PlusOutlined";import r from"@ant-design/icons/es/icons/CloseCircleFilled";import{classNames as n}from"@dimjs/utils/cjs/class-names";import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{hooks as a}from"@wove/react/cjs/hooks";import{isArray as i}from"@dimjs/lang/cjs/is-array";import{cloneState as l}from"@dimjs/model";import{toArray as o,arrayReorder as s,isUndefinedOrNull as d}from"@flatbiz/utils";import{Form as u,Table as p,Space as m,message as c}from"antd";import{useState as f,useRef as v,useMemo as g,isValidElement as b}from"react";import{ButtonWrapper as h}from"../button-wrapper/index.js";import{fbaHooks as y}from"../fba-hooks/index.js";import{fbaUtils as j}from"../fba-utils/index.js";import{FormItemWrapper as x}from"../form-item-wrapper/index.js";import{TextSymbolWrapper as C}from"../text-symbol-wrapper/index.js";import{TipsWrapper as w}from"../tips-wrapper/index.js";import{jsx as R,jsxs as F}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"../index-7f4ad045.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../use-responsive-point-21b8c601.js";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var P=function P(k){var A;var V=u.useFormInstance();var I=f([]),N=I[0],T=I[1];var U=o(k.formListName);var L=v({});var z=v({});var B=v();var K=k.uidFieldKey;var O=k.childrenColumnName||"children";var W=k.expandedIconLayout||"layout1";var q=k.formListCompleteName||U;var D=u.useWatch(q,V);var E=f(),S=E[0],_=E[1];var Y=g((function(){if(!D)return[];var e=false;function r(n,t,a){for(var i=0;i<n.length;i++){var l=n[i];if(!l[K]){console.error(l,"数据中未查询到唯一值");e=true;return}else{z.current[l[K]]={level:t,parentUid:a,index:i};L.current[l[K]]=l;r(l[O]||[],t+1,l[K])}}}z.current={};L.current={};r(i(D)?D:[],1);if(e){var n="数据源中存在唯一值【"+K+"】为空的情况,无法渲染表格";void c.error(n);_(n);return[]}return D}),[O,D,K]);y.useEffectCustom((function(){T(k.expandedRowKeys||[])}),[JSON.stringify(k.expandedRowKeys||[])]);var H=a.useCallbackRef((function(e){var r=e[K];var n=z.current[r];var t=[];while(n){t.push(n.index);if(n.level===1){break}n=n.parentUid?z.current[n.parentUid]:undefined}var a=[];t.reverse().forEach((function(e,r){a.push(e);if(r<t.length-1){a.push(O)}}));return a}));var J=a.useCallbackRef((function(e,r,n){var t=L.current[e];if(t){if(t.level===1){var a;(a=B.current)==null?void 0:a.add(r,n);return}t[O]=t[O]||[];if(n==undefined){t[O].push(r)}else{t[O].splice(n,0,r)}var i=new Set(N);i.add(t[K]);T([].concat(Array.from(i)));j.setFormFieldsAndTriggerValuesChange(V,[{name:q,value:[].concat(D)}])}}));var Q=a.useCallbackRef((function(e,r){var n=z.current[e];if(n.level===1){var t;(t=B.current)==null?void 0:t.remove(r);return}var a=n.parentUid;if(!a){D.splice(r,1)}else{var i=L.current[a];i[O].splice(r,1);if(i[O].length===0){delete i[O]}}j.setFormFieldsAndTriggerValuesChange(V,[{name:q,value:l(D)}])}));var G=a.useCallbackRef((function(e,r,n){if(r===n||n<0)return;var t=z.current[e];var a=t.parentUid;if(!a){var i=s(D,r,n);j.setFormFieldsAndTriggerValuesChange(V,[{name:q,value:i}])}else{var l=L.current[a];l[O]=s(l[O],r,n);j.setFormFieldsAndTriggerValuesChange(V,[{name:q,value:[].concat(D)}])}}));var M=a.useCallbackRef((function(e,r){j.setFormFieldsAndTriggerValuesChange(V,r.map((function(r){return{name:[].concat(q,e,o(r.name)),value:r.value}})))}));var X=a.useCallbackRef((function(e,r){M(e,[{name:O,value:r}])}));var Z=a.useCallbackRef((function(e,r){return new Promise((function(n,t){return Promise.resolve(V.validateFields(r.map((function(r){return[].concat(e,o(r))})))).then((function(e){try{return n()}catch(e){return t(e)}}),t)}))}));var $=g((function(){return k.columns.map((function(e){var r;var n=e.title;var a=b(n)||typeof n==="string";var i=n;if(e.tipsWrapperProps&&a){if(typeof e.tipsWrapperProps==="string"){i=R(w,{tipType:"popover",popoverProps:{content:e.tipsWrapperProps},children:n})}else{i=R(w,t({},e.tipsWrapperProps,{children:n}))}}var l=e.required;if(!l&&typeof e.formItemProps==="object"&&(r=e.formItemProps.rules)!=null&&r.length){l=!!e.formItemProps.rules.find((function(e){return!!e["required"]}))}return t({onCell:function e(){var r;return{valign:((r=k.tableProps)==null?void 0:r.cellVerticalAlign)||"middle"}}},e,{title:l?R(C,{style:{marginLeft:e.align==="center"?undefined:10},text:i,position:"before",symbolType:"required"}):i,render:function r(n,a,i){if(d(e.render)){return n}var s=a[K];var u=o(e["dataIndex"]);var p=H(a);var m=z.current[s];var c=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(a,i):e==null?void 0:e.editable;var f=[].concat(q,p);var v={editable:c,add:J.bind(null,s),remove:Q.bind(null,s),move:G.bind(null,s),level:m.level,parentItem:m.parentUid?z.current[m.parentUid]:null,tableRowFormItemName:p,tableRowFormItemCompleteName:f,setCurrentRowTargetField:M.bind(null,p),setCurrentRowChildrenValue:X.bind(null,p),validateRowFields:Z.bind(null,f)};if(c===true){var g,b;var h=typeof e.formItemProps==="function"?e.formItemProps(n,a,i,v):e.formItemProps;if(!((g=h)!=null&&(g=g.rules)!=null&&g.length)&&l){h=t({},h,{rules:[{required:true,message:""}]})}return R(x,t({},h,{name:[].concat(p,u),style:t({marginBottom:0},(b=h)==null?void 0:b.style),children:e.render==null?void 0:e.render(n,a,i,v)}))}return e.render==null?void 0:e.render(n,a,i,v)}})}))}),[k.columns,(A=k.tableProps)==null?void 0:A.cellVerticalAlign,K,H,q,J,Q,G,M,X,Z]);var ee=n("editable-table-pro",{"editable-table-pro-layout1":W==="layout1"},k.className);return R("div",{className:ee,style:k.style,children:R(u.List,{name:U,rules:k.rules,initialValue:k.initialValue,children:function n(a,i,l){var o;var s=l.errors;B.current=i;return F("div",{style:{borderRadius:"6px",border:s!=null&&s.length?"1px solid #ff4d4f":"1px solid transparent"},children:[k.tableBeforeAreaRender==null?void 0:k.tableBeforeAreaRender(i,a.length),R(p,t({scroll:{x:"max-content"},pagination:false,size:"small"},k.tableProps,{locale:{emptyText:S?F(m,{size:5,style:{color:"#ff4d4f"},children:[R(r,{}),R("span",{children:S})]}):undefined},expandable:t({expandedRowKeys:N,onExpandedRowsChange:function e(r){T(r)}},(o=k.tableProps)==null?void 0:o.expandable,{childrenColumnName:O}),columns:$,dataSource:Y,rowKey:K})),R(h,{block:true,hidden:k.hiddenFooterBtn,type:"dashed",icon:R(e,{}),style:{marginTop:15},onClick:function e(){var r=k.addRowDefaultValues==null?void 0:k.addRowDefaultValues();if(!(r!=null&&r[K])){void c.error("新增行默认值必须包含唯一值字段【"+K+"】,通过 addRowDefaultValues 设置");return}i.add(r)},children:"新增"}),k.tableAfterAreaRender==null?void 0:k.tableAfterAreaRender(i,a.length),s.length?R(u.ErrorList,{errors:[R("div",{style:{color:"#ff4d4f",padding:"5px"},children:s},"0")]}):null]})}})})};export{P as EditableTablePro};
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-table-pro/editable-table-pro.tsx"],"sourcesContent":["import { CloseCircleFilled, PlusOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { arrayReorder, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Space, Table, type FormListOperation, type TableProps } from 'antd';\nimport type { FormListProps } from 'antd/es/form';\nimport type { ColumnsType } from 'antd/es/table';\nimport type { ReactElement } from 'react';\nimport { isValidElement, useMemo, useRef, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type {\n EditableTableProColumnItem,\n EditableTableProDataIndex,\n EditableTableProOperation,\n} from './type';\n\ntype dataSourceRelativeItem = {\n level: number;\n parentUid?: string | number;\n index: number;\n};\n\nexport type EditableTableProProps = {\n columns: EditableTableProColumnItem[];\n /**\n * 当前Edittable处在formList内部时(必填),完整formItem的name\n * ```\n * 例如 处在formList内部\n * 1. formListName=[0,dataList]\n * 2. formListCompleteName=[xxxList, 0, dataList]\n * ```\n */\n formListCompleteName?: Array<string | number>;\n /** Form.List name */\n formListName: Array<string | number> | string;\n /** 唯一值字段Key */\n uidFieldKey: string;\n /** 指定树形结构的列名,默认值:children */\n childrenColumnName?: string;\n /** 表格组件配置 */\n tableProps?: Omit<TableProps<TPlainObject>, 'dataSource' | 'columns' | 'rowKey'> & {\n // 如果重写了columns.onCell,则此配置失效\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n /**\n * Form.List rules\n * ```\n rules={[\n {\n validator: async (_, names) => {\n if (!names || names.length < 2) {\n return Promise.reject(new Error('At least 2 passengers'));\n }\n },\n },\n ]}\n * ```\n */\n rules?: FormListProps['rules'];\n className?: string;\n style?: React.CSSProperties;\n\n /**`默认新增按钮`新增行默认值,hiddenFooterBtn != true 有效 */\n addRowDefaultValues?: () => TPlainObject;\n /** 隐藏底部`新增`按钮 */\n hiddenFooterBtn?: boolean;\n /** 表格顶部区域渲染 */\n tableBeforeAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 表格底部区域渲染 */\n tableAfterAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 展开的行key,一般用于初始化,重新tableProps.expandable.expandedRowKeys后失效 */\n expandedRowKeys?: string[];\n /**\n * 展开图标布局,默认:layout1\n * ```\n * 1. 可编辑表格第一项为可编辑状态时,选 layout1\n * 2. 可编辑表格第一项为非可编辑状态时,选 layout2\n * ```\n */\n expandedIconLayout?: 'layout1' | 'layout2';\n};\n\n/**\n * 使用FormList实现可编辑表格\n * ```\n * 1. 必须在外部包裹Form组件\n * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置\n * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children\n * 4. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowTargetField 方法\n * 5. 在多级编辑中,可通过 column.render.operation.level 判断当前行数据层级\n * 6. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 7. 存在多级的情况下,可通过 column.render.operation.move 方法实现同一级内移动\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable1\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable2\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable4\n * ```\n */\nexport const EditableTablePro = (props: EditableTableProProps) => {\n const form = Form.useFormInstance();\n const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);\n const formListName = toArray<string | number>(props.formListName);\n const dataSourceUidMap = useRef<Record<string, TPlainObject>>({});\n const dataSourceUidMapFt = useRef<Record<string | number, dataSourceRelativeItem>>({});\n const formListOperationRef = useRef<FormListOperation>();\n const uidFieldKey = props.uidFieldKey;\n const childrenColumnName = props.childrenColumnName || 'children';\n const expandedIconLayout = props.expandedIconLayout || 'layout1';\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const [showEmptyText, setShowEmptyText] = useState<string | undefined>();\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n let queryUidErrorFlag = false;\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n for (let index = 0; index < itemList.length; index++) {\n const item = itemList[index];\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n queryUidErrorFlag = true;\n return;\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n }\n }\n\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n if (queryUidErrorFlag) {\n const txt = `数据源中存在唯一值【${uidFieldKey}】为空的情况,无法渲染表格`;\n void message.error(txt);\n setShowEmptyText(txt);\n return [];\n }\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\n\n fbaHooks.useEffectCustom(() => {\n setExpandedRowKeys(props.expandedRowKeys || []);\n }, [JSON.stringify(props.expandedRowKeys || [])]);\n\n const getFormItemName = hooks.useCallbackRef((record: TPlainObject) => {\n const uid = record[uidFieldKey];\n let target: dataSourceRelativeItem | undefined = dataSourceUidMapFt.current[uid];\n\n const indexes: number[] = [];\n while (target) {\n indexes.push(target.index);\n if (target.level === 1) {\n break;\n }\n target = target.parentUid ? dataSourceUidMapFt.current[target.parentUid] : undefined;\n }\n const arr: Array<string | number> = [];\n indexes.reverse().forEach((item, index) => {\n arr.push(item);\n if (index < indexes.length - 1) {\n arr.push(childrenColumnName);\n }\n });\n return arr;\n });\n\n const addItem = hooks.useCallbackRef((uid: string, defaultValue: TPlainObject, insertIndex?: number) => {\n const target = dataSourceUidMap.current[uid];\n\n if (target) {\n if (target.level === 1) {\n /** 通过 formListOperation.add 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.add(defaultValue, insertIndex);\n return;\n }\n target[childrenColumnName] = target[childrenColumnName] || [];\n if (insertIndex == undefined) {\n target[childrenColumnName].push(defaultValue);\n } else {\n target[childrenColumnName].splice(insertIndex, 0, defaultValue);\n }\n const expandedRowKeysSet = new Set(expandedRowKeys);\n expandedRowKeysSet.add(target[uidFieldKey]);\n setExpandedRowKeys([...Array.from(expandedRowKeysSet)]);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const deleteItem = hooks.useCallbackRef((uid: string | number, index: number) => {\n const target = dataSourceUidMapFt.current[uid];\n if (target.level === 1) {\n /** 通过 formListOperation.remove 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.remove(index);\n return;\n }\n const parentUid = target.parentUid;\n if (!parentUid) {\n dataSource.splice(index, 1);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName].splice(index, 1);\n if (parentTarget[childrenColumnName].length === 0) {\n delete parentTarget[childrenColumnName];\n }\n }\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: cloneState(dataSource),\n },\n ]);\n });\n\n const moveItem = hooks.useCallbackRef((uid: string | number, fromIndex: number, toIndex: number) => {\n if (fromIndex === toIndex || toIndex < 0) return;\n const target = dataSourceUidMapFt.current[uid];\n const parentUid = target.parentUid;\n if (!parentUid) {\n const result = arrayReorder(dataSource, fromIndex, toIndex);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: result,\n },\n ]);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName] = arrayReorder(parentTarget[childrenColumnName], fromIndex, toIndex);\n\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const setCurrentRowTargetField = hooks.useCallbackRef(\n (\n formItemPrevName: Array<string | number>,\n dataIndexConfigs: {\n name: EditableTableProDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, ...formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n },\n );\n\n const setCurrentRowChildrenValue = hooks.useCallbackRef(\n (formItemPrevName: Array<string | number>, value?: TPlainObject[]) => {\n setCurrentRowTargetField(formItemPrevName, [{ name: childrenColumnName, value }]);\n },\n );\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableTableProDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n const support = isValidElement(title) || typeof title === 'string';\n let titleRender: ReactElement | string | undefined = title;\n if (column.tipsWrapperProps && support) {\n if (typeof column.tipsWrapperProps === 'string') {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tipsWrapperProps }}>\n {title}\n </TipsWrapper>\n );\n } else {\n titleRender = <TipsWrapper {...column.tipsWrapperProps}>{title}</TipsWrapper>;\n }\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: required ? (\n <TextSymbolWrapper\n style={{ marginLeft: column.align === 'center' ? undefined : 10 }}\n text={titleRender}\n position=\"before\"\n symbolType=\"required\"\n />\n ) : (\n titleRender\n ),\n render: (value, record, index) => {\n if (isUndefinedOrNull(column.render)) {\n return value;\n }\n const uid = record[uidFieldKey];\n const dataIndex = toArray<string>(column['dataIndex']);\n const formItemPrevName = getFormItemName(record);\n const dataSourceTarget = dataSourceUidMapFt.current[uid];\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n const tableRowFormItemCompleteName = [...formListCompleteName, ...formItemPrevName];\n\n const renderOperationProps: EditableTableProOperation = {\n editable,\n add: addItem.bind(null, uid),\n remove: deleteItem.bind(null, uid),\n move: moveItem.bind(null, uid),\n level: dataSourceTarget.level,\n parentItem: dataSourceTarget.parentUid\n ? dataSourceUidMapFt.current[dataSourceTarget.parentUid]\n : null,\n tableRowFormItemName: formItemPrevName,\n tableRowFormItemCompleteName,\n setCurrentRowTargetField: setCurrentRowTargetField.bind(null, formItemPrevName),\n setCurrentRowChildrenValue: setCurrentRowChildrenValue.bind(null, formItemPrevName),\n validateRowFields: validateRowFields.bind(null, tableRowFormItemCompleteName),\n };\n if (editable === true) {\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(value, record, index, renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[...formItemPrevName, ...dataIndex]}\n style={{ marginBottom: 0, ...formItemProps?.style }}\n >\n {column.render?.(value, record, index, renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return column.render?.(value, record, index, renderOperationProps);\n },\n };\n }) as ColumnsType<TPlainObject>;\n }, [\n props.columns,\n props.tableProps?.cellVerticalAlign,\n uidFieldKey,\n getFormItemName,\n formListCompleteName,\n addItem,\n deleteItem,\n moveItem,\n setCurrentRowTargetField,\n setCurrentRowChildrenValue,\n validateRowFields,\n ]);\n\n const className = classNames(\n 'editable-table-pro',\n { 'editable-table-pro-layout1': expandedIconLayout === 'layout1' },\n props.className,\n );\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.tableBeforeAreaRender?.(formListOperation, fields.length)}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n size=\"small\"\n {...props.tableProps}\n locale={{\n emptyText: showEmptyText ? (\n <Space size={5} style={{ color: '#ff4d4f' }}>\n <CloseCircleFilled />\n <span>{showEmptyText}</span>\n </Space>\n ) : undefined,\n }}\n expandable={{\n expandedRowKeys: expandedRowKeys,\n onExpandedRowsChange: (expandedRowKeys) => {\n setExpandedRowKeys(expandedRowKeys as string[]);\n },\n ...props.tableProps?.expandable,\n childrenColumnName: childrenColumnName,\n }}\n columns={columns}\n dataSource={dataSourceFt}\n rowKey={uidFieldKey}\n />\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n if (!defaultValues?.[uidFieldKey]) {\n void message.error(\n `新增行默认值必须包含唯一值字段【${uidFieldKey}】,通过 addRowDefaultValues 设置`,\n );\n return;\n }\n formListOperation.add(defaultValues);\n }}\n >\n 新增\n </ButtonWrapper>\n {props.tableAfterAreaRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableTablePro","props","_props$tableProps2","form","Form","useFormInstance","_useState","useState","expandedRowKeys","setExpandedRowKeys","formListName","toArray","dataSourceUidMap","useRef","dataSourceUidMapFt","formListOperationRef","uidFieldKey","childrenColumnName","expandedIconLayout","formListCompleteName","dataSource","useWatch","_useState2","showEmptyText","setShowEmptyText","dataSourceFt","useMemo","queryUidErrorFlag","deep","itemList","level","parentUid","index","length","item","console","error","current","_isArray","txt","message","fbaHooks","useEffectCustom","JSON","stringify","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","forEach","addItem","defaultValue","insertIndex","_formListOperationRef","add","splice","expandedRowKeysSet","Set","concat","Array","from","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","deleteItem","_formListOperationRef2","remove","parentTarget","cloneState","moveItem","fromIndex","toIndex","result","arrayReorder","setCurrentRowTargetField","formItemPrevName","dataIndexConfigs","map","setCurrentRowChildrenValue","validateRowFields","nameList","Promise","$return","$error","resolve","validateFields","then","$await_1","$boundEx","columns","column","_column$formItemProps","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","required","formItemProps","rules","find","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","tableRowFormItemCompleteName","renderOperationProps","bind","move","parentItem","tableRowFormItemName","_formItemProps","_formItemProps2","FormItemWrapper","marginBottom","className","_classNames","List","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","locale","emptyText","Space","color","_CloseCircleFilled","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","tableAfterAreaRender","ErrorList","padding"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-table-pro/editable-table-pro.tsx"],"sourcesContent":["import { CloseCircleFilled, PlusOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport type { TAny, TPlainObject } from '@flatbiz/utils';\nimport { arrayReorder, isUndefinedOrNull, toArray } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Space, Table, type FormListOperation, type TableProps } from 'antd';\nimport type { FormListProps } from 'antd/es/form';\nimport type { ColumnsType } from 'antd/es/table';\nimport type { ReactElement } from 'react';\nimport { isValidElement, useMemo, useRef, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { fbaHooks } from '../fba-hooks';\nimport { fbaUtils } from '../fba-utils';\nimport { FormItemWrapper } from '../form-item-wrapper';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport type {\n EditableTableProColumnItem,\n EditableTableProDataIndex,\n EditableTableProOperation,\n} from './type';\n\ntype dataSourceRelativeItem = {\n level: number;\n parentUid?: string | number;\n index: number;\n};\n\nexport type EditableTableProProps = {\n columns: EditableTableProColumnItem[];\n /**\n * 当前Edittable处在formList内部时(必填),完整formItem的name\n * ```\n * 例如 处在formList内部\n * 1. formListName=[0,dataList]\n * 2. formListCompleteName=[xxxList, 0, dataList]\n * ```\n */\n formListCompleteName?: Array<string | number>;\n /** Form.List name */\n formListName: Array<string | number> | string;\n /** 唯一值字段Key */\n uidFieldKey: string;\n /** 初始化值 */\n initialValue?: TPlainObject[];\n /** 指定树形结构的列名,默认值:children */\n childrenColumnName?: string;\n /** 表格组件配置 */\n tableProps?: Omit<TableProps<TPlainObject>, 'dataSource' | 'columns' | 'rowKey'> & {\n // 如果重写了columns.onCell,则此配置失效\n cellVerticalAlign?: 'baseline' | 'middle' | 'top' | 'bottom';\n };\n /**\n * Form.List rules\n * ```\n rules={[\n {\n validator: async (_, names) => {\n if (!names || names.length < 2) {\n return Promise.reject(new Error('At least 2 passengers'));\n }\n },\n },\n ]}\n * ```\n */\n rules?: FormListProps['rules'];\n className?: string;\n style?: React.CSSProperties;\n\n /**`默认新增按钮`新增行默认值,hiddenFooterBtn != true 有效 */\n addRowDefaultValues?: () => TPlainObject;\n /** 隐藏底部`新增`按钮 */\n hiddenFooterBtn?: boolean;\n /** 表格顶部区域渲染 */\n tableBeforeAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 表格底部区域渲染 */\n tableAfterAreaRender?: (formListOperation: FormListOperation, nextRowIndex: number) => ReactElement | null;\n /** 展开的行key,一般用于初始化,重新tableProps.expandable.expandedRowKeys后失效 */\n expandedRowKeys?: string[];\n /**\n * 展开图标布局,默认:layout1\n * ```\n * 1. 可编辑表格第一项为可编辑状态时,选 layout1\n * 2. 可编辑表格第一项为非可编辑状态时,选 layout2\n * ```\n */\n expandedIconLayout?: 'layout1' | 'layout2';\n};\n\n/**\n * 使用FormList实现可编辑表格\n * ```\n * 1. 必须在外部包裹Form组件\n * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置\n * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children\n * 4. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowTargetField 方法\n * 5. 在多级编辑中,可通过 column.render.operation.level 判断当前行数据层级\n * 6. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 7. 存在多级的情况下,可通过 column.render.operation.move 方法实现同一级内移动\n *\n * demo\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable1\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable2\n * https://fex.qa.tcshuke.com/docs/admin/main/table/row-editable4\n * ```\n */\nexport const EditableTablePro = (props: EditableTableProProps) => {\n const form = Form.useFormInstance();\n const [expandedRowKeys, setExpandedRowKeys] = useState<string[]>([]);\n const formListName = toArray<string | number>(props.formListName);\n const dataSourceUidMap = useRef<Record<string, TPlainObject>>({});\n const dataSourceUidMapFt = useRef<Record<string | number, dataSourceRelativeItem>>({});\n const formListOperationRef = useRef<FormListOperation>();\n const uidFieldKey = props.uidFieldKey;\n const childrenColumnName = props.childrenColumnName || 'children';\n const expandedIconLayout = props.expandedIconLayout || 'layout1';\n\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const [showEmptyText, setShowEmptyText] = useState<string | undefined>();\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n let queryUidErrorFlag = false;\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n for (let index = 0; index < itemList.length; index++) {\n const item = itemList[index];\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n queryUidErrorFlag = true;\n return;\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n }\n }\n\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n if (queryUidErrorFlag) {\n const txt = `数据源中存在唯一值【${uidFieldKey}】为空的情况,无法渲染表格`;\n void message.error(txt);\n setShowEmptyText(txt);\n return [];\n }\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\n\n fbaHooks.useEffectCustom(() => {\n setExpandedRowKeys(props.expandedRowKeys || []);\n }, [JSON.stringify(props.expandedRowKeys || [])]);\n\n const getFormItemName = hooks.useCallbackRef((record: TPlainObject) => {\n const uid = record[uidFieldKey];\n let target: dataSourceRelativeItem | undefined = dataSourceUidMapFt.current[uid];\n\n const indexes: number[] = [];\n while (target) {\n indexes.push(target.index);\n if (target.level === 1) {\n break;\n }\n target = target.parentUid ? dataSourceUidMapFt.current[target.parentUid] : undefined;\n }\n const arr: Array<string | number> = [];\n indexes.reverse().forEach((item, index) => {\n arr.push(item);\n if (index < indexes.length - 1) {\n arr.push(childrenColumnName);\n }\n });\n return arr;\n });\n\n const addItem = hooks.useCallbackRef((uid: string, defaultValue: TPlainObject, insertIndex?: number) => {\n const target = dataSourceUidMap.current[uid];\n\n if (target) {\n if (target.level === 1) {\n /** 通过 formListOperation.add 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.add(defaultValue, insertIndex);\n return;\n }\n target[childrenColumnName] = target[childrenColumnName] || [];\n if (insertIndex == undefined) {\n target[childrenColumnName].push(defaultValue);\n } else {\n target[childrenColumnName].splice(insertIndex, 0, defaultValue);\n }\n const expandedRowKeysSet = new Set(expandedRowKeys);\n expandedRowKeysSet.add(target[uidFieldKey]);\n setExpandedRowKeys([...Array.from(expandedRowKeysSet)]);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const deleteItem = hooks.useCallbackRef((uid: string | number, index: number) => {\n const target = dataSourceUidMapFt.current[uid];\n if (target.level === 1) {\n /** 通过 formListOperation.remove 可以使得 Form.List的 rules 生效 */\n formListOperationRef.current?.remove(index);\n return;\n }\n const parentUid = target.parentUid;\n if (!parentUid) {\n dataSource.splice(index, 1);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName].splice(index, 1);\n if (parentTarget[childrenColumnName].length === 0) {\n delete parentTarget[childrenColumnName];\n }\n }\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: cloneState(dataSource),\n },\n ]);\n });\n\n const moveItem = hooks.useCallbackRef((uid: string | number, fromIndex: number, toIndex: number) => {\n if (fromIndex === toIndex || toIndex < 0) return;\n const target = dataSourceUidMapFt.current[uid];\n const parentUid = target.parentUid;\n if (!parentUid) {\n const result = arrayReorder(dataSource, fromIndex, toIndex);\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: result,\n },\n ]);\n } else {\n const parentTarget = dataSourceUidMap.current[parentUid];\n parentTarget[childrenColumnName] = arrayReorder(parentTarget[childrenColumnName], fromIndex, toIndex);\n\n fbaUtils.setFormFieldsAndTriggerValuesChange(form, [\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const setCurrentRowTargetField = hooks.useCallbackRef(\n (\n formItemPrevName: Array<string | number>,\n dataIndexConfigs: {\n name: EditableTableProDataIndex;\n value?: TAny;\n }[],\n ) => {\n fbaUtils.setFormFieldsAndTriggerValuesChange(\n form,\n dataIndexConfigs.map((item) => {\n return {\n name: [...formListCompleteName, ...formItemPrevName, ...toArray<string | number>(item.name)],\n value: item.value,\n };\n }),\n );\n },\n );\n\n const setCurrentRowChildrenValue = hooks.useCallbackRef(\n (formItemPrevName: Array<string | number>, value?: TPlainObject[]) => {\n setCurrentRowTargetField(formItemPrevName, [{ name: childrenColumnName, value }]);\n },\n );\n\n const validateRowFields = hooks.useCallbackRef(\n async (formItemPrevName: Array<string | number>, nameList: EditableTableProDataIndex[]) => {\n await form.validateFields(\n nameList.map((item) => [...formItemPrevName, ...toArray<string | number>(item)]),\n );\n },\n );\n\n const columns = useMemo(() => {\n return props.columns.map((column) => {\n const title = column.title;\n const support = isValidElement(title) || typeof title === 'string';\n let titleRender: ReactElement | string | undefined = title;\n if (column.tipsWrapperProps && support) {\n if (typeof column.tipsWrapperProps === 'string') {\n titleRender = (\n <TipsWrapper tipType=\"popover\" popoverProps={{ content: column.tipsWrapperProps }}>\n {title}\n </TipsWrapper>\n );\n } else {\n titleRender = <TipsWrapper {...column.tipsWrapperProps}>{title}</TipsWrapper>;\n }\n }\n\n let required = column.required;\n\n if (!required && typeof column.formItemProps === 'object' && column.formItemProps.rules?.length) {\n required = !!column.formItemProps.rules.find((item) => !!item['required']);\n }\n\n return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: required ? (\n <TextSymbolWrapper\n style={{ marginLeft: column.align === 'center' ? undefined : 10 }}\n text={titleRender}\n position=\"before\"\n symbolType=\"required\"\n />\n ) : (\n titleRender\n ),\n render: (value, record, index) => {\n if (isUndefinedOrNull(column.render)) {\n return value;\n }\n const uid = record[uidFieldKey];\n const dataIndex = toArray<string>(column['dataIndex']);\n const formItemPrevName = getFormItemName(record);\n const dataSourceTarget = dataSourceUidMapFt.current[uid];\n\n const editable =\n typeof column?.editable === 'function' ? column?.editable(record, index) : column?.editable;\n const tableRowFormItemCompleteName = [...formListCompleteName, ...formItemPrevName];\n\n const renderOperationProps: EditableTableProOperation = {\n editable,\n add: addItem.bind(null, uid),\n remove: deleteItem.bind(null, uid),\n move: moveItem.bind(null, uid),\n level: dataSourceTarget.level,\n parentItem: dataSourceTarget.parentUid\n ? dataSourceUidMapFt.current[dataSourceTarget.parentUid]\n : null,\n tableRowFormItemName: formItemPrevName,\n tableRowFormItemCompleteName,\n setCurrentRowTargetField: setCurrentRowTargetField.bind(null, formItemPrevName),\n setCurrentRowChildrenValue: setCurrentRowChildrenValue.bind(null, formItemPrevName),\n validateRowFields: validateRowFields.bind(null, tableRowFormItemCompleteName),\n };\n if (editable === true) {\n let formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(value, record, index, renderOperationProps)\n : column.formItemProps;\n\n if (!formItemProps?.rules?.length && required) {\n formItemProps = {\n ...formItemProps,\n rules: [{ required: true, message: '' }],\n };\n }\n\n return (\n <FormItemWrapper\n {...formItemProps}\n name={[...formItemPrevName, ...dataIndex]}\n style={{ marginBottom: 0, ...formItemProps?.style }}\n >\n {column.render?.(value, record, index, renderOperationProps) as React.ReactNode}\n </FormItemWrapper>\n );\n }\n return column.render?.(value, record, index, renderOperationProps);\n },\n };\n }) as ColumnsType<TPlainObject>;\n }, [\n props.columns,\n props.tableProps?.cellVerticalAlign,\n uidFieldKey,\n getFormItemName,\n formListCompleteName,\n addItem,\n deleteItem,\n moveItem,\n setCurrentRowTargetField,\n setCurrentRowChildrenValue,\n validateRowFields,\n ]);\n\n const className = classNames(\n 'editable-table-pro',\n { 'editable-table-pro-layout1': expandedIconLayout === 'layout1' },\n props.className,\n );\n\n return (\n <div className={className} style={props.style}>\n <Form.List name={formListName} rules={props.rules} initialValue={props.initialValue}>\n {(fields, formListOperation, { errors }) => {\n formListOperationRef.current = formListOperation;\n return (\n <div\n style={{\n borderRadius: '6px',\n border: errors?.length ? '1px solid #ff4d4f' : '1px solid transparent',\n }}\n >\n {props.tableBeforeAreaRender?.(formListOperation, fields.length)}\n <Table\n scroll={{ x: 'max-content' }}\n pagination={false}\n size=\"small\"\n {...props.tableProps}\n locale={{\n emptyText: showEmptyText ? (\n <Space size={5} style={{ color: '#ff4d4f' }}>\n <CloseCircleFilled />\n <span>{showEmptyText}</span>\n </Space>\n ) : undefined,\n }}\n expandable={{\n expandedRowKeys: expandedRowKeys,\n onExpandedRowsChange: (expandedRowKeys) => {\n setExpandedRowKeys(expandedRowKeys as string[]);\n },\n ...props.tableProps?.expandable,\n childrenColumnName: childrenColumnName,\n }}\n columns={columns}\n dataSource={dataSourceFt}\n rowKey={uidFieldKey}\n />\n <ButtonWrapper\n block\n hidden={props.hiddenFooterBtn}\n type=\"dashed\"\n icon={<PlusOutlined />}\n style={{ marginTop: 15 }}\n onClick={() => {\n const defaultValues = props.addRowDefaultValues?.();\n if (!defaultValues?.[uidFieldKey]) {\n void message.error(\n `新增行默认值必须包含唯一值字段【${uidFieldKey}】,通过 addRowDefaultValues 设置`,\n );\n return;\n }\n formListOperation.add(defaultValues);\n }}\n >\n 新增\n </ButtonWrapper>\n {props.tableAfterAreaRender?.(formListOperation, fields.length)}\n {errors.length ? (\n <Form.ErrorList\n errors={[\n <div style={{ color: '#ff4d4f', padding: '5px' }} key=\"0\">\n {errors}\n </div>,\n ]}\n />\n ) : null}\n </div>\n );\n }}\n </Form.List>\n </div>\n );\n};\n"],"names":["EditableTablePro","props","_props$tableProps2","form","Form","useFormInstance","_useState","useState","expandedRowKeys","setExpandedRowKeys","formListName","toArray","dataSourceUidMap","useRef","dataSourceUidMapFt","formListOperationRef","uidFieldKey","childrenColumnName","expandedIconLayout","formListCompleteName","dataSource","useWatch","_useState2","showEmptyText","setShowEmptyText","dataSourceFt","useMemo","queryUidErrorFlag","deep","itemList","level","parentUid","index","length","item","console","error","current","_isArray","txt","message","fbaHooks","useEffectCustom","JSON","stringify","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","forEach","addItem","defaultValue","insertIndex","_formListOperationRef","add","splice","expandedRowKeysSet","Set","concat","Array","from","fbaUtils","setFormFieldsAndTriggerValuesChange","name","value","deleteItem","_formListOperationRef2","remove","parentTarget","cloneState","moveItem","fromIndex","toIndex","result","arrayReorder","setCurrentRowTargetField","formItemPrevName","dataIndexConfigs","map","setCurrentRowChildrenValue","validateRowFields","nameList","Promise","$return","$error","resolve","validateFields","then","$await_1","$boundEx","columns","column","_column$formItemProps","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","required","formItemProps","rules","find","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","tableRowFormItemCompleteName","renderOperationProps","bind","move","parentItem","tableRowFormItemName","_formItemProps","_formItemProps2","FormItemWrapper","marginBottom","className","_classNames","List","initialValue","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","locale","emptyText","Space","color","_CloseCircleFilled","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","tableAfterAreaRender","ErrorList","padding"],"mappings":"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"}