@flatbiz/antd 4.5.20 → 4.5.21

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.
@@ -5,10 +5,12 @@ import './../config-provider-wrapper/index.css';
5
5
  import './../fba-hooks/index.css';
6
6
  import './../types/index.css';
7
7
  import './../fba-utils/index.css';
8
+ import './../form-item-wrapper/index.css';
9
+ import './../pre-defined-class-name/index.css';
8
10
  import './../text-symbol-wrapper/index.css';
9
11
  import './../tips-wrapper/index.css';
10
12
  import './../icon-wrapper/index.css';
11
13
  import './index.css';
12
14
  /*! @flatjs/forge MIT @flatbiz/antd */
13
- import{a as r,_ as i}from"../_rollupPluginBabelHelpers-a0769acd.js";import{useSensors as o,useSensor as e,PointerSensor as t,DndContext as n}from"@dnd-kit/core";import{restrictToVerticalAxis as a}from"@dnd-kit/modifiers";import{useSortable as s,SortableContext as d,verticalListSortingStrategy as l,arrayMove as m}from"@dnd-kit/sortable";import{Form as c}from"antd";import{EditableTablePro as p}from"../editable-table-pro/index.js";import{createCtx as u}from"@wove/react/cjs/create-ctx";import v from"@ant-design/icons/es/icons/DragOutlined";import{CSS as f}from"@dnd-kit/utilities";import{isUndefinedOrNull as g,noop as j}from"@flatbiz/utils";import{createElement as y,Children as x,cloneElement as b}from"react";import{IconWrapper as h}from"../icon-wrapper/index.js";import{jsx as I}from"react/jsx-runtime";import"@ant-design/icons/es/icons/PlusOutlined";import"@dimjs/utils/cjs/class-names";import"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../button-wrapper/index.js";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"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"../text-symbol-wrapper/index.js";import"../tips-wrapper/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";import"@dimjs/lang/cjs/is-undefined";var k=u(),w=k[0],C=k[1];var _=["dragIcon"];var D=function o(e){var t=e.dragIcon,n=r(e,_);var a=n["data-row-key"];var d=s({id:a}),l=d.setActivatorNodeRef,m=d.listeners,c=d.setNodeRef,p=d.transform,u=d.transition,k=d.isDragging;if(g(a)){return I("tr",i({},n))}var w=i({},n.style,{transform:f.Transform.toString(p&&i({},p,{scaleY:1})),transition:u,cursor:"move"},k?{position:"relative",zIndex:9999,boxShadow:" 0px 0px 12px 4px rgba(34, 33, 81, 0.1)",backgroundColor:"var(--block-bg-color)"}:{});var C=t||I(v,{});return y("tr",i({},n,{ref:c,style:w,key:a}),x.map(e.children,(function(r){if(r.key==="__sort"){return b(r,{children:I("span",i({ref:l,style:{touchAction:"none",cursor:"move",display:"flex",alignItems:"center",justifyContent:"center"}},m,{children:I(h,{style:{touchAction:"none",cursor:"move",padding:"1px 0px",margin:0,justifyContent:"center",color:"#787878"},icon:C,onClick:j,size:"small"})}))})}return r})))};var F=function r(o){var e=w();return I(D,i({},o,{dragIcon:e.dragIcon}))};var N=["dragIcon","uidFieldKey","onDragChange","disabledDrag","formListCompleteName","formListName"];var P=function s(u){var v,f;var g=u.dragIcon,j=u.uidFieldKey,y=u.onDragChange,x=u.disabledDrag,b=u.formListCompleteName,h=u.formListName,k=r(u,N);var w=b||h;var _=c.useFormInstance();var D=c.useWatch(w,_);var P=o(e(t,{activationConstraint:{delay:0,tolerance:0}}));var L=function r(i){var o=i.active,e=i.over;if(o.id!==(e==null?void 0:e.id)){var t=D.findIndex((function(r){return r[j]===o.id}));var n=D.findIndex((function(r){return r[j]===(e==null?void 0:e.id)}));var a=m(D,t,n);_.setFields([{name:w,value:a}]);y==null?void 0:y(a,{activeId:o.id,overId:e==null?void 0:e.id,activeIndex:t,overIndex:n})}};var z=x?k.columns:[{dataIndex:"__sort",width:40,key:"__sort",align:"center"}].concat(k.columns||[]);return I(C,{value:{dragIcon:g,uidFieldKey:j},children:I(n,{sensors:P,modifiers:[a],onDragEnd:L,children:I(d,{items:(D==null?void 0:D.map((function(r){return r[j]})))||[],strategy:l,children:I(p,i({},k,{formListName:h,uidFieldKey:j,columns:z,tableProps:i({},k.tableProps,{components:i({},(v=k.tableProps)==null?void 0:v.components,{body:i({},(f=k.tableProps)==null||(f=f.components)==null?void 0:f.body,{row:x?undefined:F})})})}))})})})};export{P as DragEditableTablePro};
15
+ import{a as r,_ as i}from"../_rollupPluginBabelHelpers-a0769acd.js";import{useSensors as e,useSensor as o,PointerSensor as t,DndContext as n}from"@dnd-kit/core";import{restrictToVerticalAxis as a}from"@dnd-kit/modifiers";import{useSortable as s,SortableContext as d,verticalListSortingStrategy as m,arrayMove as l}from"@dnd-kit/sortable";import{Form as p}from"antd";import{EditableTablePro as c}from"../editable-table-pro/index.js";import{createCtx as u}from"@wove/react/cjs/create-ctx";import f from"@ant-design/icons/es/icons/DragOutlined";import{CSS as v}from"@dnd-kit/utilities";import{isUndefinedOrNull as g,noop as j}from"@flatbiz/utils";import{createElement as y,Children as x,cloneElement as b}from"react";import{IconWrapper as h}from"../icon-wrapper/index.js";import{jsx as I}from"react/jsx-runtime";import"@ant-design/icons/es/icons/PlusOutlined";import"@dimjs/utils/cjs/class-names";import"@wove/react/cjs/hooks";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"../button-wrapper/index.js";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"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"../form-item-wrapper/index.js";import"../pre-defined-class-name/index.js";import"../text-symbol-wrapper/index.js";import"../tips-wrapper/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";import"@dimjs/lang/cjs/is-undefined";var k=u(),w=k[0],C=k[1];var _=["dragIcon"];var D=function e(o){var t=o.dragIcon,n=r(o,_);var a=n["data-row-key"];var d=s({id:a}),m=d.setActivatorNodeRef,l=d.listeners,p=d.setNodeRef,c=d.transform,u=d.transition,k=d.isDragging;if(g(a)){return I("tr",i({},n))}var w=i({},n.style,{transform:v.Transform.toString(c&&i({},c,{scaleY:1})),transition:u,cursor:"move"},k?{position:"relative",zIndex:9999,boxShadow:" 0px 0px 12px 4px rgba(34, 33, 81, 0.1)",backgroundColor:"var(--block-bg-color)"}:{});var C=t||I(f,{});return y("tr",i({},n,{ref:p,style:w,key:a}),x.map(o.children,(function(r){if(r.key==="__sort"){return b(r,{children:I("span",i({ref:m,style:{touchAction:"none",cursor:"move",display:"flex",alignItems:"center",justifyContent:"center"}},l,{children:I(h,{style:{touchAction:"none",cursor:"move",padding:"1px 0px",margin:0,justifyContent:"center",color:"#787878"},icon:C,onClick:j,size:"small"})}))})}return r})))};var F=function r(e){var o=w();return I(D,i({},e,{dragIcon:o.dragIcon}))};var N=["dragIcon","uidFieldKey","onDragChange","disabledDrag","formListCompleteName","formListName"];var P=function s(u){var f,v;var g=u.dragIcon,j=u.uidFieldKey,y=u.onDragChange,x=u.disabledDrag,b=u.formListCompleteName,h=u.formListName,k=r(u,N);var w=b||h;var _=p.useFormInstance();var D=p.useWatch(w,_);var P=e(o(t,{activationConstraint:{delay:0,tolerance:0}}));var L=function r(i){var e=i.active,o=i.over;if(e.id!==(o==null?void 0:o.id)){var t=D.findIndex((function(r){return r[j]===e.id}));var n=D.findIndex((function(r){return r[j]===(o==null?void 0:o.id)}));var a=l(D,t,n);_.setFields([{name:w,value:a}]);y==null?void 0:y(a,{activeId:e.id,overId:o==null?void 0:o.id,activeIndex:t,overIndex:n})}};var z=x?k.columns:[{dataIndex:"__sort",width:40,key:"__sort",align:"center"}].concat(k.columns||[]);return I(C,{value:{dragIcon:g,uidFieldKey:j},children:I(n,{sensors:P,modifiers:[a],onDragEnd:L,children:I(d,{items:(D==null?void 0:D.map((function(r){return r[j]})))||[],strategy:m,children:I(c,i({},k,{formListName:h,uidFieldKey:j,columns:z,tableProps:i({},k.tableProps,{components:i({},(f=k.tableProps)==null?void 0:f.components,{body:i({},(v=k.tableProps)==null||(v=v.components)==null?void 0:v.body,{row:x?undefined:F})})})}))})})})};export{P as DragEditableTablePro};
14
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/drag-editable-table-pro/context.ts","@flatbiz/antd/src/drag-editable-table-pro/table-tr-handle.tsx","@flatbiz/antd/src/drag-editable-table-pro/row.tsx","@flatbiz/antd/src/drag-editable-table-pro/drag.tsx"],"sourcesContent":["import { createCtx } from '@wove/react';\nimport { type ReactElement } from 'react';\n\nexport const [getCtx, CtxProvider] = createCtx<{\n dragIcon?: ReactElement;\n uidFieldKey: string;\n}>();\n","import { DragOutlined } from '@ant-design/icons';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { isUndefinedOrNull, noop } from '@flatbiz/utils';\nimport { type RowProps } from 'antd';\nimport { Children, cloneElement, type ReactElement } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\ntype TableTrHandleProps = RowProps & {\n dragIcon?: ReactElement;\n};\nexport const TableTrHandle = (props: TableTrHandleProps) => {\n const { dragIcon, ...innerProps } = props;\n const rowId = innerProps['data-row-key'] as number;\n\n const { setActivatorNodeRef, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: rowId,\n });\n\n if (isUndefinedOrNull(rowId)) {\n return <tr {...innerProps} />;\n }\n const style: React.CSSProperties = {\n ...innerProps.style,\n transform: CSS.Transform.toString(transform && { ...transform, scaleY: 1 }),\n transition,\n cursor: 'move',\n ...(isDragging\n ? {\n position: 'relative',\n zIndex: 9999,\n boxShadow: ' 0px 0px 12px 4px rgba(34, 33, 81, 0.1)',\n backgroundColor: 'var(--block-bg-color)',\n }\n : {}),\n };\n const iconElement = dragIcon || <DragOutlined />;\n return (\n <tr {...innerProps} ref={setNodeRef} style={style} key={rowId}>\n {Children.map(props.children, (child) => {\n if ((child as React.ReactElement).key === '__sort') {\n return cloneElement(child as React.ReactElement, {\n children: (\n <span\n ref={setActivatorNodeRef}\n style={{\n touchAction: 'none',\n cursor: 'move',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n {...listeners}\n >\n <IconWrapper\n style={{\n touchAction: 'none',\n cursor: 'move',\n padding: '1px 0px',\n margin: 0,\n justifyContent: 'center',\n color: '#787878',\n }}\n icon={iconElement}\n onClick={noop}\n size=\"small\"\n />\n </span>\n ),\n });\n }\n return child;\n })}\n </tr>\n );\n};\n","import { getCtx } from './context';\nimport { TableTrHandle } from './table-tr-handle';\n\nexport const Row = (props) => {\n const ctx = getCtx();\n return <TableTrHandle {...props} dragIcon={ctx.dragIcon} />;\n};\n","import { DndContext, PointerSensor, useSensor, useSensors, type DragEndEvent } from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { type TPlainObject } from '@flatbiz/utils';\nimport { Form } from 'antd';\nimport { type ReactElement } from 'react';\nimport { EditableTablePro, EditableTableProProps } from '../editable-table-pro';\nimport { EditableTableProColumnItem } from '../editable-table-pro/type';\nimport { CtxProvider } from './context';\nimport { Row } from './row';\n\nexport type DragEditableTableProProps = EditableTableProProps & {\n /**\n * 拖拽图标自定义,默认使用 DragOutlined 图标\n */\n dragIcon?: ReactElement;\n\n /** 禁用拖拽 */\n disabledDrag?: boolean;\n /**\n * 表格数据唯一值字段Key\n * ```\n * ```\n */\n uidFieldKey: string;\n /**\n * 拖拽结束事件\n * ```\n * dataSource: 拖拽完成后的数据源\n * dragData\n * 1. activeId 拖拽ID\n * 2. activeIndex 拖拽起始表格数组索引值\n * 3. overIndex 拖拽结束表格数组索引值\n * ```\n */\n onDragChange?: (\n dataSource: TPlainObject[],\n dragData: {\n activeId: string | number;\n overId?: string | number;\n activeIndex: number;\n overIndex: number;\n },\n ) => void;\n};\n\n/**\n * 可拖拽编辑表格\n * ```\n * 1. 表格数据必须有唯一值字段,通过参数 uidFieldKey 告诉组件\n * 2. Table 参数 components.body.row 被组件内部使用\n * 3. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 4. 存在多级的情况下,通过上移、下移操作按钮,调用 column.render.operation.move 方法实现同一级内移动\n * ```\n */\nexport const DragEditableTablePro = (props: DragEditableTableProProps) => {\n const {\n dragIcon,\n uidFieldKey,\n onDragChange,\n disabledDrag,\n formListCompleteName,\n formListName,\n ...otherProps\n } = props;\n\n const formListCompleteNameFt = formListCompleteName || formListName;\n\n const form = Form.useFormInstance();\n const dataList = Form.useWatch(formListCompleteNameFt, form);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n // 当拖拽触发区域有其他点击事件时,需要延迟触发拖拽动作\n delay: 0,\n tolerance: 0,\n },\n }),\n );\n\n const onDragEnd = ({ active, over }: DragEndEvent) => {\n if (active.id !== over?.id) {\n const activeIndex = dataList.findIndex((i) => i[uidFieldKey] === active.id);\n const overIndex = dataList.findIndex((i) => i[uidFieldKey] === over?.id);\n const dataListNew = arrayMove(dataList, activeIndex, overIndex);\n form.setFields([\n {\n name: formListCompleteNameFt,\n value: dataListNew,\n },\n ]);\n onDragChange?.(dataListNew as TPlainObject[], {\n activeId: active.id,\n overId: over?.id,\n activeIndex,\n overIndex,\n });\n }\n };\n\n const columns: EditableTableProColumnItem[] = disabledDrag\n ? otherProps.columns\n : [\n {\n dataIndex: '__sort',\n width: 40,\n key: '__sort',\n align: 'center',\n } as EditableTableProColumnItem,\n ].concat(otherProps.columns || []);\n\n return (\n <CtxProvider\n value={{\n dragIcon,\n uidFieldKey,\n }}\n >\n <DndContext sensors={sensors} modifiers={[restrictToVerticalAxis]} onDragEnd={onDragEnd}>\n <SortableContext\n items={dataList?.map((i) => i[uidFieldKey]) || []}\n strategy={verticalListSortingStrategy}\n >\n <EditableTablePro\n {...otherProps}\n formListName={formListName}\n uidFieldKey={uidFieldKey}\n columns={columns}\n tableProps={{\n ...otherProps.tableProps,\n components: {\n ...otherProps.tableProps?.components,\n body: {\n ...otherProps.tableProps?.components?.body,\n row: disabledDrag ? undefined : Row,\n },\n },\n }}\n />\n </SortableContext>\n </DndContext>\n </CtxProvider>\n );\n};\n"],"names":["_createCtx","_createCtx2","getCtx","CtxProvider","TableTrHandle","props","dragIcon","innerProps","_objectWithoutPropertiesLoose","_excluded","rowId","_useSortable","useSortable","id","setActivatorNodeRef","listeners","setNodeRef","transform","transition","isDragging","isUndefinedOrNull","_jsx","_extends","style","CSS","Transform","toString","scaleY","cursor","position","zIndex","boxShadow","backgroundColor","iconElement","_DragOutlined","_createElement","ref","key","Children","map","children","child","cloneElement","touchAction","display","alignItems","justifyContent","IconWrapper","padding","margin","color","icon","onClick","noop","size","Row","ctx","DragEditableTablePro","_otherProps$tableProp","_otherProps$tableProp2","uidFieldKey","onDragChange","disabledDrag","formListCompleteName","formListName","otherProps","formListCompleteNameFt","form","Form","useFormInstance","dataList","useWatch","sensors","useSensors","useSensor","PointerSensor","activationConstraint","delay","tolerance","onDragEnd","_ref","active","over","activeIndex","findIndex","i","overIndex","dataListNew","arrayMove","setFields","name","value","activeId","overId","columns","dataIndex","width","align","concat","DndContext","modifiers","restrictToVerticalAxis","SortableContext","items","strategy","verticalListSortingStrategy","EditableTablePro","tableProps","components","body","row","undefined"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/drag-editable-table-pro/context.ts","@flatbiz/antd/src/drag-editable-table-pro/table-tr-handle.tsx","@flatbiz/antd/src/drag-editable-table-pro/row.tsx","@flatbiz/antd/src/drag-editable-table-pro/drag.tsx"],"sourcesContent":["import { createCtx } from '@wove/react';\nimport { type ReactElement } from 'react';\n\nexport const [getCtx, CtxProvider] = createCtx<{\n dragIcon?: ReactElement;\n uidFieldKey: string;\n}>();\n","import { DragOutlined } from '@ant-design/icons';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { isUndefinedOrNull, noop } from '@flatbiz/utils';\nimport { type RowProps } from 'antd';\nimport { Children, cloneElement, type ReactElement } from 'react';\nimport { IconWrapper } from '../icon-wrapper';\n\ntype TableTrHandleProps = RowProps & {\n dragIcon?: ReactElement;\n};\nexport const TableTrHandle = (props: TableTrHandleProps) => {\n const { dragIcon, ...innerProps } = props;\n const rowId = innerProps['data-row-key'] as number;\n\n const { setActivatorNodeRef, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: rowId,\n });\n\n if (isUndefinedOrNull(rowId)) {\n return <tr {...innerProps} />;\n }\n const style: React.CSSProperties = {\n ...innerProps.style,\n transform: CSS.Transform.toString(transform && { ...transform, scaleY: 1 }),\n transition,\n cursor: 'move',\n ...(isDragging\n ? {\n position: 'relative',\n zIndex: 9999,\n boxShadow: ' 0px 0px 12px 4px rgba(34, 33, 81, 0.1)',\n backgroundColor: 'var(--block-bg-color)',\n }\n : {}),\n };\n const iconElement = dragIcon || <DragOutlined />;\n return (\n <tr {...innerProps} ref={setNodeRef} style={style} key={rowId}>\n {Children.map(props.children, (child) => {\n if ((child as React.ReactElement).key === '__sort') {\n return cloneElement(child as React.ReactElement, {\n children: (\n <span\n ref={setActivatorNodeRef}\n style={{\n touchAction: 'none',\n cursor: 'move',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n {...listeners}\n >\n <IconWrapper\n style={{\n touchAction: 'none',\n cursor: 'move',\n padding: '1px 0px',\n margin: 0,\n justifyContent: 'center',\n color: '#787878',\n }}\n icon={iconElement}\n onClick={noop}\n size=\"small\"\n />\n </span>\n ),\n });\n }\n return child;\n })}\n </tr>\n );\n};\n","import { getCtx } from './context';\nimport { TableTrHandle } from './table-tr-handle';\n\nexport const Row = (props) => {\n const ctx = getCtx();\n return <TableTrHandle {...props} dragIcon={ctx.dragIcon} />;\n};\n","import { DndContext, PointerSensor, useSensor, useSensors, type DragEndEvent } from '@dnd-kit/core';\nimport { restrictToVerticalAxis } from '@dnd-kit/modifiers';\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { type TPlainObject } from '@flatbiz/utils';\nimport { Form } from 'antd';\nimport { type ReactElement } from 'react';\nimport { EditableTablePro, EditableTableProProps } from '../editable-table-pro';\nimport { EditableTableProColumnItem } from '../editable-table-pro/type';\nimport { CtxProvider } from './context';\nimport { Row } from './row';\n\nexport type DragEditableTableProProps = EditableTableProProps & {\n /**\n * 拖拽图标自定义,默认使用 DragOutlined 图标\n */\n dragIcon?: ReactElement;\n\n /** 禁用拖拽 */\n disabledDrag?: boolean;\n /**\n * 表格数据唯一值字段Key\n * ```\n * ```\n */\n uidFieldKey: string;\n /**\n * 拖拽结束事件\n * ```\n * dataSource: 拖拽完成后的数据源\n * dragData\n * 1. activeId 拖拽ID\n * 2. activeIndex 拖拽起始表格数组索引值\n * 3. overIndex 拖拽结束表格数组索引值\n * ```\n */\n onDragChange?: (\n dataSource: TPlainObject[],\n dragData: {\n activeId: string | number;\n overId?: string | number;\n activeIndex: number;\n overIndex: number;\n },\n ) => void;\n};\n\n/**\n * 可拖拽编辑表格\n * ```\n * 1. 表格数据必须有唯一值字段,通过参数 uidFieldKey 告诉组件\n * 2. Table 参数 components.body.row 被组件内部使用\n * 3. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序\n * 4. 存在多级的情况下,通过上移、下移操作按钮,调用 column.render.operation.move 方法实现同一级内移动\n * ```\n */\nexport const DragEditableTablePro = (props: DragEditableTableProProps) => {\n const {\n dragIcon,\n uidFieldKey,\n onDragChange,\n disabledDrag,\n formListCompleteName,\n formListName,\n ...otherProps\n } = props;\n\n const formListCompleteNameFt = formListCompleteName || formListName;\n\n const form = Form.useFormInstance();\n const dataList = Form.useWatch(formListCompleteNameFt, form);\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n // 当拖拽触发区域有其他点击事件时,需要延迟触发拖拽动作\n delay: 0,\n tolerance: 0,\n },\n }),\n );\n\n const onDragEnd = ({ active, over }: DragEndEvent) => {\n if (active.id !== over?.id) {\n const activeIndex = dataList.findIndex((i) => i[uidFieldKey] === active.id);\n const overIndex = dataList.findIndex((i) => i[uidFieldKey] === over?.id);\n const dataListNew = arrayMove(dataList, activeIndex, overIndex);\n form.setFields([\n {\n name: formListCompleteNameFt,\n value: dataListNew,\n },\n ]);\n onDragChange?.(dataListNew as TPlainObject[], {\n activeId: active.id,\n overId: over?.id,\n activeIndex,\n overIndex,\n });\n }\n };\n\n const columns: EditableTableProColumnItem[] = disabledDrag\n ? otherProps.columns\n : [\n {\n dataIndex: '__sort',\n width: 40,\n key: '__sort',\n align: 'center',\n } as EditableTableProColumnItem,\n ].concat(otherProps.columns || []);\n\n return (\n <CtxProvider\n value={{\n dragIcon,\n uidFieldKey,\n }}\n >\n <DndContext sensors={sensors} modifiers={[restrictToVerticalAxis]} onDragEnd={onDragEnd}>\n <SortableContext\n items={dataList?.map((i) => i[uidFieldKey]) || []}\n strategy={verticalListSortingStrategy}\n >\n <EditableTablePro\n {...otherProps}\n formListName={formListName}\n uidFieldKey={uidFieldKey}\n columns={columns}\n tableProps={{\n ...otherProps.tableProps,\n components: {\n ...otherProps.tableProps?.components,\n body: {\n ...otherProps.tableProps?.components?.body,\n row: disabledDrag ? undefined : Row,\n },\n },\n }}\n />\n </SortableContext>\n </DndContext>\n </CtxProvider>\n );\n};\n"],"names":["_createCtx","_createCtx2","getCtx","CtxProvider","TableTrHandle","props","dragIcon","innerProps","_objectWithoutPropertiesLoose","_excluded","rowId","_useSortable","useSortable","id","setActivatorNodeRef","listeners","setNodeRef","transform","transition","isDragging","isUndefinedOrNull","_jsx","_extends","style","CSS","Transform","toString","scaleY","cursor","position","zIndex","boxShadow","backgroundColor","iconElement","_DragOutlined","_createElement","ref","key","Children","map","children","child","cloneElement","touchAction","display","alignItems","justifyContent","IconWrapper","padding","margin","color","icon","onClick","noop","size","Row","ctx","DragEditableTablePro","_otherProps$tableProp","_otherProps$tableProp2","uidFieldKey","onDragChange","disabledDrag","formListCompleteName","formListName","otherProps","formListCompleteNameFt","form","Form","useFormInstance","dataList","useWatch","sensors","useSensors","useSensor","PointerSensor","activationConstraint","delay","tolerance","onDragEnd","_ref","active","over","activeIndex","findIndex","i","overIndex","dataListNew","arrayMove","setFields","name","value","activeId","overId","columns","dataIndex","width","align","concat","DndContext","modifiers","restrictToVerticalAxis","SortableContext","items","strategy","verticalListSortingStrategy","EditableTablePro","tableProps","components","body","row","undefined"],"mappings":";m0DAGO,IAAAA,EAA8BC,IAAvBC,EAAMF,EAAA,GAAEG,EAAWH,EAAA,sBCQ1B,IAAMI,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAQC,EAA4BD,EAA5BC,SAAaC,EAAUC,EAAKH,EAAKI,GACzC,IAAMC,EAAQH,EAAW,gBAEzB,IAAAI,EAA0FC,EAAY,CACpGC,GAAIH,IADEI,EAAmBH,EAAnBG,oBAAqBC,EAASJ,EAATI,UAAWC,EAAUL,EAAVK,WAAYC,EAASN,EAATM,UAAWC,EAAUP,EAAVO,WAAYC,EAAUR,EAAVQ,WAI3E,GAAIC,EAAkBV,GAAQ,CAC5B,OAAOW,EAAAC,KAAAA,EAAQf,CAAAA,EAAAA,GACjB,CACA,IAAMgB,EAA0BD,EAC3Bf,GAAAA,EAAWgB,MAAK,CACnBN,UAAWO,EAAIC,UAAUC,SAAST,GAASK,EAAA,CAAA,EAASL,EAAS,CAAEU,OAAQ,KACvET,WAAAA,EACAU,OAAQ,QACJT,EACA,CACEU,SAAU,WACVC,OAAQ,KACRC,UAAW,0CACXC,gBAAiB,yBAEnB,CAAE,GAER,IAAMC,EAAc3B,GAAYe,EAAAa,GAAe,GAC/C,OACEC,EAAA,KAAAb,EAAA,CAAA,EAAQf,EAAU,CAAE6B,IAAKpB,EAAYO,MAAOA,EAAOc,IAAK3B,IACrD4B,EAASC,IAAIlC,EAAMmC,UAAU,SAACC,GAC7B,GAAKA,EAA6BJ,MAAQ,SAAU,CAClD,OAAOK,EAAaD,EAA6B,CAC/CD,SACEnB,EAAA,OAAAC,EAAA,CACEc,IAAKtB,EACLS,MAAO,CACLoB,YAAa,OACbf,OAAQ,OACRgB,QAAS,OACTC,WAAY,SACZC,eAAgB,WAEd/B,EAAS,CAAAyB,SAEbnB,EAAC0B,EAAW,CACVxB,MAAO,CACLoB,YAAa,OACbf,OAAQ,OACRoB,QAAS,UACTC,OAAQ,EACRH,eAAgB,SAChBI,MAAO,WAETC,KAAMlB,EACNmB,QAASC,EACTC,KAAK,cAKf,CACA,OAAOb,CACR,IAGP,ECxEO,IAAMc,EAAM,SAANA,EAAOlD,GAClB,IAAMmD,EAAMtD,IACZ,OAAOmB,EAACjB,EAAakB,KAAKjB,EAAK,CAAEC,SAAUkD,EAAIlD,WACjD,2GCiDamD,EAAuB,SAAvBA,EAAwBpD,GAAqC,IAAAqD,EAAAC,EACxE,IACErD,EAOED,EAPFC,SACAsD,EAMEvD,EANFuD,YACAC,EAKExD,EALFwD,aACAC,EAIEzD,EAJFyD,aACAC,EAGE1D,EAHF0D,qBACAC,EAEE3D,EAFF2D,aACGC,EAAUzD,EACXH,EAAKI,GAET,IAAMyD,EAAyBH,GAAwBC,EAEvD,IAAMG,EAAOC,EAAKC,kBAClB,IAAMC,EAAWF,EAAKG,SAASL,EAAwBC,GAEvD,IAAMK,EAAUC,EACdC,EAAUC,EAAe,CACvBC,qBAAsB,CAEpBC,MAAO,EACPC,UAAW,MAKjB,IAAMC,EAAY,SAAZA,EAASC,GAAuC,IAAjCC,EAAMD,EAANC,OAAQC,EAAIF,EAAJE,KAC3B,GAAID,EAAOpE,MAAOqE,GAAAA,UAAAA,EAAAA,EAAMrE,IAAI,CAC1B,IAAMsE,EAAcb,EAASc,WAAU,SAACC,GAAC,OAAKA,EAAEzB,KAAiBqB,EAAOpE,MACxE,IAAMyE,EAAYhB,EAASc,WAAU,SAACC,GAAC,OAAKA,EAAEzB,MAAiBsB,GAAI,UAAA,EAAJA,EAAMrE,OACrE,IAAM0E,EAAcC,EAAUlB,EAAUa,EAAaG,GACrDnB,EAAKsB,UAAU,CACb,CACEC,KAAMxB,EACNyB,MAAOJ,KAGX1B,GAAAA,UAAAA,EAAAA,EAAe0B,EAA+B,CAC5CK,SAAUX,EAAOpE,GACjBgF,OAAQX,GAAAA,UAAAA,EAAAA,EAAMrE,GACdsE,YAAAA,EACAG,UAAAA,GAEJ,GAGF,IAAMQ,EAAwChC,EAC1CG,EAAW6B,QACX,CACE,CACEC,UAAW,SACXC,MAAO,GACP3D,IAAK,SACL4D,MAAO,WAETC,OAAOjC,EAAW6B,SAAW,IAEnC,OACEzE,EAAClB,EAAW,CACVwF,MAAO,CACLrF,SAAAA,EACAsD,YAAAA,GACApB,SAEFnB,EAAC8E,EAAU,CAAC3B,QAASA,EAAS4B,UAAW,CAACC,GAAyBtB,UAAWA,EAAUvC,SACtFnB,EAACiF,EAAe,CACdC,OAAOjC,GAAQ,UAAA,EAARA,EAAU/B,KAAI,SAAC8C,GAAC,OAAKA,EAAEzB,EAAY,MAAK,GAC/C4C,SAAUC,EAA4BjE,SAEtCnB,EAACqF,EAAgBpF,KACX2C,EAAU,CACdD,aAAcA,EACdJ,YAAaA,EACbkC,QAASA,EACTa,WAAUrF,EACL2C,GAAAA,EAAW0C,WAAU,CACxBC,WAAUtF,EAAA,IAAAoC,EACLO,EAAW0C,aAAU,UAAA,EAArBjD,EAAuBkD,WAAU,CACpCC,KAAIvF,EAAA,CAAA,GAAAqC,EACCM,EAAW0C,aAAUhD,OAAAA,EAArBA,EAAuBiD,aAAvBjD,UAAAA,EAAAA,EAAmCkD,KAAI,CAC1CC,IAAKhD,EAAeiD,UAAYxD,gBASlD"}
@@ -4,9 +4,11 @@ import './../config-provider-wrapper/index.css';
4
4
  import './../fba-hooks/index.css';
5
5
  import './../types/index.css';
6
6
  import './../fba-utils/index.css';
7
+ import './../form-item-wrapper/index.css';
8
+ import './../pre-defined-class-name/index.css';
7
9
  import './../text-symbol-wrapper/index.css';
8
10
  import './../tips-wrapper/index.css';
9
11
  import './index.css';
10
12
  /*! @flatjs/forge MIT @flatbiz/antd */
11
- 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 t}from"@wove/react/cjs/hooks";import{isArray as a}from"@dimjs/lang/cjs/is-array";import{cloneState as i}from"@dimjs/model";import{toArray as l,arrayReorder as o,isUndefinedOrNull as s}from"@flatbiz/utils";import{Form as d,Table as u,message as p}from"antd";import{useState as c,useRef as m,useMemo as v,isValidElement as f}from"react";import{ButtonWrapper as b}from"../button-wrapper/index.js";import{TextSymbolWrapper as g}from"../text-symbol-wrapper/index.js";import{TipsWrapper as h}from"../tips-wrapper/index.js";import{jsx as y,jsxs as j}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"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var x=function x(w){var R;var C=d.useFormInstance();var P=c([]),k=P[0],F=P[1];var A=l(w.formListName);var N=m({});var I=m({});var U=m();var L=w.uidFieldKey;var B=w.childrenColumnName||"children";var V=w.formListCompleteName||A;var W=d.useWatch(V,C);var z=v((function(){if(!W)return[];function e(r,n,t){r.forEach((function(r,a){if(!r[L]){console.error(r,"数据中未查询到唯一值")}else{I.current[r[L]]={level:n,parentUid:t,index:a};N.current[r[L]]=r;e(r[B]||[],n+1,r[L])}}))}I.current={};N.current={};e(a(W)?W:[],1);return W}),[B,W,L]);var D=t.useCallbackRef((function(e){var r=e[L];var n=I.current[r];var t=[];while(n){t.push(n.index);if(n.level===1){break}n=n.parentUid?I.current[n.parentUid]:undefined}var a=[];t.reverse().forEach((function(e,r){a.push(e);if(r<t.length-1){a.push(B)}}));return a}));var E=t.useCallbackRef((function(e,r,n){var t=N.current[e];if(t){if(t.level===1){var a;(a=U.current)==null?void 0:a.add(r,n);return}t[B]=t[B]||[];if(n==undefined){t[B].push(r)}else{t[B].splice(n,0,r)}var i=new Set(k);i.add(t[L]);F([].concat(Array.from(i)));C.setFields([{name:V,value:[].concat(W)}])}}));var O=t.useCallbackRef((function(e,r){var n=I.current[e];if(n.level===1){var t;(t=U.current)==null?void 0:t.remove(r);return}var a=n.parentUid;if(!a){W.splice(r,1)}else{var l=N.current[a];l[B].splice(r,1);if(l[B].length===0){delete l[B]}}C.setFields([{name:V,value:i(W)}])}));var T=t.useCallbackRef((function(e,r,n){if(r===n||n<0)return;var t=I.current[e];var a=t.parentUid;if(!a){var i=o(W,r,n);C.setFields([{name:V,value:i}])}else{var l=N.current[a];l[B]=o(l[B],r,n);C.setFields([{name:V,value:[].concat(W)}])}}));var _=t.useCallbackRef((function(e,r){C.setFields(r.map((function(r){return{name:[].concat(V,e,l(r.name)),value:r.value}})))}));var K=v((function(){return w.columns.map((function(e){var r=e.title;var t=f(r)||typeof r==="string";var a=r;if(e.tipsWrapperProps&&t){if(typeof e.tipsWrapperProps==="string"){a=y(h,{tipType:"popover",popoverProps:{content:e.tipsWrapperProps},children:r})}else{a=y(h,n({},e.tipsWrapperProps,{children:r}))}}return n({onCell:function e(){var r;return{valign:((r=w.tableProps)==null?void 0:r.cellVerticalAlign)||"middle"}}},e,{title:e.required?y(g,{style:{marginLeft:e.align==="center"?undefined:10},text:a,position:"before",symbolType:"required"}):a,render:function r(t,a,i){if(s(e.render)){return t}var o=a[L];var u=l(e["dataIndex"]);var p=D(a);var c=I.current[o];var m=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(a,i):e==null?void 0:e.editable;var v={add:E.bind(null,o),remove:O.bind(null,o),move:T.bind(null,o),editable:m,changeCurrentRowTargetField:_.bind(null,p),level:c.level,parentItem:c.parentUid?I.current[c.parentUid]:null,tableRowFormItemName:p,tableRowFormItemCompleteName:[].concat(V,p)};if(m===true){var f;return y(d.Item,n({},e.formItemProps,{name:[].concat(p,u),style:n({marginBottom:0},(f=e.formItemProps)==null?void 0:f.style),children:e.render==null?void 0:e.render(t,a,i,v)}))}return e.render==null?void 0:e.render(t,a,i,v)}})}))}),[E,_,O,V,D,T,w.columns,(R=w.tableProps)==null?void 0:R.cellVerticalAlign,L]);return y("div",{className:r("editable-table-pro",w.className),style:w.style,children:y(d.List,{name:A,rules:w.rules,children:function r(t,a,i){var l;var o=i.errors;U.current=a;return j("div",{style:{borderRadius:"6px",border:o!=null&&o.length?"1px solid #ff4d4f":"1px solid transparent"},children:[w.tableBeforeAreaRender==null?void 0:w.tableBeforeAreaRender(a,t.length),y(u,n({scroll:{x:"max-content"},pagination:false,size:"small"},w.tableProps,{expandable:n({expandedRowKeys:k,onExpandedRowsChange:function e(r){F(r)}},(l=w.tableProps)==null?void 0:l.expandable,{childrenColumnName:B}),columns:K,dataSource:z,rowKey:L})),y(b,{block:true,hidden:w.hiddenFooterBtn,type:"dashed",icon:y(e,{}),style:{marginTop:15},onClick:function e(){var r=w.addRowDefaultValues==null?void 0:w.addRowDefaultValues();if(!(r!=null&&r[L])){void p.error("新增行默认值必须包含唯一值字段【"+L+"】,通过 addRowDefaultValues 设置");return}a.add(r)},children:"新增"}),w.tableAfterAreaRender==null?void 0:w.tableAfterAreaRender(a,t.length),o.length?y(d.ErrorList,{errors:[y("div",{style:{color:"#ff4d4f",padding:"5px"},children:o},"0")]}):null]})}})})};export{x as EditableTablePro};
13
+ 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 a}from"@wove/react/cjs/hooks";import{isArray as t}from"@dimjs/lang/cjs/is-array";import{cloneState as i}from"@dimjs/model";import{toArray as l,arrayReorder as o,isUndefinedOrNull as s}from"@flatbiz/utils";import{Form as d,Table as u,message as p}from"antd";import{useState as m,useRef as c,useMemo as f,isValidElement as v}from"react";import{ButtonWrapper as g}from"../button-wrapper/index.js";import{fbaUtils as b}from"../fba-utils/index.js";import{FormItemWrapper as h}from"../form-item-wrapper/index.js";import{TextSymbolWrapper as y}from"../text-symbol-wrapper/index.js";import{TipsWrapper as j}from"../tips-wrapper/index.js";import{jsx as x,jsxs as C}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"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/extend";import"../pre-defined-class-name/index.js";import"@ant-design/icons/es/icons/QuestionCircleOutlined";var w=function w(R){var F;var P=d.useFormInstance();var k=m([]),A=k[0],V=k[1];var N=l(R.formListName);var T=c({});var I=c({});var U=c();var L=R.uidFieldKey;var B=R.childrenColumnName||"children";var W=R.formListCompleteName||N;var z=d.useWatch(W,P);var D=f((function(){if(!z)return[];function e(r,n,a){r.forEach((function(r,t){if(!r[L]){console.error(r,"数据中未查询到唯一值")}else{I.current[r[L]]={level:n,parentUid:a,index:t};T.current[r[L]]=r;e(r[B]||[],n+1,r[L])}}))}I.current={};T.current={};e(t(z)?z:[],1);return z}),[B,z,L]);var E=a.useCallbackRef((function(e){var r=e[L];var n=I.current[r];var a=[];while(n){a.push(n.index);if(n.level===1){break}n=n.parentUid?I.current[n.parentUid]:undefined}var t=[];a.reverse().forEach((function(e,r){t.push(e);if(r<a.length-1){t.push(B)}}));return t}));var O=a.useCallbackRef((function(e,r,n){var a=T.current[e];if(a){if(a.level===1){var t;(t=U.current)==null?void 0:t.add(r,n);return}a[B]=a[B]||[];if(n==undefined){a[B].push(r)}else{a[B].splice(n,0,r)}var i=new Set(A);i.add(a[L]);V([].concat(Array.from(i)));b.setFormFieldsAndTriggerValuesChange(P,[{name:W,value:[].concat(z)}])}}));var _=a.useCallbackRef((function(e,r){var n=I.current[e];if(n.level===1){var a;(a=U.current)==null?void 0:a.remove(r);return}var t=n.parentUid;if(!t){z.splice(r,1)}else{var l=T.current[t];l[B].splice(r,1);if(l[B].length===0){delete l[B]}}b.setFormFieldsAndTriggerValuesChange(P,[{name:W,value:i(z)}])}));var K=a.useCallbackRef((function(e,r,n){if(r===n||n<0)return;var a=I.current[e];var t=a.parentUid;if(!t){var i=o(z,r,n);b.setFormFieldsAndTriggerValuesChange(P,[{name:W,value:i}])}else{var l=T.current[t];l[B]=o(l[B],r,n);b.setFormFieldsAndTriggerValuesChange(P,[{name:W,value:[].concat(z)}])}}));var S=a.useCallbackRef((function(e,r){b.setFormFieldsAndTriggerValuesChange(P,r.map((function(r){return{name:[].concat(W,e,l(r.name)),value:r.value}})))}));var q=a.useCallbackRef((function(e,r){S(e,[{name:B,value:r}])}));var Y=f((function(){return R.columns.map((function(e){var r=e.title;var a=v(r)||typeof r==="string";var t=r;if(e.tipsWrapperProps&&a){if(typeof e.tipsWrapperProps==="string"){t=x(j,{tipType:"popover",popoverProps:{content:e.tipsWrapperProps},children:r})}else{t=x(j,n({},e.tipsWrapperProps,{children:r}))}}return n({onCell:function e(){var r;return{valign:((r=R.tableProps)==null?void 0:r.cellVerticalAlign)||"middle"}}},e,{title:e.required?x(y,{style:{marginLeft:e.align==="center"?undefined:10},text:t,position:"before",symbolType:"required"}):t,render:function r(a,t,i){if(s(e.render)){return a}var o=t[L];var d=l(e["dataIndex"]);var u=E(t);var p=I.current[o];var m=typeof(e==null?void 0:e.editable)==="function"?e==null?void 0:e.editable(t,i):e==null?void 0:e.editable;var c={editable:m,add:O.bind(null,o),remove:_.bind(null,o),move:K.bind(null,o),level:p.level,parentItem:p.parentUid?I.current[p.parentUid]:null,tableRowFormItemName:u,tableRowFormItemCompleteName:[].concat(W,u),setCurrentRowTargetField:S.bind(null,u),setCurrentRowChildrenValue:q.bind(null,u)};if(m===true){var f=typeof e.formItemProps==="function"?e.formItemProps(a,t,i,c):e.formItemProps;return x(h,n({},f,{name:[].concat(u,d),style:n({marginBottom:0},f==null?void 0:f.style),children:e.render==null?void 0:e.render(a,t,i,c)}))}return e.render==null?void 0:e.render(a,t,i,c)}})}))}),[O,S,_,W,E,K,R.columns,(F=R.tableProps)==null?void 0:F.cellVerticalAlign,q,L]);return x("div",{className:r("editable-table-pro",R.className),style:R.style,children:x(d.List,{name:N,rules:R.rules,children:function r(a,t,i){var l;var o=i.errors;U.current=t;return C("div",{style:{borderRadius:"6px",border:o!=null&&o.length?"1px solid #ff4d4f":"1px solid transparent"},children:[R.tableBeforeAreaRender==null?void 0:R.tableBeforeAreaRender(t,a.length),x(u,n({scroll:{x:"max-content"},pagination:false,size:"small"},R.tableProps,{expandable:n({expandedRowKeys:A,onExpandedRowsChange:function e(r){V(r)}},(l=R.tableProps)==null?void 0:l.expandable,{childrenColumnName:B}),columns:Y,dataSource:D,rowKey:L})),x(g,{block:true,hidden:R.hiddenFooterBtn,type:"dashed",icon:x(e,{}),style:{marginTop:15},onClick:function e(){var r=R.addRowDefaultValues==null?void 0:R.addRowDefaultValues();if(!(r!=null&&r[L])){void p.error("新增行默认值必须包含唯一值字段【"+L+"】,通过 addRowDefaultValues 设置");return}t.add(r)},children:"新增"}),R.tableAfterAreaRender==null?void 0:R.tableAfterAreaRender(t,a.length),o.length?x(d.ErrorList,{errors:[x("div",{style:{color:"#ff4d4f",padding:"5px"},children:o},"0")]}):null]})}})})};export{w as EditableTablePro};
12
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 { PlusOutlined } from '@ant-design/icons';\nimport { isArray } from '@dimjs/lang';\nimport { cloneState } from '@dimjs/model';\nimport { classNames } from '@dimjs/utils';\nimport { arrayReorder, isUndefinedOrNull, TAny, toArray, TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { Form, message, Table, type FormListOperation, type TableProps } from 'antd';\nimport { FormListProps } from 'antd/es/form';\nimport { ColumnsType } from 'antd/es/table';\nimport { isValidElement, ReactElement, useMemo, useRef, useState } from 'react';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { TextSymbolWrapper } from '../text-symbol-wrapper';\nimport { TipsWrapper } from '../tips-wrapper';\nimport './style.less';\nimport { EditableTableProColumnItem, EditableTableProDataIndex, EditableTableProOperation } 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};\n\n/**\n * 使用FormList实现可编辑表格\n * ```\n * 1. 必须在外部包裹Form组件\n * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置\n * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children\n * 4. 行内需要联动逻辑可使用 column.render.operation.changeCurrentRowTargetField 方法\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\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n itemList.forEach((item, itemIndex) => {\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index: itemIndex,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n });\n }\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\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 form.setFields([\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 form.setFields([\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 form.setFields([\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 form.setFields([\n {\n name: formListCompleteName,\n value: [...dataSource],\n },\n ]);\n }\n });\n\n const changeCurrentRowTargetField = hooks.useCallbackRef(\n (\n formItemPrevName: Array<string | number>,\n dataIndexConfigs: {\n name: EditableTableProDataIndex;\n value?: TAny;\n }[],\n ) => {\n form.setFields(\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 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 return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: column.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 renderOperationProps: EditableTableProOperation = {\n add: addItem.bind(null, uid),\n remove: deleteItem.bind(null, uid),\n move: moveItem.bind(null, uid),\n editable,\n changeCurrentRowTargetField: changeCurrentRowTargetField.bind(null, formItemPrevName),\n level: dataSourceTarget.level,\n parentItem: dataSourceTarget.parentUid\n ? dataSourceUidMapFt.current[dataSourceTarget.parentUid]\n : null,\n tableRowFormItemName: formItemPrevName,\n tableRowFormItemCompleteName: [...formListCompleteName, ...formItemPrevName],\n };\n if (editable === true) {\n return (\n <Form.Item\n {...column.formItemProps}\n name={[...formItemPrevName, ...dataIndex]}\n style={{ marginBottom: 0, ...column.formItemProps?.style }}\n >\n {column.render?.(value, record, index, renderOperationProps) as React.ReactNode}\n </Form.Item>\n );\n }\n return column.render?.(value, record, index, renderOperationProps);\n },\n };\n }) as ColumnsType<TPlainObject>;\n }, [\n addItem,\n changeCurrentRowTargetField,\n deleteItem,\n formListCompleteName,\n getFormItemName,\n moveItem,\n props.columns,\n props.tableProps?.cellVerticalAlign,\n uidFieldKey,\n ]);\n\n return (\n <div className={classNames('editable-table-pro', props.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 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","formListCompleteName","dataSource","useWatch","dataSourceFt","useMemo","deep","itemList","level","parentUid","forEach","item","itemIndex","console","error","current","index","_isArray","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","length","addItem","defaultValue","insertIndex","_formListOperationRef","add","splice","expandedRowKeysSet","Set","concat","Array","from","setFields","name","value","deleteItem","_formListOperationRef2","remove","parentTarget","cloneState","moveItem","fromIndex","toIndex","result","arrayReorder","changeCurrentRowTargetField","formItemPrevName","dataIndexConfigs","map","columns","column","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","required","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","renderOperationProps","bind","move","parentItem","tableRowFormItemName","tableRowFormItemCompleteName","_column$formItemProps","Item","formItemProps","marginBottom","className","_classNames","List","rules","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","message","tableAfterAreaRender","ErrorList","color","padding"],"mappings":";w4CAyFaA,EAAmB,SAAnBA,EAAoBC,GAAiC,IAAAC,EAChE,IAAMC,EAAOC,EAAKC,kBAClB,IAAAC,EAA8CC,EAAmB,IAA1DC,EAAeF,EAAA,GAAEG,EAAkBH,EAAA,GAC1C,IAAMI,EAAeC,EAAyBV,EAAMS,cACpD,IAAME,EAAmBC,EAAqC,CAAA,GAC9D,IAAMC,EAAqBD,EAAwD,CAAA,GACnF,IAAME,EAAuBF,IAC7B,IAAMG,EAAcf,EAAMe,YAC1B,IAAMC,EAAqBhB,EAAMgB,oBAAsB,WAEvD,IAAMC,EAAuBjB,EAAMiB,sBAAwBR,EAE3D,IAAMS,EAAaf,EAAKgB,SAASF,EAAsBf,GAEvD,IAAMkB,EAAeC,GAAQ,WAC3B,IAAKH,EAAY,MAAO,GACxB,SAASI,EAAKC,EAA0BC,EAAeC,GACrDF,EAASG,SAAQ,SAACC,EAAMC,GACtB,IAAKD,EAAKZ,GAAc,CACtBc,QAAQC,MAAMH,EAAM,aACtB,KAAO,CACLd,EAAmBkB,QAAQJ,EAAKZ,IAAgB,CAC9CS,MAAAA,EACAC,UAAAA,EACAO,MAAOJ,GAETjB,EAAiBoB,QAAQJ,EAAKZ,IAAgBY,EAC9CL,EAAKK,EAAKX,IAAuB,GAAIQ,EAAQ,EAAGG,EAAKZ,GACvD,CACF,GACF,CACAF,EAAmBkB,QAAU,GAC7BpB,EAAiBoB,QAAU,GAC3BT,EAAKW,EAAQf,GAAcA,EAAa,GAAI,GAC5C,OAAOA,CACR,GAAE,CAACF,EAAoBE,EAAYH,IAEpC,IAAMmB,EAAkBC,EAAMC,gBAAe,SAACC,GAC5C,IAAMC,EAAMD,EAAOtB,GACnB,IAAIwB,EAA6C1B,EAAmBkB,QAAQO,GAE5E,IAAME,EAAoB,GAC1B,MAAOD,EAAQ,CACbC,EAAQC,KAAKF,EAAOP,OACpB,GAAIO,EAAOf,QAAU,EAAG,CACtB,KACF,CACAe,EAASA,EAAOd,UAAYZ,EAAmBkB,QAAQQ,EAAOd,WAAaiB,SAC7E,CACA,IAAMC,EAA8B,GACpCH,EAAQI,UAAUlB,SAAQ,SAACC,EAAMK,GAC/BW,EAAIF,KAAKd,GACT,GAAIK,EAAQQ,EAAQK,OAAS,EAAG,CAC9BF,EAAIF,KAAKzB,EACX,CACF,IACA,OAAO2B,CACT,IAEA,IAAMG,EAAUX,EAAMC,gBAAe,SAACE,EAAaS,EAA4BC,GAC7E,IAAMT,EAAS5B,EAAiBoB,QAAQO,GAExC,GAAIC,EAAQ,CACV,GAAIA,EAAOf,QAAU,EAAG,CAAA,IAAAyB,GAEtBA,EAAAnC,EAAqBiB,UAAO,UAAA,EAA5BkB,EAA8BC,IAAIH,EAAcC,GAChD,MACF,CACAT,EAAOvB,GAAsBuB,EAAOvB,IAAuB,GAC3D,GAAIgC,GAAeN,UAAW,CAC5BH,EAAOvB,GAAoByB,KAAKM,EAClC,KAAO,CACLR,EAAOvB,GAAoBmC,OAAOH,EAAa,EAAGD,EACpD,CACA,IAAMK,EAAqB,IAAIC,IAAI9C,GACnC6C,EAAmBF,IAAIX,EAAOxB,IAC9BP,EAAkB,GAAA8C,OAAKC,MAAMC,KAAKJ,KAClClD,EAAKuD,UAAU,CACb,CACEC,KAAMzC,EACN0C,MAAK,GAAAL,OAAMpC,KAGjB,CACF,IAEA,IAAM0C,EAAazB,EAAMC,gBAAe,SAACE,EAAsBN,GAC7D,IAAMO,EAAS1B,EAAmBkB,QAAQO,GAC1C,GAAIC,EAAOf,QAAU,EAAG,CAAA,IAAAqC,GAEtBA,EAAA/C,EAAqBiB,UAArB8B,UAAAA,EAAAA,EAA8BC,OAAO9B,GACrC,MACF,CACA,IAAMP,EAAYc,EAAOd,UACzB,IAAKA,EAAW,CACdP,EAAWiC,OAAOnB,EAAO,EAC3B,KAAO,CACL,IAAM+B,EAAepD,EAAiBoB,QAAQN,GAC9CsC,EAAa/C,GAAoBmC,OAAOnB,EAAO,GAC/C,GAAI+B,EAAa/C,GAAoB6B,SAAW,EAAG,QAC1CkB,EAAa/C,EACtB,CACF,CACAd,EAAKuD,UAAU,CACb,CACEC,KAAMzC,EACN0C,MAAOK,EAAW9C,KAGxB,IAEA,IAAM+C,EAAW9B,EAAMC,gBAAe,SAACE,EAAsB4B,EAAmBC,GAC9E,GAAID,IAAcC,GAAWA,EAAU,EAAG,OAC1C,IAAM5B,EAAS1B,EAAmBkB,QAAQO,GAC1C,IAAMb,EAAYc,EAAOd,UACzB,IAAKA,EAAW,CACd,IAAM2C,EAASC,EAAanD,EAAYgD,EAAWC,GACnDjE,EAAKuD,UAAU,CACb,CACEC,KAAMzC,EACN0C,MAAOS,IAGb,KAAO,CACL,IAAML,EAAepD,EAAiBoB,QAAQN,GAC9CsC,EAAa/C,GAAsBqD,EAAaN,EAAa/C,GAAqBkD,EAAWC,GAC7FjE,EAAKuD,UAAU,CACb,CACEC,KAAMzC,EACN0C,MAAK,GAAAL,OAAMpC,KAGjB,CACF,IAEA,IAAMoD,EAA8BnC,EAAMC,gBACxC,SACEmC,EACAC,GAKAtE,EAAKuD,UACHe,EAAiBC,KAAI,SAAC9C,GACpB,MAAO,CACL+B,KAAIJ,GAAAA,OAAMrC,EAAyBsD,EAAqB7D,EAAyBiB,EAAK+B,OACtFC,MAAOhC,EAAKgC,MAEf,IAEL,IAGF,IAAMe,EAAUrD,GAAQ,WACtB,OAAOrB,EAAM0E,QAAQD,KAAI,SAACE,GACxB,IAAMC,EAAQD,EAAOC,MACrB,IAAMC,EAAUC,EAAeF,WAAiBA,IAAU,SAC1D,IAAIG,EAAiDH,EACrD,GAAID,EAAOK,kBAAoBH,EAAS,CACtC,UAAWF,EAAOK,mBAAqB,SAAU,CAC/CD,EACEE,EAACC,EAAW,CAACC,QAAQ,UAAUC,aAAc,CAAEC,QAASV,EAAOK,kBAAmBM,SAC/EV,GAGP,KAAO,CACLG,EAAcE,EAACC,EAAWK,EAAA,CAAA,EAAKZ,EAAOK,iBAAgB,CAAAM,SAAGV,IAC3D,CACF,CACA,OAAAW,EAAA,CACEC,OAAQ,SAAAA,IAAM,IAAAC,EACZ,MAAO,CACLC,SAAQD,EAAAzF,EAAM2F,aAANF,UAAAA,EAAAA,EAAkBG,oBAAqB,SAEnD,GACGjB,EAAM,CACTC,MAAOD,EAAOkB,SACZZ,EAACa,EAAiB,CAChBC,MAAO,CAAEC,WAAYrB,EAAOsB,QAAU,SAAWvD,UAAY,IAC7DwD,KAAMnB,EACNoB,SAAS,SACTC,WAAW,aAGbrB,EAEFsB,OAAQ,SAAAA,EAAC1C,EAAOtB,EAAQL,GACtB,GAAIsE,EAAkB3B,EAAO0B,QAAS,CACpC,OAAO1C,CACT,CACA,IAAMrB,EAAMD,EAAOtB,GACnB,IAAMwF,EAAY7F,EAAgBiE,EAAO,cACzC,IAAMJ,EAAmBrC,EAAgBG,GACzC,IAAMmE,EAAmB3F,EAAmBkB,QAAQO,GAEpD,IAAMmE,SACG9B,GAAM,UAAA,EAANA,EAAQ8B,YAAa,WAAa9B,GAAM,UAAA,EAANA,EAAQ8B,SAASpE,EAAQL,GAAS2C,GAAM,UAAA,EAANA,EAAQ8B,SACrF,IAAMC,EAAkD,CACtDxD,IAAKJ,EAAQ6D,KAAK,KAAMrE,GACxBwB,OAAQF,EAAW+C,KAAK,KAAMrE,GAC9BsE,KAAM3C,EAAS0C,KAAK,KAAMrE,GAC1BmE,SAAAA,EACAnC,4BAA6BA,EAA4BqC,KAAK,KAAMpC,GACpE/C,MAAOgF,EAAiBhF,MACxBqF,WAAYL,EAAiB/E,UACzBZ,EAAmBkB,QAAQyE,EAAiB/E,WAC5C,KACJqF,qBAAsBvC,EACtBwC,6BAA4BzD,GAAAA,OAAMrC,EAAyBsD,IAE7D,GAAIkC,IAAa,KAAM,CAAA,IAAAO,EACrB,OACE/B,EAAC9E,EAAK8G,KAAI1B,EAAA,CAAA,EACJZ,EAAOuC,cAAa,CACxBxD,QAAIJ,OAAMiB,EAAqBgC,GAC/BR,MAAKR,EAAA,CAAI4B,aAAc,IAACH,EAAKrC,EAAOuC,gBAAPF,UAAAA,EAAAA,EAAsBjB,OAAQT,SAE1DX,EAAO0B,oBAAP1B,EAAO0B,OAAS1C,EAAOtB,EAAQL,EAAO0E,KAG7C,CACA,OAAO/B,EAAO0B,QAAM,UAAA,EAAb1B,EAAO0B,OAAS1C,EAAOtB,EAAQL,EAAO0E,EAC/C,GAEJ,GACF,GAAG,CACD5D,EACAwB,EACAV,EACA3C,EACAiB,EACA+B,EACAjE,EAAM0E,SAAOzE,EACbD,EAAM2F,aAAN1F,UAAAA,EAAAA,EAAkB2F,kBAClB7E,IAGF,OACEkE,EAAA,MAAA,CAAKmC,UAAWC,EAAW,qBAAsBrH,EAAMoH,WAAYrB,MAAO/F,EAAM+F,MAAMT,SACpFL,EAAC9E,EAAKmH,KAAI,CAAC5D,KAAMjD,EAAc8G,MAAOvH,EAAMuH,MAAMjC,SAC/C,SAAAA,EAACkC,EAAQC,EAAiBC,GAAiB,IAAAC,EAAA,IAAbC,EAAMF,EAANE,OAC7B9G,EAAqBiB,QAAU0F,EAC/B,OACEI,EAAA,MAAA,CACE9B,MAAO,CACL+B,aAAc,MACdC,OAAQH,GAAAA,MAAAA,EAAQ/E,OAAS,oBAAsB,yBAC/CyC,SAAA,CAEDtF,EAAMgI,mCAANhI,EAAMgI,sBAAwBP,EAAmBD,EAAO3E,QACzDoC,EAACgD,EAAK1C,EAAA,CACJ2C,OAAQ,CAAEC,EAAG,eACbC,WAAY,MACZC,KAAK,SACDrI,EAAM2F,WAAU,CACpB2C,WAAU/C,EAAA,CACRhF,gBAAiBA,EACjBgI,qBAAsB,SAAAA,EAAChI,GACrBC,EAAmBD,EACrB,IAACoH,EACE3H,EAAM2F,aAANgC,UAAAA,EAAAA,EAAkBW,WAAU,CAC/BtH,mBAAoBA,IAEtB0D,QAASA,EACTxD,WAAYE,EACZoH,OAAQzH,KAEVkE,EAACwD,EAAa,CACZC,MAAK,KACLC,OAAQ3I,EAAM4I,gBACdC,KAAK,SACLC,KAAM7D,EAAA8D,MACNhD,MAAO,CAAEiD,UAAW,IACpBC,QAAS,SAAAA,IACP,IAAMC,EAAgBlJ,EAAMmJ,iCAANnJ,EAAMmJ,sBAC5B,KAAKD,GAAa,MAAbA,EAAgBnI,IAAc,MAC5BqI,EAAQtH,MACQf,mBAAAA,iCAErB,MACF,CACA0G,EAAkBvE,IAAIgG,EACtB,EAAA5D,SACH,OAGAtF,EAAMqJ,kCAANrJ,EAAMqJ,qBAAuB5B,EAAmBD,EAAO3E,QACvD+E,EAAO/E,OACNoC,EAAC9E,EAAKmJ,UAAS,CACb1B,OAAQ,CACN3C,EAAA,MAAA,CAAKc,MAAO,CAAEwD,MAAO,UAAWC,QAAS,OAAQlE,SAC9CsC,GADmD,QAKxD,OAGV,KAIR"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/editable-table-pro/editable-table-pro.tsx"],"sourcesContent":["import { 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, 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 { 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};\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\n const formListCompleteName = props.formListCompleteName || formListName;\n\n const dataSource = Form.useWatch(formListCompleteName, form);\n\n const dataSourceFt = useMemo(() => {\n if (!dataSource) return [];\n function deep(itemList: TPlainObject[], level: number, parentUid?: string | number) {\n itemList.forEach((item, itemIndex) => {\n if (!item[uidFieldKey]) {\n console.error(item, '数据中未查询到唯一值');\n } else {\n dataSourceUidMapFt.current[item[uidFieldKey]] = {\n level,\n parentUid,\n index: itemIndex,\n };\n dataSourceUidMap.current[item[uidFieldKey]] = item;\n deep(item[childrenColumnName] || [], level + 1, item[uidFieldKey]);\n }\n });\n }\n dataSourceUidMapFt.current = {};\n dataSourceUidMap.current = {};\n deep(isArray(dataSource) ? dataSource : [], 1);\n return dataSource;\n }, [childrenColumnName, dataSource, uidFieldKey]);\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 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 return {\n onCell: () => {\n return {\n valign: props.tableProps?.cellVerticalAlign || 'middle',\n };\n },\n ...column,\n title: column.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 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: [...formListCompleteName, ...formItemPrevName],\n setCurrentRowTargetField: setCurrentRowTargetField.bind(null, formItemPrevName),\n setCurrentRowChildrenValue: setCurrentRowChildrenValue.bind(null, formItemPrevName),\n };\n if (editable === true) {\n const formItemProps =\n typeof column.formItemProps === 'function'\n ? column.formItemProps(value, record, index, renderOperationProps)\n : column.formItemProps;\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 addItem,\n setCurrentRowTargetField,\n deleteItem,\n formListCompleteName,\n getFormItemName,\n moveItem,\n props.columns,\n props.tableProps?.cellVerticalAlign,\n setCurrentRowChildrenValue,\n uidFieldKey,\n ]);\n\n return (\n <div className={classNames('editable-table-pro', props.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 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","formListCompleteName","dataSource","useWatch","dataSourceFt","useMemo","deep","itemList","level","parentUid","forEach","item","itemIndex","console","error","current","index","_isArray","getFormItemName","_hooks","useCallbackRef","record","uid","target","indexes","push","undefined","arr","reverse","length","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","columns","column","title","support","isValidElement","titleRender","tipsWrapperProps","_jsx","TipsWrapper","tipType","popoverProps","content","children","_extends","onCell","_props$tableProps","valign","tableProps","cellVerticalAlign","required","TextSymbolWrapper","style","marginLeft","align","text","position","symbolType","render","isUndefinedOrNull","dataIndex","dataSourceTarget","editable","renderOperationProps","bind","move","parentItem","tableRowFormItemName","tableRowFormItemCompleteName","formItemProps","FormItemWrapper","marginBottom","className","_classNames","List","rules","fields","formListOperation","_ref","_props$tableProps3","errors","_jsxs","borderRadius","border","tableBeforeAreaRender","Table","scroll","x","pagination","size","expandable","onExpandedRowsChange","rowKey","ButtonWrapper","block","hidden","hiddenFooterBtn","type","icon","_PlusOutlined","marginTop","onClick","defaultValues","addRowDefaultValues","message","tableAfterAreaRender","ErrorList","color","padding"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
2
  import './index.css';
3
3
  /*! @flatjs/forge MIT @flatbiz/antd */
4
- import{isArray as r}from"@dimjs/lang/cjs/is-array";import{getGlobalData as t,getUuid as e}from"@flatbiz/utils";var i=function e(){var i=t(),n=i.elemAclLimits;var a=r(n)?n:[];return a};var n=function r(t){if(!t)return true;var e=i();if(e.includes(t)){return true}return false};function a(r,t){var e=r;for(var i in t){if(t.hasOwnProperty(i)){e[i]=t[i]}}return e}var o=function r(){return e()};var s={hasPermission:n,getPermissionList:i,attachPropertiesToComponent:a,getModelKey:o};export{s as fbaUtils};
4
+ import{isArray as r}from"@dimjs/lang/cjs/is-array";import{getGlobalData as e,getUuid as a}from"@flatbiz/utils";var n=function a(){var n=e(),t=n.elemAclLimits;var i=r(t)?t:[];return i};var t=function r(e){if(!e)return true;var a=n();if(a.includes(e)){return true}return false};function i(r,e){var a=r;for(var n in e){if(e.hasOwnProperty(n)){a[n]=e[n]}}return a}var o=function r(){return a()};var u=function r(e,a){var n=e.getInternalHooks("RC_FORM_INTERNAL_HOOKS").dispatch;a.forEach((function(r){n({type:"updateValue",namePath:r.name,value:r.value})}))};var s=function r(e,a){var n=a.map((function(r){return{name:r.name,value:r.value}}));e.setFields(n);u(e,n)};var l={hasPermission:t,getPermissionList:n,attachPropertiesToComponent:i,getModelKey:o,triggerFormValuesChange:u,setFormFieldsAndTriggerValuesChange:s};export{l as fbaUtils};
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/fba-utils/fba-utils.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { getGlobalData, getUuid } from '@flatbiz/utils';\n\nconst getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nconst hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nfunction attachPropertiesToComponent<C, P extends Record<string, unknown>>(\n component: C,\n properties: P,\n): C & P {\n const ret = component as Record<string, unknown>;\n for (const key in properties) {\n if (properties.hasOwnProperty(key)) {\n ret[key] = properties[key];\n }\n }\n return ret as C & P;\n}\n\nconst getModelKey = () => {\n return getUuid();\n};\n\nexport const fbaUtils = {\n hasPermission,\n getPermissionList,\n attachPropertiesToComponent,\n getModelKey,\n};\n"],"names":["getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","attachPropertiesToComponent","component","properties","ret","key","hasOwnProperty","getModelKey","getUuid","fbaUtils"],"mappings":";+GAGA,IAAMA,EAAoB,SAApBA,IACJ,IAAAC,EAA0BC,IAAlBC,EAAaF,EAAbE,cACR,IAAMC,EAA2BC,EAAQF,GAAiBA,EAAgB,GAC1E,OAAOC,CACT,EAEA,IAAME,EAAgB,SAAhBA,EAAiBC,GACrB,IAAKA,EAAM,OAAO,KAClB,IAAMH,EAAiBJ,IACvB,GAAII,EAAeI,SAASD,GAAO,CACjC,OAAO,IACT,CACA,OAAO,KACT,EAEA,SAASE,EACPC,EACAC,GAEA,IAAMC,EAAMF,EACZ,IAAK,IAAMG,KAAOF,EAAY,CAC5B,GAAIA,EAAWG,eAAeD,GAAM,CAClCD,EAAIC,GAAOF,EAAWE,EACxB,CACF,CACA,OAAOD,CACT,CAEA,IAAMG,EAAc,SAAdA,IACJ,OAAOC,GACT,EAEO,IAAMC,EAAW,CACtBX,cAAAA,EACAN,kBAAAA,EACAS,4BAAAA,EACAM,YAAAA"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/fba-utils/fba-utils.ts"],"sourcesContent":["import { isArray } from '@dimjs/lang';\nimport { getGlobalData, getUuid, TAny } from '@flatbiz/utils';\nimport { FormInstance } from 'antd';\n\nconst getPermissionList = () => {\n const { elemAclLimits } = getGlobalData<{ elemAclLimits: string[] }>();\n const permissionList: string[] = isArray(elemAclLimits) ? elemAclLimits : [];\n return permissionList;\n};\n\nconst hasPermission = (name?: string) => {\n if (!name) return true;\n const permissionList = getPermissionList();\n if (permissionList.includes(name)) {\n return true;\n }\n return false;\n};\n\nfunction attachPropertiesToComponent<C, P extends Record<string, unknown>>(\n component: C,\n properties: P,\n): C & P {\n const ret = component as Record<string, unknown>;\n for (const key in properties) {\n if (properties.hasOwnProperty(key)) {\n ret[key] = properties[key];\n }\n }\n return ret as C & P;\n}\n\nconst getModelKey = () => {\n return getUuid();\n};\n\nconst triggerFormValuesChange = (\n form: FormInstance,\n changeList: { name: string | number | Array<string | number>; value: TAny }[],\n) => {\n const formDispatch = (form as TAny).getInternalHooks('RC_FORM_INTERNAL_HOOKS').dispatch;\n changeList.forEach((item) => {\n formDispatch({\n type: 'updateValue',\n namePath: item.name,\n value: item.value,\n });\n });\n};\n\nconst setFormFieldsAndTriggerValuesChange = (\n form: FormInstance,\n changeList: { name: string | number | Array<string | number>; value: TAny }[],\n) => {\n const paramList = changeList.map((item) => {\n return {\n name: item.name,\n value: item.value,\n };\n });\n\n form.setFields(paramList);\n\n triggerFormValuesChange(form, paramList);\n};\n\nexport const fbaUtils = {\n hasPermission,\n getPermissionList,\n attachPropertiesToComponent,\n getModelKey,\n /**\n * 手动触发Antd Form 的 onValuesChange\n * ```\n * 1. 正常在通过 form.setFieldsValue 不会触发onValuesChange\n * 2. 需要触发可调用此方法\n * ```\n */\n triggerFormValuesChange,\n /**\n * 操作Antd Form\n * ```\n * 1. 通过 form.setFields 修改属性值\n * 2. 触发 Form 的 onValuesChange\n * ```\n */\n setFormFieldsAndTriggerValuesChange: setFormFieldsAndTriggerValuesChange,\n};\n"],"names":["getPermissionList","_getGlobalData","getGlobalData","elemAclLimits","permissionList","_isArray","hasPermission","name","includes","attachPropertiesToComponent","component","properties","ret","key","hasOwnProperty","getModelKey","getUuid","triggerFormValuesChange","form","changeList","formDispatch","getInternalHooks","dispatch","forEach","item","type","namePath","value","setFormFieldsAndTriggerValuesChange","paramList","map","setFields","fbaUtils"],"mappings":";+GAIA,IAAMA,EAAoB,SAApBA,IACJ,IAAAC,EAA0BC,IAAlBC,EAAaF,EAAbE,cACR,IAAMC,EAA2BC,EAAQF,GAAiBA,EAAgB,GAC1E,OAAOC,CACT,EAEA,IAAME,EAAgB,SAAhBA,EAAiBC,GACrB,IAAKA,EAAM,OAAO,KAClB,IAAMH,EAAiBJ,IACvB,GAAII,EAAeI,SAASD,GAAO,CACjC,OAAO,IACT,CACA,OAAO,KACT,EAEA,SAASE,EACPC,EACAC,GAEA,IAAMC,EAAMF,EACZ,IAAK,IAAMG,KAAOF,EAAY,CAC5B,GAAIA,EAAWG,eAAeD,GAAM,CAClCD,EAAIC,GAAOF,EAAWE,EACxB,CACF,CACA,OAAOD,CACT,CAEA,IAAMG,EAAc,SAAdA,IACJ,OAAOC,GACT,EAEA,IAAMC,EAA0B,SAA1BA,EACJC,EACAC,GAEA,IAAMC,EAAgBF,EAAcG,iBAAiB,0BAA0BC,SAC/EH,EAAWI,SAAQ,SAACC,GAClBJ,EAAa,CACXK,KAAM,cACNC,SAAUF,EAAKjB,KACfoB,MAAOH,EAAKG,OAEhB,GACF,EAEA,IAAMC,EAAsC,SAAtCA,EACJV,EACAC,GAEA,IAAMU,EAAYV,EAAWW,KAAI,SAACN,GAChC,MAAO,CACLjB,KAAMiB,EAAKjB,KACXoB,MAAOH,EAAKG,MAEhB,IAEAT,EAAKa,UAAUF,GAEfZ,EAAwBC,EAAMW,EAChC,EAEO,IAAMG,EAAW,CACtB1B,cAAAA,EACAN,kBAAAA,EACAS,4BAAAA,EACAM,YAAAA,EAQAE,wBAAAA,EAQAW,oCAAqCA"}
@@ -2,5 +2,5 @@
2
2
  import './../fba-hooks/index.css';
3
3
  import './index.css';
4
4
  /*! @flatjs/forge MIT @flatbiz/antd */
5
- import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isString as e}from"@dimjs/lang/cjs/is-string";import{useRef as n,useMemo as r,memo as i}from"react";import{classNames as a}from"@dimjs/utils/cjs/class-names";import{useSize as l}from"ahooks";import{Tooltip as o}from"antd";import{fbaHooks as s}from"../fba-hooks/index.js";import{jsxs as d,jsx as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"@flatbiz/utils";import"../use-responsive-point-21b8c601.js";var h=function t(e){var r=n(null);var i=l(r);var h=(i==null?void 0:i.width)||0;var u=n(null);var m=l(u);var v=s.useMemoCustom((function(){if(!(m!=null&&m.width)||!h)return false;return m.width>h}),[m==null?void 0:m.width,h]);return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:r,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:u,children:e.text})}),c(o,{title:v?e.text:undefined,children:c("span",{className:"tow-content",children:c("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})};var u=function t(e){var r=n(null);var i=l(r);var s=e.maxLength;var h=(i==null?void 0:i.width)||0;var u=e.text;var m=n(null);var v=l(m);var w=u.length>s;var f=(v==null?void 0:v.width)||0;var p=w&&f<h;var x=h<f+1||w;var g=u.substring(0,e.maxLength);return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:r,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:m,children:g})}),c(o,{title:x?u:undefined,children:p?c("span",{className:"tow-cut-content",children:d("span",{className:"tow-show-text",onClick:e.onClick,children:[g,"..."]})}):c("span",{className:"tow-content",children:c("span",{className:"tow-show-text",onClick:e.onClick,children:u})})})]})};var m=function t(e){var i=n(null);var s=l(i);var h=e.maxWidth||0;var u=n(null);var m=l(u);var v=r((function(){if(!(m!=null&&m.width)||!(s!=null&&s.width))return undefined;if(s.width<h){if(m.width>s.width){return{showTips:true}}}if(m.width<h)return undefined;if(m.width>h){return{showTips:true,width:h}}return undefined}),[m==null?void 0:m.width,h]);var w=v==null?void 0:v.showTips;return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:i,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:u,children:e.text})}),c(o,{title:w?e.text:undefined,children:c("span",{className:"tow-content",style:{width:v==null?void 0:v.width},children:c("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})};var v=function n(r){if(r.maxLength&&e(r.text)){return c(u,t({},r))}if(r.maxWidth){return c(m,t({},r))}return c(h,t({},r))};var w=i(v,(function(t,e){if(t.text!==e.text||t.maxLength!==e.maxLength||t.maxWidth!==t.maxWidth){return false}return true}));export{w as TextOverflow};
5
+ import{_ as t}from"../_rollupPluginBabelHelpers-a0769acd.js";import{isString as e}from"@dimjs/lang/cjs/is-string";import{useRef as n,useMemo as r,memo as i}from"react";import{classNames as a}from"@dimjs/utils/cjs/class-names";import{useSize as l}from"ahooks";import{Tooltip as o}from"antd";import{fbaHooks as s}from"../fba-hooks/index.js";import{jsxs as d,jsx as c}from"react/jsx-runtime";import"@dimjs/lang/cjs/is-array";import"@wove/react/cjs/hooks";import"@flatbiz/utils";import"../use-responsive-point-21b8c601.js";var h=function t(e){var r=n(null);var i=l(r);var h=(i==null?void 0:i.width)||0;var u=n(null);var m=l(u);var v=s.useMemoCustom((function(){if(!(m!=null&&m.width)||!h)return false;return m.width>h}),[m==null?void 0:m.width,h]);return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:r,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:u,children:e.text})}),c(o,{title:v&&!e.hideTip?e.text:undefined,children:c("span",{className:"tow-content",children:c("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})};var u=function t(e){var r=n(null);var i=l(r);var s=e.maxLength;var h=(i==null?void 0:i.width)||0;var u=e.text;var m=n(null);var v=l(m);var f=u.length>s;var w=(v==null?void 0:v.width)||0;var x=f&&w<h;var p=h<w+1||f;var g=u.substring(0,e.maxLength);return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:r,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:m,children:g})}),c(o,{title:p&&!e.hideTip?u:undefined,children:x?c("span",{className:"tow-cut-content",children:d("span",{className:"tow-show-text",onClick:e.onClick,children:[g,"..."]})}):c("span",{className:"tow-content",children:c("span",{className:"tow-show-text",onClick:e.onClick,children:u})})})]})};var m=function t(e){var i=n(null);var s=l(i);var h=e.maxWidth||0;var u=n(null);var m=l(u);var v=r((function(){if(!(m!=null&&m.width)||!(s!=null&&s.width))return undefined;if(s.width<h){if(m.width>s.width){return{isTextOverflow:true}}}if(m.width<h)return undefined;if(m.width>h){return{isTextOverflow:true,width:h}}return undefined}),[m==null?void 0:m.width,h]);var f=v==null?void 0:v.isTextOverflow;return d("div",{className:a("text-overflow",{"tow-trigger":e.onClick}),ref:i,children:[c("span",{className:"tow-hidden",children:c("span",{className:"tow-inner-text",ref:u,children:e.text})}),c(o,{title:f&&!e.hideTip?e.text:undefined,children:c("span",{className:"tow-content",style:{width:v==null?void 0:v.width},children:c("span",{className:"tow-show-text",onClick:e.onClick,children:e.text})})})]})};var v=function n(r){if(r.maxLength&&e(r.text)){return c(u,t({},r))}if(r.maxWidth){return c(m,t({},r))}return c(h,t({},r))};var f=i(v,(function(t,e){if(t.text!==e.text||t.maxLength!==e.maxLength||t.maxWidth!==t.maxWidth){return false}return true}));export{f as TextOverflow};
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-overflow/overflow-auto.tsx","@flatbiz/antd/src/text-overflow/overflow-length.tsx","@flatbiz/antd/src/text-overflow/overflow-width.tsx","@flatbiz/antd/src/text-overflow/text-overflow.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowAuto = (props: TextOverflowProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n\n // 文本宽度\n const showTips = fbaHooks.useMemoCustom(() => {\n if (!hideTextSize?.width || !parentNodeWidth) return false;\n return hideTextSize.width > parentNodeWidth;\n }, [hideTextSize?.width, parentNodeWidth]);\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {props.text}\n </span>\n </span>\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useRef } from 'react';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowLength = (props: Omit<TextOverflowProps, 'maxWidth'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const maxLength = props.maxLength as number;\n const parentNodeWidth = size?.width || 0;\n const text = props.text as string;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n const needCut = text.length > maxLength;\n\n const cutedTextWidth = hideTextSize?.width || 0;\n\n const showCustomEllipsis = needCut && cutedTextWidth < parentNodeWidth;\n\n const showTips = parentNodeWidth < cutedTextWidth + 1 || needCut;\n\n const cutValue = text.substring(0, props.maxLength);\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {cutValue}\n </span>\n </span>\n\n <Tooltip title={showTips ? text : undefined}>\n {showCustomEllipsis ? (\n <span className=\"tow-cut-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {cutValue}...\n </span>\n </span>\n ) : (\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {text}\n </span>\n </span>\n )}\n </Tooltip>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useMemo, useRef } from 'react';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowWidth = (props: Omit<TextOverflowProps, 'maxLength'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const rootSize = useSize(rootRef);\n const maxWidth = props.maxWidth || 0;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n\n const handleResult = useMemo(() => {\n if (!hideTextSize?.width || !rootSize?.width) return undefined;\n if (rootSize.width < maxWidth) {\n if (hideTextSize.width > rootSize.width) {\n return { showTips: true };\n }\n }\n if (hideTextSize.width < maxWidth) return undefined;\n if (hideTextSize.width > maxWidth) {\n return { showTips: true, width: maxWidth };\n }\n return undefined;\n }, [hideTextSize?.width, maxWidth]);\n\n const showTips = handleResult?.showTips;\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {props.text}\n </span>\n </span>\n\n <Tooltip title={showTips ? props.text : undefined}>\n <span className=\"tow-content\" style={{ width: handleResult?.width }}>\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n );\n};\n","import { isString } from '@dimjs/lang';\nimport { memo } from 'react';\nimport { OverflowAuto } from './overflow-auto';\nimport { OverflowLength } from './overflow-length';\nimport { OverflowWidth } from './overflow-width';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nconst InnerTextOverflow = (props: TextOverflowProps) => {\n if (props.maxLength && isString(props.text)) {\n return <OverflowLength {...props} />;\n }\n if (props.maxWidth) {\n return <OverflowWidth {...props} />;\n }\n return <OverflowAuto {...props} />;\n};\n\n/**\n * 内容溢出截取,并在尾部添加...,被截取的添加Tooltip显示完整数据\n * ```\n * 控制文本显示三种方式\n * 1. 通过 maxLength 控制超长\n * 2. 通过 maxWidth 控制超长\n * 3. 与父节点宽度比较,控制超长\n * 4. 优先级 maxLength > maxWidth\n *\n * 注意:\n * 1. 当前节点父节点需要添加 overflow-x: hidden;\n * 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;\n * 3. 与 Table columns render结合使用,需要配置ellipsis=true\n * 例如:<Table columns={[{\n ...\n render: (value) => {\n return <TextOverflow text={value} />;\n },\n ellipsis: true,\n }]} />\n 4. 与 Table columns render结合使用,如果Table配置了 scroll={{ x: 'max-content' }}后,不能与TextOverflow maxWidth结合使用\n * ```\n */\nexport const TextOverflow = memo(InnerTextOverflow, (pre, next) => {\n if (pre.text !== next.text || pre.maxLength !== next.maxLength || pre.maxWidth !== pre.maxWidth) {\n return false;\n }\n return true;\n});\n"],"names":["OverflowAuto","props","rootRef","useRef","size","useSize","parentNodeWidth","width","hideTextRef","hideTextSize","showTips","fbaHooks","useMemoCustom","_jsxs","className","_classNames","onClick","ref","children","_jsx","text","Tooltip","title","undefined","OverflowLength","maxLength","needCut","length","cutedTextWidth","showCustomEllipsis","cutValue","substring","OverflowWidth","rootSize","maxWidth","handleResult","useMemo","style","InnerTextOverflow","_isString","_extends","TextOverflow","memo","pre","next"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/text-overflow/overflow-auto.tsx","@flatbiz/antd/src/text-overflow/overflow-length.tsx","@flatbiz/antd/src/text-overflow/overflow-width.tsx","@flatbiz/antd/src/text-overflow/text-overflow.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useRef } from 'react';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowAuto = (props: TextOverflowProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const parentNodeWidth = size?.width || 0;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n\n // 文本宽度是否溢出\n const isTextOverflow = fbaHooks.useMemoCustom(() => {\n if (!hideTextSize?.width || !parentNodeWidth) return false;\n return hideTextSize.width > parentNodeWidth;\n }, [hideTextSize?.width, parentNodeWidth]);\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {props.text}\n </span>\n </span>\n <Tooltip title={isTextOverflow && !props.hideTip ? props.text : undefined}>\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useRef } from 'react';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowLength = (props: Omit<TextOverflowProps, 'maxWidth'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const size = useSize(rootRef);\n const maxLength = props.maxLength as number;\n const parentNodeWidth = size?.width || 0;\n const text = props.text as string;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n const needCut = text.length > maxLength;\n\n const cutedTextWidth = hideTextSize?.width || 0;\n\n const showCustomEllipsis = needCut && cutedTextWidth < parentNodeWidth;\n\n const isTextOverflow = parentNodeWidth < cutedTextWidth + 1 || needCut;\n\n const cutValue = text.substring(0, props.maxLength);\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {cutValue}\n </span>\n </span>\n\n <Tooltip title={isTextOverflow && !props.hideTip ? text : undefined}>\n {showCustomEllipsis ? (\n <span className=\"tow-cut-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {cutValue}...\n </span>\n </span>\n ) : (\n <span className=\"tow-content\">\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {text}\n </span>\n </span>\n )}\n </Tooltip>\n </div>\n );\n};\n","import { classNames } from '@dimjs/utils';\nimport { useSize } from 'ahooks';\nimport { Tooltip } from 'antd';\nimport { useMemo, useRef } from 'react';\nimport { TextOverflowProps } from './types';\n\nexport const OverflowWidth = (props: Omit<TextOverflowProps, 'maxLength'>) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const rootSize = useSize(rootRef);\n const maxWidth = props.maxWidth || 0;\n const hideTextRef = useRef<HTMLSpanElement>(null);\n\n const hideTextSize = useSize(hideTextRef);\n\n const handleResult = useMemo(() => {\n if (!hideTextSize?.width || !rootSize?.width) return undefined;\n if (rootSize.width < maxWidth) {\n if (hideTextSize.width > rootSize.width) {\n return { isTextOverflow: true };\n }\n }\n if (hideTextSize.width < maxWidth) return undefined;\n if (hideTextSize.width > maxWidth) {\n return { isTextOverflow: true, width: maxWidth };\n }\n return undefined;\n }, [hideTextSize?.width, maxWidth]);\n\n const isTextOverflow = handleResult?.isTextOverflow;\n\n return (\n <div\n className={classNames('text-overflow', {\n 'tow-trigger': props.onClick,\n })}\n ref={rootRef}\n >\n <span className=\"tow-hidden\">\n <span className=\"tow-inner-text\" ref={hideTextRef}>\n {props.text}\n </span>\n </span>\n\n <Tooltip title={isTextOverflow && !props.hideTip ? props.text : undefined}>\n <span className=\"tow-content\" style={{ width: handleResult?.width }}>\n <span className=\"tow-show-text\" onClick={props.onClick}>\n {props.text}\n </span>\n </span>\n </Tooltip>\n </div>\n );\n};\n","import { isString } from '@dimjs/lang';\nimport { memo } from 'react';\nimport { OverflowAuto } from './overflow-auto';\nimport { OverflowLength } from './overflow-length';\nimport { OverflowWidth } from './overflow-width';\nimport './style.less';\nimport { TextOverflowProps } from './types';\n\nconst InnerTextOverflow = (props: TextOverflowProps) => {\n if (props.maxLength && isString(props.text)) {\n return <OverflowLength {...props} />;\n }\n if (props.maxWidth) {\n return <OverflowWidth {...props} />;\n }\n return <OverflowAuto {...props} />;\n};\n\n/**\n * 内容溢出截取,并在尾部添加...,被截取的添加Tooltip显示完整数据\n * ```\n * 控制文本显示三种方式\n * 1. 通过 maxLength 控制超长\n * 2. 通过 maxWidth 控制超长\n * 3. 与父节点宽度比较,控制超长\n * 4. 优先级 maxLength > maxWidth\n *\n * 注意:\n * 1. 当前节点父节点需要添加 overflow-x: hidden;\n * 2. 如果父节点设置flex-shrink会有影响,可复写flex-shrink: initial;\n * 3. 与 Table columns render结合使用,需要配置ellipsis=true\n * 例如:<Table columns={[{\n ...\n render: (value) => {\n return <TextOverflow text={value} />;\n },\n ellipsis: true,\n }]} />\n 4. 与 Table columns render结合使用,如果Table配置了 scroll={{ x: 'max-content' }}后,不能与TextOverflow maxWidth结合使用\n * ```\n */\nexport const TextOverflow = memo(InnerTextOverflow, (pre, next) => {\n if (pre.text !== next.text || pre.maxLength !== next.maxLength || pre.maxWidth !== pre.maxWidth) {\n return false;\n }\n return true;\n});\n"],"names":["OverflowAuto","props","rootRef","useRef","size","useSize","parentNodeWidth","width","hideTextRef","hideTextSize","isTextOverflow","fbaHooks","useMemoCustom","_jsxs","className","_classNames","onClick","ref","children","_jsx","text","Tooltip","title","hideTip","undefined","OverflowLength","maxLength","needCut","length","cutedTextWidth","showCustomEllipsis","cutValue","substring","OverflowWidth","rootSize","maxWidth","handleResult","useMemo","style","InnerTextOverflow","_isString","_extends","TextOverflow","memo","pre","next"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1855,21 +1855,23 @@ export type DragEditableTableProps = EditableTableProps & {
1855
1855
  * ```
1856
1856
  */
1857
1857
  export declare const DragEditableTable: (props: DragEditableTableProps) => import("react/jsx-runtime").JSX.Element;
1858
- export type EditableTableProDataIndex = string | number | readonly (string | number)[];
1858
+ export type EditableTableProDataIndex = string | readonly (string | number)[];
1859
1859
  export interface EditableTableProOperation {
1860
1860
  add: (defaultValue: TPlainObject, insertIndex?: number) => void;
1861
1861
  remove: (index: number) => void;
1862
1862
  /** 同一级内移动 */
1863
1863
  move: (fromIndex: number, toIndex: number) => void;
1864
1864
  /** 是否可编辑 */
1865
- editable: boolean;
1865
+ editable?: boolean;
1866
1866
  /** 当前行数据层级 */
1867
1867
  level: number;
1868
1868
  /** 设置当前行指定字段值 */
1869
- changeCurrentRowTargetField: (dataIndexConfigs: {
1869
+ setCurrentRowTargetField: (dataIndexConfigs: {
1870
1870
  name: EditableTableProDataIndex;
1871
1871
  value?: TAny;
1872
1872
  }[]) => void;
1873
+ /** 设置当前行 children 数据 */
1874
+ setCurrentRowChildrenValue: (value?: TPlainObject[]) => void;
1873
1875
  /** 当前行父级数据 */
1874
1876
  parentItem: TPlainObject | null;
1875
1877
  /** 当前行表单 name */
@@ -1881,7 +1883,7 @@ export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title"
1881
1883
  title?: ReactElement | string;
1882
1884
  dataIndex?: EditableTableProDataIndex;
1883
1885
  /** Form.Item props */
1884
- formItemProps?: Omit<FormItemProps, "children" | "name">;
1886
+ formItemProps?: Omit<FormItemWrapperProps, "children" | "name"> | ((value: TAny, record: TPlainObject, index: number, operation: EditableTableProOperation) => Omit<FormItemWrapperProps, "children" | "name">);
1885
1887
  /**
1886
1888
  * 通过 operation.editable 来判断渲染结构
1887
1889
  * ```
@@ -1896,7 +1898,7 @@ export type EditableTableProColumnItem = Omit<ColumnsType[0], "render" | "title"
1896
1898
  */
1897
1899
  render?: (value: TAny, record: TPlainObject, index: number, operation: EditableTableProOperation) => ReactElement;
1898
1900
  /** 是否可编辑 */
1899
- editable: boolean | ((record: TPlainObject, index: number) => boolean);
1901
+ editable?: boolean | ((record: TPlainObject, index: number) => boolean);
1900
1902
  /**
1901
1903
  * 会在 title 之后展示一个 icon
1902
1904
  * ```
@@ -1962,7 +1964,7 @@ export type EditableTableProProps = {
1962
1964
  * 1. 必须在外部包裹Form组件
1963
1965
  * 2. 表格数据源数组中必须存在唯一值字段,通过uidFieldKey配置
1964
1966
  * 3. 可嵌套编辑,数据嵌套的节点名称可通过 childrenColumnName设置,默认:children
1965
- * 4. 行内需要联动逻辑可使用 column.render.operation.changeCurrentRowTargetField 方法
1967
+ * 4. 行内需要联动逻辑可使用 column.render.operation.setCurrentRowTargetField 方法
1966
1968
  * 5. 在多级编辑中,可通过 column.render.operation.level 判断当前行数据层级
1967
1969
  * 6. 不存在多级的情况下,可使用DragEditableTablePro组件实现拖拽排序
1968
1970
  * 7. 存在多级的情况下,可通过 column.render.operation.move 方法实现同一级内移动
@@ -3086,6 +3088,28 @@ export declare const fbaUtils: {
3086
3088
  getPermissionList: () => string[];
3087
3089
  attachPropertiesToComponent: typeof attachPropertiesToComponent;
3088
3090
  getModelKey: () => string;
3091
+ /**
3092
+ * 手动触发Antd Form 的 onValuesChange
3093
+ * ```
3094
+ * 1. 正常在通过 form.setFieldsValue 不会触发onValuesChange
3095
+ * 2. 需要触发可调用此方法
3096
+ * ```
3097
+ */
3098
+ triggerFormValuesChange: (form: FormInstance, changeList: {
3099
+ name: string | number | Array<string | number>;
3100
+ value: TAny;
3101
+ }[]) => void;
3102
+ /**
3103
+ * 操作Antd Form
3104
+ * ```
3105
+ * 1. 通过 form.setFields 修改属性值
3106
+ * 2. 触发 Form 的 onValuesChange
3107
+ * ```
3108
+ */
3109
+ setFormFieldsAndTriggerValuesChange: (form: FormInstance, changeList: {
3110
+ name: string | number | Array<string | number>;
3111
+ value: TAny;
3112
+ }[]) => void;
3089
3113
  };
3090
3114
  export type FileExportProps = {
3091
3115
  /** 触发节点 */
@@ -5121,6 +5145,11 @@ export type TextOverflowProps = {
5121
5145
  maxWidth?: number;
5122
5146
  /** 最大显示字数 */
5123
5147
  maxLength?: number;
5148
+ /**
5149
+ * 关闭tooltip功能
5150
+ * 文字超出后,鼠标移入,不展示全部文字
5151
+ */
5152
+ hideTip?: boolean;
5124
5153
  onClick?: (e: any) => void;
5125
5154
  };
5126
5155
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatbiz/antd",
3
- "version": "4.5.20",
3
+ "version": "4.5.21",
4
4
  "description": "flat-biz ui components",
5
5
  "main": "index.js",
6
6
  "typings": "index.d.ts",