tntd 2.0.20 → 2.0.23

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.
Files changed (40) hide show
  1. package/es/locale-provider/index.js +5 -0
  2. package/es/locale-provider/index.js.map +1 -1
  3. package/es/table/table.js +1 -4
  4. package/es/table/table.js.map +1 -1
  5. package/es/table/table.less +0 -7
  6. package/es/tntd-form/TntdForm/components/Item.js +24 -9
  7. package/es/tntd-form/TntdForm/components/Item.js.map +1 -1
  8. package/es/tntd-form/TntdForm/components/ItemComp.js +61 -24
  9. package/es/tntd-form/TntdForm/components/ItemComp.js.map +1 -1
  10. package/es/tntd-form/TntdForm/components/List.js +35 -8
  11. package/es/tntd-form/TntdForm/components/List.js.map +1 -1
  12. package/es/tntd-form/TntdForm/index.js +9 -6
  13. package/es/tntd-form/TntdForm/index.js.map +1 -1
  14. package/es/tntd-form/TntdForm/interface.js.map +1 -1
  15. package/es/tntd-second-page/index.less +2 -2
  16. package/lib/locale-provider/index.d.ts.map +1 -1
  17. package/lib/locale-provider/index.js +5 -0
  18. package/lib/locale-provider/index.js.map +1 -1
  19. package/lib/table/table.d.ts +1 -2
  20. package/lib/table/table.d.ts.map +1 -1
  21. package/lib/table/table.js +2 -4
  22. package/lib/table/table.js.map +1 -1
  23. package/lib/table/table.less +0 -7
  24. package/lib/tntd-form/TntdForm/components/Item.d.ts.map +1 -1
  25. package/lib/tntd-form/TntdForm/components/Item.js +24 -9
  26. package/lib/tntd-form/TntdForm/components/Item.js.map +1 -1
  27. package/lib/tntd-form/TntdForm/components/ItemComp.d.ts.map +1 -1
  28. package/lib/tntd-form/TntdForm/components/ItemComp.js +70 -24
  29. package/lib/tntd-form/TntdForm/components/ItemComp.js.map +1 -1
  30. package/lib/tntd-form/TntdForm/components/List.d.ts.map +1 -1
  31. package/lib/tntd-form/TntdForm/components/List.js +36 -9
  32. package/lib/tntd-form/TntdForm/components/List.js.map +1 -1
  33. package/lib/tntd-form/TntdForm/index.d.ts.map +1 -1
  34. package/lib/tntd-form/TntdForm/index.js +15 -13
  35. package/lib/tntd-form/TntdForm/index.js.map +1 -1
  36. package/lib/tntd-form/TntdForm/interface.d.ts +10 -8
  37. package/lib/tntd-form/TntdForm/interface.d.ts.map +1 -1
  38. package/lib/tntd-form/TntdForm/interface.js.map +1 -1
  39. package/lib/tntd-second-page/index.less +2 -2
  40. package/package.json +1 -1
@@ -1,4 +1,9 @@
1
1
  import LocaleProvider from 'antd/es/locale-provider';
2
+ import { changeConfirmLocale } from 'antd/es/modal/locale';
3
+ // https://github.com/ant-design/ant-design/pull/29570/files
4
+ LocaleProvider.prototype.componentWillUnmount = function () {
5
+ changeConfirmLocale(this.props.locale && this.props.locale.Modal);
6
+ };
2
7
  import 'antd/es/locale-provider/style';
3
8
  export * from 'antd/es/locale-provider';
4
9
  export default LocaleProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,yBAAyB,CAAA;AAEpD,OAAO,+BAA+B,CAAA;AAEtC,cAAc,yBAAyB,CAAA;AAEvC,eAAe,cAAc,CAAA","sourcesContent":["import LocaleProvider from 'antd/es/locale-provider'\n\nimport 'antd/es/locale-provider/style'\n\nexport * from 'antd/es/locale-provider'\n\nexport default LocaleProvider\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,yBAAyB,CAAA;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE1D,4DAA4D;AAC5D,cAAc,CAAC,SAAS,CAAC,oBAAoB,GAAG;IAC9C,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACnE,CAAC,CAAA;AAED,OAAO,+BAA+B,CAAA;AAEtC,cAAc,yBAAyB,CAAA;AAEvC,eAAe,cAAc,CAAA","sourcesContent":["import LocaleProvider from 'antd/es/locale-provider'\n\nimport { changeConfirmLocale } from 'antd/es/modal/locale'\n\n// https://github.com/ant-design/ant-design/pull/29570/files\nLocaleProvider.prototype.componentWillUnmount = function () {\n changeConfirmLocale(this.props.locale && this.props.locale.Modal)\n}\n\nimport 'antd/es/locale-provider/style'\n\nexport * from 'antd/es/locale-provider'\n\nexport default LocaleProvider\n"]}
package/es/table/table.js CHANGED
@@ -26,13 +26,12 @@ export const Table = _a => {
26
26
  storageKey,
27
27
  columns,
28
28
  children,
29
- showCellBorders = false,
30
29
  pagination = {
31
30
  showTotal: total => `共 ${total} 条记录`
32
31
  },
33
32
  enableToolbar = false
34
33
  } = _a,
35
- rest = __rest(_a, ["className", "locale", "bordered", "refresh", "size", "storageKey", "columns", "children", "showCellBorders", "pagination", "enableToolbar"]);
34
+ rest = __rest(_a, ["className", "locale", "bordered", "refresh", "size", "storageKey", "columns", "children", "pagination", "enableToolbar"]);
36
35
  const tableContainer = useRef(null);
37
36
  // const [innerSize, setInnerSize] = useLocalStorage<TableProps<T>['size']>(
38
37
  // TABLE_SIZE_STORAGE_KEY,
@@ -71,9 +70,7 @@ export const Table = _a => {
71
70
  return React.createElement(AntdTable, Object.assign({
72
71
  className: classNames(prefixCls, {
73
72
  [`${prefixCls}-borderless`]: !bordered,
74
- [`${prefixCls}-hide-cell-borders`]: !showCellBorders,
75
73
  [`${prefixCls}-size-small`]: size === 'small',
76
- [`${prefixCls}-size-middle`]: size === 'middle',
77
74
  [`${prefixCls}-size-middle`]: size === 'middle'
78
75
  }, className),
79
76
  locale: locale,
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table/table.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ConfigConsumer } from 'antd/es/config-provider'\nimport LocaleReceiver from 'antd/es/locale-provider/LocaleReceiver'\nimport type { TableProps as AntdTableProps } from 'antd/es/table'\nimport { default as AntdTable } from 'antd/es/table'\nimport Column from 'antd/es/table/Column'\nimport ColumnGroup from 'antd/es/table/ColumnGroup'\nimport classNames from 'classnames'\nimport React, { useMemo, useRef } from 'react'\n\nimport { TableContext } from './context'\nimport { useColumnSetting } from './hooks'\nimport { normalizeColumns } from './utils'\n\nexport type TableProps<T> = Omit<AntdTableProps<T>, 'locale'> & {\n storageKey?: string\n enableToolbar?: boolean\n showCellBorders?: boolean\n locale?: AntdTableProps<T>['locale'] & {\n loadingDescription?: string\n emptyText?: string\n }\n refresh?(): void\n}\n\nexport const Table = <T,>({\n className,\n locale,\n bordered,\n refresh,\n size,\n storageKey,\n columns,\n children,\n showCellBorders = false,\n pagination = {\n showTotal: (total) => `共 ${total} 条记录`,\n },\n enableToolbar = false,\n ...rest\n}: TableProps<T>) => {\n const tableContainer = useRef<HTMLDivElement>(null)\n // const [innerSize, setInnerSize] = useLocalStorage<TableProps<T>['size']>(\n // TABLE_SIZE_STORAGE_KEY,\n // 'default'\n // )\n const normalizedColumns = useMemo(\n () => columns || normalizeColumns<T>(children as React.ReactChildren),\n [children, columns]\n )\n const [displayColumns, columnSetting, setColumnSetting] = useColumnSetting(\n normalizedColumns,\n storageKey\n )\n\n /**\n * update the innerSize when props size changes\n */\n // useEffect(() => {\n // if (size) {\n // setInnerSize(size)\n // }\n // }, [setInnerSize, size])\n\n return (\n <TableContext.Provider\n value={{\n // size: innerSize,\n tableContainer,\n columnSetting,\n refresh,\n // setSize: setInnerSize,\n setColumnSetting,\n }}\n >\n <ConfigConsumer>\n {({ getPrefixCls }) => {\n const prefixCls = getPrefixCls('table')\n\n return (\n <div ref={tableContainer}>\n <LocaleReceiver componentName=\"Table\" defaultLocale={locale}>\n {(localeObject) => {\n const locale = localeObject as Record<string, string>\n\n return (\n <AntdTable\n className={classNames(\n prefixCls,\n {\n [`${prefixCls}-borderless`]: !bordered,\n [`${prefixCls}-hide-cell-borders`]: !showCellBorders,\n [`${prefixCls}-size-small`]: size === 'small',\n [`${prefixCls}-size-middle`]: size === 'middle',\n [`${prefixCls}-size-middle`]: size === 'middle',\n },\n className\n )}\n locale={locale}\n bordered={bordered}\n size={size}\n columns={displayColumns}\n pagination={pagination}\n {...rest}\n />\n )\n }}\n </LocaleReceiver>\n </div>\n )\n }}\n </ConfigConsumer>\n </TableContext.Provider>\n )\n}\n\nTable.Column = Column\nTable.ColumnGroup = ColumnGroup\nTable.displayName = 'Table'\n"]}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/table/table.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,cAAc,MAAM,wCAAwC,CAAA;AAEnE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,WAAW,MAAM,2BAA2B,CAAA;AACnD,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAY1C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAK,EAcV,EAAE,EAAE;QAdM,EACxB,SAAS,EACT,MAAM,EACN,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,GAAG;QACX,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM;KACvC,EACD,aAAa,GAAG,KAAK,OAEP,EADX,IAAI,cAbiB,0HAczB,CADQ;IAEP,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACnD,4EAA4E;IAC5E,4BAA4B;IAC5B,cAAc;IACd,IAAI;IACJ,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,OAAO,IAAI,gBAAgB,CAAI,QAA+B,CAAC,EACrE,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAA;IACD,MAAM,CAAC,cAAc,EAAE,aAAa,EAAE,gBAAgB,CAAC,GAAG,gBAAgB,CACxE,iBAAiB,EACjB,UAAU,CACX,CAAA;IAED;;OAEG;IACH,oBAAoB;IACpB,gBAAgB;IAChB,yBAAyB;IACzB,MAAM;IACN,2BAA2B;IAE3B,OAAO,CACL,oBAAC,YAAY,CAAC,QAAQ,IACpB,KAAK,EAAE;YACL,mBAAmB;YACnB,cAAc;YACd,aAAa;YACb,OAAO;YACP,yBAAyB;YACzB,gBAAgB;SACjB;QAED,oBAAC,cAAc,QACZ,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;YACpB,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YAEvC,OAAO,CACL,6BAAK,GAAG,EAAE,cAAc;gBACtB,oBAAC,cAAc,IAAC,aAAa,EAAC,OAAO,EAAC,aAAa,EAAE,MAAM,IACxD,CAAC,YAAY,EAAE,EAAE;oBAChB,MAAM,MAAM,GAAG,YAAsC,CAAA;oBAErD,OAAO,CACL,oBAAC,SAAS,kBACR,SAAS,EAAE,UAAU,CACnB,SAAS,EACT;4BACE,CAAC,GAAG,SAAS,aAAa,CAAC,EAAE,CAAC,QAAQ;4BACtC,CAAC,GAAG,SAAS,aAAa,CAAC,EAAE,IAAI,KAAK,OAAO;4BAC7C,CAAC,GAAG,SAAS,cAAc,CAAC,EAAE,IAAI,KAAK,QAAQ;yBAChD,EACD,SAAS,CACV,EACD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,UAAU,IAClB,IAAI,EACR,CACH,CAAA;gBACH,CAAC,CACc,CACb,CACP,CAAA;QACH,CAAC,CACc,CACK,CACzB,CAAA;AACH,CAAC,CAAA;AAED,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;AACrB,KAAK,CAAC,WAAW,GAAG,WAAW,CAAA;AAC/B,KAAK,CAAC,WAAW,GAAG,OAAO,CAAA","sourcesContent":["import { ConfigConsumer } from 'antd/es/config-provider'\nimport LocaleReceiver from 'antd/es/locale-provider/LocaleReceiver'\nimport type { TableProps as AntdTableProps } from 'antd/es/table'\nimport { default as AntdTable } from 'antd/es/table'\nimport Column from 'antd/es/table/Column'\nimport ColumnGroup from 'antd/es/table/ColumnGroup'\nimport classNames from 'classnames'\nimport React, { useMemo, useRef } from 'react'\n\nimport { TableContext } from './context'\nimport { useColumnSetting } from './hooks'\nimport { normalizeColumns } from './utils'\n\nexport type TableProps<T> = Omit<AntdTableProps<T>, 'locale'> & {\n storageKey?: string\n enableToolbar?: boolean\n locale?: AntdTableProps<T>['locale'] & {\n loadingDescription?: string\n emptyText?: string\n }\n refresh?(): void\n}\n\nexport const Table = <T,>({\n className,\n locale,\n bordered,\n refresh,\n size,\n storageKey,\n columns,\n children,\n pagination = {\n showTotal: (total) => `共 ${total} 条记录`,\n },\n enableToolbar = false,\n ...rest\n}: TableProps<T>) => {\n const tableContainer = useRef<HTMLDivElement>(null)\n // const [innerSize, setInnerSize] = useLocalStorage<TableProps<T>['size']>(\n // TABLE_SIZE_STORAGE_KEY,\n // 'default'\n // )\n const normalizedColumns = useMemo(\n () => columns || normalizeColumns<T>(children as React.ReactChildren),\n [children, columns]\n )\n const [displayColumns, columnSetting, setColumnSetting] = useColumnSetting(\n normalizedColumns,\n storageKey\n )\n\n /**\n * update the innerSize when props size changes\n */\n // useEffect(() => {\n // if (size) {\n // setInnerSize(size)\n // }\n // }, [setInnerSize, size])\n\n return (\n <TableContext.Provider\n value={{\n // size: innerSize,\n tableContainer,\n columnSetting,\n refresh,\n // setSize: setInnerSize,\n setColumnSetting,\n }}\n >\n <ConfigConsumer>\n {({ getPrefixCls }) => {\n const prefixCls = getPrefixCls('table')\n\n return (\n <div ref={tableContainer}>\n <LocaleReceiver componentName=\"Table\" defaultLocale={locale}>\n {(localeObject) => {\n const locale = localeObject as Record<string, string>\n\n return (\n <AntdTable\n className={classNames(\n prefixCls,\n {\n [`${prefixCls}-borderless`]: !bordered,\n [`${prefixCls}-size-small`]: size === 'small',\n [`${prefixCls}-size-middle`]: size === 'middle',\n },\n className\n )}\n locale={locale}\n bordered={bordered}\n size={size}\n columns={displayColumns}\n pagination={pagination}\n {...rest}\n />\n )\n }}\n </LocaleReceiver>\n </div>\n )\n }}\n </ConfigConsumer>\n </TableContext.Provider>\n )\n}\n\nTable.Column = Column\nTable.ColumnGroup = ColumnGroup\nTable.displayName = 'Table'\n"]}
@@ -19,13 +19,6 @@
19
19
  }
20
20
  }
21
21
 
22
- &.@{table-prefix-cls}-hide-cell-borders {
23
- .@{table-prefix-cls}-thead > tr > th:not(:last-child),
24
- .@{table-prefix-cls}-tbody > tr > td:not(:last-child) {
25
- border-right: none;
26
- }
27
- }
28
-
29
22
  // middle table override
30
23
  &.@{table-prefix-cls}-size-middle {
31
24
  .@{table-prefix-cls}-pagination.@{pagination-prefix-cls} {
@@ -1,13 +1,15 @@
1
+ import _isEqual from "lodash/isEqual";
1
2
  /*
2
3
  * @Descripttion: TntdForm.Item
3
4
  * @Author: 郑泳健
4
5
  * @Date: 2023-02-22 23:25:24
5
6
  * @LastEditors: 郑泳健
6
- * @LastEditTime: 2023-03-17 17:17:00
7
+ * @LastEditTime: 2023-04-06 17:46:57
7
8
  */
8
- import React, { useContext, memo } from 'react';
9
+ import React, { memo, useRef, useContext, useEffect } from 'react';
9
10
  import ItemComp from './ItemComp';
10
11
  import { FormContext } from '../store';
12
+ import { getNames } from '../utils';
11
13
  const Item = ({
12
14
  name,
13
15
  children,
@@ -20,21 +22,34 @@ const Item = ({
20
22
  const {
21
23
  form,
22
24
  initialValues,
23
- currentChangeKeys,
24
- setCurrentChangeKeys
25
+ updateRefs,
26
+ compsRefs
25
27
  } = useContext(FormContext);
28
+ const ref = useRef();
29
+ useEffect(() => {
30
+ compsRefs.current[getNames(name).join('.')] = () => {
31
+ var _a, _b;
32
+ (_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.onRefresh) === null || _b === void 0 ? void 0 : _b.call(_a);
33
+ };
34
+ }, [compsRefs, name]);
26
35
  return React.createElement(ItemComp, Object.assign({}, {
36
+ form,
37
+ initialValues,
38
+ updateRefs,
39
+ compsRefs,
27
40
  style,
28
41
  rules,
29
42
  name,
43
+ ref,
30
44
  children,
31
- form,
32
- currentChangeKeys,
33
- setCurrentChangeKeys,
34
- initialValues,
35
45
  initialValue,
36
46
  shouldUpdate,
37
47
  dependencies
38
48
  }));
39
49
  };
40
- export default memo(Item);
50
+ export default memo(Item, (nextProps, prevProps) => {
51
+ if (_isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {
52
+ return true;
53
+ }
54
+ return false;
55
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/Item.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,IAAI,GAAwB,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,GACpE,UAAU,CAAe,WAAW,CAAC,CAAA;IAEvC,OAAO,CACL,oBAAC,QAAQ,oBACH;QACF,KAAK;QACL,KAAK;QACL,IAAI;QACJ,QAAQ;QACR,IAAI;QACJ,iBAAiB;QACjB,oBAAoB;QACpB,aAAa;QACb,YAAY;QACZ,YAAY;QACZ,YAAY;KACb,EACD,CACH,CAAA;AACH,CAAC,CAAA;AAED,eAAe,IAAI,CAAC,IAAI,CAAC,CAAA","sourcesContent":["/*\n * @Descripttion: TntdForm.Item\n * @Author: 郑泳健\n * @Date: 2023-02-22 23:25:24\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-03-17 17:17:00\n */\n\nimport React, { useContext, memo } from 'react'\nimport ItemComp from './ItemComp'\nimport { FormContext } from '../store'\nimport type { IFormItem, IFormContext } from '../interface'\n\nconst Item: React.FC<IFormItem> = ({\n name,\n children,\n style,\n rules,\n shouldUpdate,\n initialValue,\n dependencies,\n}) => {\n const { form, initialValues, currentChangeKeys, setCurrentChangeKeys } =\n useContext<IFormContext>(FormContext)\n\n return (\n <ItemComp\n {...{\n style,\n rules,\n name,\n children,\n form,\n currentChangeKeys,\n setCurrentChangeKeys,\n initialValues,\n initialValue,\n shouldUpdate,\n dependencies,\n }}\n />\n )\n}\n\nexport default memo(Item)\n"]}
1
+ {"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/Item.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,MAAM,IAAI,GAAwB,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,UAAU,CAAe,WAAW,CAAC,CAAA;IAC5F,MAAM,GAAG,GAAG,MAAM,EAAoB,CAAA;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;;YACjD,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,kDAAI,CAAA;QAC5B,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IAErB,OAAO,CACL,oBAAC,QAAQ,oBACH;QACF,IAAI;QACJ,aAAa;QACb,UAAU;QACV,SAAS;QACT,KAAK;QACL,KAAK;QACL,IAAI;QACJ,GAAG;QACH,QAAQ;QACR,YAAY;QACZ,YAAY;QACZ,YAAY;KACb,EACD,CACH,CAAA;AACH,CAAC,CAAA;AAED,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IACjD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;QAC/D,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA","sourcesContent":["/*\n * @Descripttion: TntdForm.Item\n * @Author: 郑泳健\n * @Date: 2023-02-22 23:25:24\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 17:46:57\n */\n\nimport React, { memo, useRef, useContext, useEffect } from 'react'\nimport { isEqual } from 'lodash'\nimport ItemComp from './ItemComp'\nimport { FormContext } from '../store'\nimport type { IFormItem, IFormContext, IChildrenCompFun } from '../interface'\nimport { getNames } from '../utils'\n\nconst Item: React.FC<IFormItem> = ({\n name,\n children,\n style,\n rules,\n shouldUpdate,\n initialValue,\n dependencies,\n}) => {\n const { form, initialValues, updateRefs, compsRefs } = useContext<IFormContext>(FormContext)\n const ref = useRef<IChildrenCompFun>()\n\n useEffect(() => {\n compsRefs.current[getNames(name).join('.')] = () => {\n ref.current?.onRefresh?.()\n }\n }, [compsRefs, name])\n\n return (\n <ItemComp\n {...{\n form,\n initialValues,\n updateRefs,\n compsRefs,\n style,\n rules,\n name,\n ref,\n children,\n initialValue,\n shouldUpdate,\n dependencies,\n }}\n />\n )\n}\n\nexport default memo(Item, (nextProps, prevProps) => {\n if (isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {\n return true\n }\n return false\n})\n"]}
@@ -1,25 +1,68 @@
1
- import _isEqual from "lodash/isEqual";
2
1
  /*
3
2
  * @Descripttion: TntdForm.Item进行性能优化
4
3
  * @Author: 郑泳健
5
4
  * @Date: 2023-02-23 12:47:28
6
5
  * @LastEditors: 郑泳健
7
- * @LastEditTime: 2023-03-17 18:27:03
6
+ * @LastEditTime: 2023-04-06 17:45:35
8
7
  */
9
- import React, { useState, memo, useEffect } from 'react';
8
+ import React, { useState, memo, useEffect, useImperativeHandle } from 'react';
10
9
  import { getNames, handleCheckItem, getInitValue } from '../utils';
11
- const ItemComp = ({
12
- form,
10
+ const ItemComp = React.forwardRef(({
13
11
  name,
14
12
  children,
15
13
  style,
16
- initialValues,
17
14
  initialValue,
18
15
  rules,
19
- setCurrentChangeKeys
20
- }) => {
16
+ shouldUpdate,
17
+ dependencies,
18
+ form,
19
+ updateRefs,
20
+ initialValues,
21
+ compsRefs
22
+ }, ref) => {
21
23
  const [value, setValue] = useState(undefined);
22
24
  const [errorMsg, setErrorMsg] = useState(undefined);
25
+ const [refresh, setRefresh] = useState(false);
26
+ useImperativeHandle(ref, () => ({
27
+ onRefresh: () => {
28
+ setRefresh(!refresh);
29
+ }
30
+ }));
31
+ /** 根据shouldUpdate 和 dependencies收集修改某个字段后需要同步更新的字段 */
32
+ useEffect(() => {
33
+ var _a;
34
+ const nameStr = (_a = getNames(name)) === null || _a === void 0 ? void 0 : _a.join('.');
35
+ if (shouldUpdate) {
36
+ updateRefs.current.shouldUpdateList.push(nameStr);
37
+ }
38
+ if (Array.isArray(dependencies)) {
39
+ const arr = dependencies.map(i => getNames(i).join('.'));
40
+ if (Array.isArray(arr)) {
41
+ arr.forEach(i => {
42
+ if (Array.isArray(updateRefs.current.dependencies[i])) {
43
+ updateRefs.current.dependencies[i] = [...updateRefs.current.dependencies[i], getNames(name).join('.')];
44
+ } else {
45
+ updateRefs.current.dependencies[i] = [getNames(name).join('.')];
46
+ }
47
+ });
48
+ }
49
+ }
50
+ }, [shouldUpdate, dependencies, name, updateRefs]);
51
+ const updateRender = () => {
52
+ if (Array.isArray(updateRefs.current.shouldUpdateList)) {
53
+ updateRefs.current.shouldUpdateList.forEach(i => {
54
+ var _a, _b;
55
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
56
+ });
57
+ }
58
+ const list = updateRefs.current.dependencies[getNames(name).join('.')];
59
+ if (Array.isArray(list)) {
60
+ list.forEach(i => {
61
+ var _a, _b;
62
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
63
+ });
64
+ }
65
+ };
23
66
  /**
24
67
  * 动态修改form内部的值,为啥不在useEffect里面处理的原因是子组件的useEffect会比父组件useEffect先执行,需要保证在子组件useEffect监听value变化的时候获取到的formData永远是最新的
25
68
  * @param name
@@ -27,7 +70,7 @@ const ItemComp = ({
27
70
  * @returns
28
71
  */
29
72
  const generateFormData = (name, value) => {
30
- if (!name || !form) return;
73
+ if (!name || !form || typeof name !== 'object') return;
31
74
  const [str, ...rest] = name;
32
75
  rest.forEach(i => {
33
76
  if (form.formData[str]) {
@@ -56,7 +99,7 @@ const ItemComp = ({
56
99
  // 为了给最外层提供方法去校验,比如保存的时候.
57
100
  // 这里依赖不要添加value,因为子组件的useEffect会比父组件useEffect先执行,如果添加了依赖value会导致子组件获取到的formData永远是上一次的
58
101
  useEffect(() => {
59
- if (!name || !form) return;
102
+ if (!name || !form || typeof name !== 'object') return;
60
103
  const [str, ...rest] = name;
61
104
  const addItem = {
62
105
  setItemValue: (_val, callback) => {
@@ -64,6 +107,7 @@ const ItemComp = ({
64
107
  setValue(_val);
65
108
  setErrorMsg(error);
66
109
  callback === null || callback === void 0 ? void 0 : callback();
110
+ updateRender();
67
111
  },
68
112
  checkItem: () => {
69
113
  const error = handleCheckItem(value, rules);
@@ -88,23 +132,21 @@ const ItemComp = ({
88
132
  if (initialValue) {
89
133
  setValue(initialValue);
90
134
  generateFormData(name, initialValue);
135
+ updateRender();
91
136
  }
92
137
  }, [initialValue]);
93
138
  // 初始化设置默认值,
94
139
  useEffect(() => {
95
- var _a;
96
140
  const initValue = getInitValue(initialValues, name);
97
141
  // @ts-ignore
98
142
  const _value = ['', null, undefined].includes(initValue) ? initialValue : initValue;
99
143
  setValue(_value);
100
144
  generateFormData(name, _value);
101
- if (name) {
102
- setCurrentChangeKeys([(_a = getNames(name)) === null || _a === void 0 ? void 0 : _a.join('.')]);
103
- }
145
+ updateRender();
104
146
  }, []);
105
147
  // 默认方法
106
148
  const handleChange = e => {
107
- var _a, _b;
149
+ var _a;
108
150
  let val;
109
151
  if (typeof e === 'object') {
110
152
  val = (_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.value;
@@ -115,9 +157,7 @@ const ItemComp = ({
115
157
  generateFormData(name, val);
116
158
  const error = handleCheckItem(val, rules);
117
159
  setErrorMsg(error);
118
- if (name) {
119
- setCurrentChangeKeys([(_b = getNames(name)) === null || _b === void 0 ? void 0 : _b.join('.')]);
120
- }
160
+ updateRender();
121
161
  };
122
162
  return React.createElement("div", {
123
163
  className: errorMsg ? 'has-error custom-form-item-wrapper' : 'custom-form-item-wrapper',
@@ -136,14 +176,11 @@ const ItemComp = ({
136
176
  }), errorMsg && React.createElement("div", {
137
177
  className: "ant-form-explain ant-form-item-explain-error"
138
178
  }, errorMsg));
139
- };
179
+ });
140
180
  function arePropsEqual(prevProps, nextProps) {
141
- if (Array.isArray(nextProps.currentChangeKeys) && nextProps.currentChangeKeys.length && _isEqual(prevProps.initialValues, nextProps.initialValues) && !nextProps.currentChangeKeys.includes(getNames(nextProps.name).join('.')) && !nextProps.shouldUpdate && Array.isArray(nextProps.dependencies) && nextProps.dependencies.every(i => {
142
- var _a;
143
- return !((_a = nextProps.currentChangeKeys) === null || _a === void 0 ? void 0 : _a.includes(getNames(i).join('.')));
144
- })) {
181
+ if (!nextProps.shouldUpdate && Array.isArray(nextProps.dependencies)) {
145
182
  return true;
146
183
  }
147
184
  return false;
148
185
  }
149
- export default memo(ItemComp, arePropsEqual);
186
+ export default memo(ItemComp);
@@ -1 +1 @@
1
- {"version":3,"file":"ItemComp.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/ItemComp.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGlE,MAAM,QAAQ,GAAwB,CAAC,EACrC,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,EACb,YAAY,EACZ,KAAK,EACL,oBAAoB,GACrB,EAAE,EAAE;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,SAAS,CAAC,CAAA;IAChE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAA;IAEvE;;;;;OAKG;IACH,MAAM,gBAAgB,GAAG,CAAC,IAAuB,EAAE,KAAwB,EAAE,EAAE;QAC7E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;QAE3B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;gBACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,EAAE;oBACrC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;oBAC3C,WAAW,CAAC,KAAK,CAAC,CAAA;oBAClB,OAAO,KAAK,CAAA;gBACd,CAAC,CAAA;aACF;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACnB,CAAC,CAAC,CAAC,EAAE;wBACH,KAAK;wBACL,SAAS,EAAE,GAAG,EAAE;4BACd,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;4BAC3C,WAAW,CAAC,KAAK,CAAC,CAAA;4BAClB,OAAO,KAAK,CAAA;wBACd,CAAC;wBACD,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;wBACtB,QAAQ,EAAE,SAAS;qBACpB;iBACF,CAAA;aACF;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,yBAAyB;IACzB,uFAAuF;IACvF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAM;QAC1B,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;QAE3B,MAAM,OAAO,GAAkB;YAC7B,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBAC1C,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACd,WAAW,CAAC,KAAK,CAAC,CAAA;gBAClB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAA;YACd,CAAC;YACD,SAAS,EAAE,GAAG,EAAE;gBACd,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAC3C,WAAW,CAAC,KAAK,CAAC,CAAA;gBAClB,OAAO,KAAK,CAAA;YACd,CAAC;YACD,KAAK;YACL,QAAQ;SACT,CAAA;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;aAChC;iBAAM;gBACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;oBACnB,CAAC,CAAC,CAAC,EAAE,OAAO;iBACb,CAAA;aACF;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;IAEjC,mCAAmC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,EAAE;YAChB,QAAQ,CAAC,YAAY,CAAC,CAAA;YACtB,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;SACrC;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,YAAY;IACZ,SAAS,CAAC,GAAG,EAAE;;QACb,MAAM,SAAS,GAAG,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QACnD,aAAa;QACb,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAA;QAEnF,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAC9B,IAAI,IAAI,EAAE;YACR,oBAAoB,CAAC,CAAC,MAAA,QAAQ,CAAC,IAAI,CAAC,0CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SAClD;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO;IACP,MAAM,YAAY,GAAG,CACnB,CAIa,EACb,EAAE;;QACF,IAAI,GAAG,CAAA;QACP,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;YACzB,GAAG,GAAG,MAAC,CAAmF,aAAnF,CAAC,uBAAD,CAAC,CACJ,MAAM,0CAAE,KAAK,CAAA;SAClB;aAAM;YACL,GAAG,GAAG,CAAC,CAAA;SACR;QACD,QAAQ,CAAC,GAAG,CAAC,CAAA;QACb,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACzC,WAAW,CAAC,KAAK,CAAC,CAAA;QAClB,IAAI,IAAI,EAAE;YACR,oBAAoB,CAAC,CAAC,MAAA,QAAQ,CAAC,IAAI,CAAC,0CAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SAClD;IACH,CAAC,CAAA;IAED,OAAO,CACL,6BACE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,0BAA0B,EACvF,KAAK,EAAE,KAAK;QAEX,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;;YACtC,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;gBAC/B,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,kBAC7B,KAAK;oBACL,IAAI,EACJ,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAA,QAAQ,CAAC,IAAI,CAAC,0CAAE,IAAI,CAAC,GAAG,CAAC,IAClC,KAAK,CAAC,KAAK,EACd,CAAA;aACH;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;QACD,QAAQ,IAAI,6BAAK,SAAS,EAAC,8CAA8C,IAAE,QAAQ,CAAO,CACvF,CACP,CAAA;AACH,CAAC,CAAA;AAED,SAAS,aAAa,CAAC,SAAoB,EAAE,SAAoB;IAC/D,IACE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAC1C,SAAS,CAAC,iBAAiB,CAAC,MAAM;QAClC,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC;QACzD,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC,SAAS,CAAC,YAAY;QACvB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC;QACrC,SAAS,CAAC,YAAY,CAAC,KAAK,CAC1B,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,SAAS,CAAC,iBAAiB,0CAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAA,CACrE,EACD;QACA,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,eAAe,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA","sourcesContent":["/*\n * @Descripttion: TntdForm.Item进行性能优化\n * @Author: 郑泳健\n * @Date: 2023-02-23 12:47:28\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-03-17 18:27:03\n */\n\nimport React, { useState, memo, useEffect } from 'react'\nimport { isEqual } from 'lodash'\nimport { getNames, handleCheckItem, getInitValue } from '../utils'\nimport type { IFormItem, IFormItemData, TinitialValueType } from '../interface'\n\nconst ItemComp: React.FC<IFormItem> = ({\n form,\n name,\n children,\n style,\n initialValues,\n initialValue,\n rules,\n setCurrentChangeKeys,\n}) => {\n const [value, setValue] = useState<TinitialValueType>(undefined)\n const [errorMsg, setErrorMsg] = useState<string | undefined>(undefined)\n\n /**\n * 动态修改form内部的值,为啥不在useEffect里面处理的原因是子组件的useEffect会比父组件useEffect先执行,需要保证在子组件useEffect监听value变化的时候获取到的formData永远是最新的\n * @param name\n * @param value\n * @returns\n */\n const generateFormData = (name: string[] | string, value: TinitialValueType) => {\n if (!name || !form) return\n const [str, ...rest] = name\n\n rest.forEach((i) => {\n if (form.formData[str]) {\n form.formData[str][i].value = value\n form.formData[str][i].checkItem = () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n }\n } else {\n form.formData[str] = {\n [i]: {\n value,\n checkItem: () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n },\n setItemValue: () => {},\n errorMsg: undefined,\n },\n }\n }\n })\n }\n\n // 为了给最外层提供方法去校验,比如保存的时候.\n // 这里依赖不要添加value,因为子组件的useEffect会比父组件useEffect先执行,如果添加了依赖value会导致子组件获取到的formData永远是上一次的\n useEffect(() => {\n if (!name || !form) return\n const [str, ...rest] = name\n\n const addItem: IFormItemData = {\n setItemValue: (_val, callback) => {\n const error = handleCheckItem(_val, rules)\n setValue(_val)\n setErrorMsg(error)\n callback?.()\n },\n checkItem: () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n },\n value,\n errorMsg,\n }\n rest.forEach((i) => {\n if (form.formData[str]) {\n form.formData[str][i] = addItem\n } else {\n form.formData[str] = {\n [i]: addItem,\n }\n }\n })\n }, [rules, name, errorMsg, form])\n\n /** 这段代码不能删除,当增加/删除列的时候有些默认值需要更新 */\n useEffect(() => {\n if (initialValue) {\n setValue(initialValue)\n generateFormData(name, initialValue)\n }\n }, [initialValue])\n\n // 初始化设置默认值,\n useEffect(() => {\n const initValue = getInitValue(initialValues, name)\n // @ts-ignore\n const _value = ['', null, undefined].includes(initValue) ? initialValue : initValue\n\n setValue(_value)\n generateFormData(name, _value)\n if (name) {\n setCurrentChangeKeys([getNames(name)?.join('.')])\n }\n }, [])\n\n // 默认方法\n const handleChange = (\n e:\n | React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>\n | string\n | number\n | undefined\n ) => {\n let val\n if (typeof e === 'object') {\n val = (e as React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>)\n ?.target?.value\n } else {\n val = e\n }\n setValue(val)\n generateFormData(name, val)\n const error = handleCheckItem(val, rules)\n setErrorMsg(error)\n if (name) {\n setCurrentChangeKeys([getNames(name)?.join('.')])\n }\n }\n\n return (\n <div\n className={errorMsg ? 'has-error custom-form-item-wrapper' : 'custom-form-item-wrapper'}\n style={style}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n form,\n onChange: handleChange,\n 'data-key': getNames(name)?.join('.'),\n ...child.props,\n })\n }\n return null\n })}\n {errorMsg && <div className=\"ant-form-explain ant-form-item-explain-error\">{errorMsg}</div>}\n </div>\n )\n}\n\nfunction arePropsEqual(prevProps: IFormItem, nextProps: IFormItem) {\n if (\n Array.isArray(nextProps.currentChangeKeys) &&\n nextProps.currentChangeKeys.length &&\n isEqual(prevProps.initialValues, nextProps.initialValues) &&\n !nextProps.currentChangeKeys.includes(getNames(nextProps.name).join('.')) &&\n !nextProps.shouldUpdate &&\n Array.isArray(nextProps.dependencies) &&\n nextProps.dependencies.every(\n (i) => !nextProps.currentChangeKeys?.includes(getNames(i).join('.'))\n )\n ) {\n return true\n }\n return false\n}\n\nexport default memo(ItemComp, arePropsEqual)\n"]}
1
+ {"version":3,"file":"ItemComp.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/ItemComp.tsx"],"names":[],"mappings":"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","sourcesContent":["/*\n * @Descripttion: TntdForm.Item进行性能优化\n * @Author: 郑泳健\n * @Date: 2023-02-23 12:47:28\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 17:45:35\n */\n\nimport React, { useState, memo, useEffect, useImperativeHandle } from 'react'\nimport { getNames, handleCheckItem, getInitValue } from '../utils'\nimport type { IFormItem, IFormItemData, TinitialValueType, IChildrenCompFun } from '../interface'\n\nconst ItemComp: React.FC<IFormItem> = React.forwardRef<IChildrenCompFun, IFormItem>(\n (\n {\n name,\n children,\n style,\n initialValue,\n rules,\n shouldUpdate,\n dependencies,\n form,\n updateRefs,\n initialValues,\n compsRefs,\n },\n ref\n ) => {\n const [value, setValue] = useState<TinitialValueType>(undefined)\n const [errorMsg, setErrorMsg] = useState<string | undefined>(undefined)\n const [refresh, setRefresh] = useState<boolean>(false)\n\n useImperativeHandle(ref, () => ({\n onRefresh: () => {\n setRefresh(!refresh)\n },\n }))\n\n /** 根据shouldUpdate 和 dependencies收集修改某个字段后需要同步更新的字段 */\n useEffect(() => {\n const nameStr = getNames(name)?.join('.')\n if (shouldUpdate) {\n updateRefs.current.shouldUpdateList.push(nameStr)\n }\n\n if (Array.isArray(dependencies)) {\n const arr = dependencies.map((i) => getNames(i).join('.'))\n if (Array.isArray(arr)) {\n arr.forEach((i) => {\n if (Array.isArray(updateRefs.current.dependencies[i])) {\n updateRefs.current.dependencies[i] = [\n ...updateRefs.current.dependencies[i],\n getNames(name).join('.'),\n ]\n } else {\n updateRefs.current.dependencies[i] = [getNames(name).join('.')]\n }\n })\n }\n }\n }, [shouldUpdate, dependencies, name, updateRefs])\n\n const updateRender = () => {\n if (Array.isArray(updateRefs.current.shouldUpdateList)) {\n updateRefs.current.shouldUpdateList.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n const list = updateRefs.current.dependencies[getNames(name).join('.')]\n\n if (Array.isArray(list)) {\n list.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n }\n\n /**\n * 动态修改form内部的值,为啥不在useEffect里面处理的原因是子组件的useEffect会比父组件useEffect先执行,需要保证在子组件useEffect监听value变化的时候获取到的formData永远是最新的\n * @param name\n * @param value\n * @returns\n */\n const generateFormData = (name: string[] | string, value: TinitialValueType) => {\n if (!name || !form || typeof name !== 'object') return\n const [str, ...rest] = name\n\n rest.forEach((i) => {\n if (form.formData[str]) {\n form.formData[str][i].value = value\n form.formData[str][i].checkItem = () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n }\n } else {\n form.formData[str] = {\n [i]: {\n value,\n checkItem: () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n },\n setItemValue: () => {},\n errorMsg: undefined,\n },\n }\n }\n })\n }\n\n // 为了给最外层提供方法去校验,比如保存的时候.\n // 这里依赖不要添加value,因为子组件的useEffect会比父组件useEffect先执行,如果添加了依赖value会导致子组件获取到的formData永远是上一次的\n useEffect(() => {\n if (!name || !form || typeof name !== 'object') return\n const [str, ...rest] = name\n\n const addItem: IFormItemData = {\n setItemValue: (_val, callback) => {\n const error = handleCheckItem(_val, rules)\n setValue(_val)\n setErrorMsg(error)\n callback?.()\n updateRender()\n },\n checkItem: () => {\n const error = handleCheckItem(value, rules)\n setErrorMsg(error)\n return error\n },\n value,\n errorMsg,\n }\n rest.forEach((i) => {\n if (form.formData[str]) {\n form.formData[str][i] = addItem\n } else {\n form.formData[str] = {\n [i]: addItem,\n }\n }\n })\n }, [rules, name, errorMsg, form])\n\n /** 这段代码不能删除,当增加/删除列的时候有些默认值需要更新 */\n useEffect(() => {\n if (initialValue) {\n setValue(initialValue)\n generateFormData(name, initialValue)\n updateRender()\n }\n }, [initialValue])\n\n // 初始化设置默认值,\n useEffect(() => {\n const initValue = getInitValue(initialValues, name)\n // @ts-ignore\n const _value = ['', null, undefined].includes(initValue) ? initialValue : initValue\n\n setValue(_value)\n generateFormData(name, _value)\n updateRender()\n }, [])\n\n // 默认方法\n const handleChange = (\n e:\n | React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>\n | string\n | number\n | undefined\n ) => {\n let val\n if (typeof e === 'object') {\n val = (e as React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>)\n ?.target?.value\n } else {\n val = e\n }\n setValue(val)\n generateFormData(name, val)\n const error = handleCheckItem(val, rules)\n setErrorMsg(error)\n updateRender()\n }\n\n return (\n <div\n className={errorMsg ? 'has-error custom-form-item-wrapper' : 'custom-form-item-wrapper'}\n style={style}\n >\n {React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n value,\n form,\n onChange: handleChange,\n 'data-key': getNames(name)?.join('.'),\n ...child.props,\n })\n }\n return null\n })}\n {errorMsg && <div className=\"ant-form-explain ant-form-item-explain-error\">{errorMsg}</div>}\n </div>\n )\n }\n)\n\nfunction arePropsEqual(prevProps: IFormItem, nextProps: IFormItem) {\n if (!nextProps.shouldUpdate && Array.isArray(nextProps.dependencies)) {\n return true\n }\n\n return false\n}\n\nexport default memo(ItemComp)\n"]}
@@ -5,7 +5,7 @@ import _cloneDeep from "lodash/cloneDeep";
5
5
  * @Author: 郑泳健
6
6
  * @Date: 2023-03-06 18:42:08
7
7
  * @LastEditors: 郑泳健
8
- * @LastEditTime: 2023-03-17 18:47:05
8
+ * @LastEditTime: 2023-04-06 17:42:31
9
9
  */
10
10
  import React, { useState, useEffect, useRef, useContext, memo } from 'react';
11
11
  import { getNames } from '../utils';
@@ -17,19 +17,32 @@ const List = ({
17
17
  const maxRef = useRef(-1);
18
18
  const {
19
19
  form,
20
- initialValues
20
+ initialValues,
21
+ compsRefs,
22
+ updateRefs
21
23
  } = useContext(FormContext);
22
24
  const [dataLevel, setDataLevel] = useState([]);
23
- useEffect(() => {
24
- const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
25
- if (form && form.dataLevel) {
26
- form.dataLevel[key] = dataLevel;
25
+ /** 根据一开始记录的渲染shouldUpdate 和 dependencies组件 */
26
+ const updateRender = () => {
27
+ if (Array.isArray(updateRefs.current.shouldUpdateList)) {
28
+ updateRefs.current.shouldUpdateList.forEach(i => {
29
+ var _a, _b;
30
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
31
+ });
27
32
  }
28
- }, [form, dataLevel, name]);
33
+ const list = updateRefs.current.dependencies[getNames(name).join('.')];
34
+ if (Array.isArray(list)) {
35
+ list.forEach(i => {
36
+ var _a, _b;
37
+ (_b = (_a = compsRefs === null || compsRefs === void 0 ? void 0 : compsRefs.current) === null || _a === void 0 ? void 0 : _a[i]) === null || _b === void 0 ? void 0 : _b.call(_a);
38
+ });
39
+ }
40
+ };
29
41
  /** 根据默认数值自动生成dataLevel */
30
42
  useEffect(() => {
31
43
  let dataSource = initialValues;
32
44
  const attrs = getNames(name);
45
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
33
46
  for (const key of attrs) {
34
47
  dataSource = (dataSource === null || dataSource === void 0 ? void 0 : dataSource[key]) || [{}];
35
48
  }
@@ -42,11 +55,16 @@ const List = ({
42
55
  });
43
56
  setDataLevel(_level);
44
57
  maxRef.current = dataSource.length - 1;
58
+ if (form) {
59
+ form.dataLevel[key] = _level;
60
+ }
61
+ updateRender();
45
62
  }
46
- }, [initialValues, name]);
63
+ }, [form, initialValues, name]);
47
64
  /** 新增一列 */
48
65
  const handleAdd = index => {
49
66
  const tempDataLevel = _cloneDeep(dataLevel);
67
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
50
68
  maxRef.current++;
51
69
  const attrs = getNames(name);
52
70
  tempDataLevel.splice(index + 1, 0, {
@@ -54,12 +72,21 @@ const List = ({
54
72
  name: `${attrs === null || attrs === void 0 ? void 0 : attrs.join('.')}.${maxRef.current}`
55
73
  });
56
74
  setDataLevel(tempDataLevel);
75
+ if (form) {
76
+ form.dataLevel[key] = tempDataLevel;
77
+ }
78
+ updateRender();
57
79
  };
58
80
  /** 删除一列 */
59
81
  const handleDel = index => {
60
82
  const temp = _cloneDeep(dataLevel);
83
+ const key = Array.isArray(name) ? name === null || name === void 0 ? void 0 : name[0] : name;
61
84
  temp.splice(index, 1);
62
85
  setDataLevel(temp);
86
+ if (form) {
87
+ form.dataLevel[key] = temp;
88
+ }
89
+ updateRender();
63
90
  };
64
91
  return React.createElement(React.Fragment, null, children === null || children === void 0 ? void 0 : children(dataLevel, {
65
92
  add: handleAdd,
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/List.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,IAAI,GAA6B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,UAAU,CAAe,WAAW,CAAC,CAAA;IACrE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,GAAG,GAAW,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC1D,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;SAChC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IAE3B,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,GAAG,aAAa,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAE5B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACvB,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,GAAG,CAAC,KAAI,CAAC,EAAE,CAAC,CAAA;SACvC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACzC,OAAO;oBACL,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE;iBACpC,CAAA;YACH,CAAC,CAAC,CAAA;YACF,YAAY,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;SACvC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;IAEzB,WAAW;IACX,MAAM,SAAS,GAAiB,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,aAAa,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;YACjC,GAAG,EAAE,MAAM,CAAC,OAAO;YACnB,IAAI,EAAE,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;SAC9C,CAAC,CAAA;QACF,YAAY,CAAC,aAAa,CAAC,CAAA;IAC7B,CAAC,CAAA;IAED,WAAW;IACX,MAAM,SAAS,GAAiB,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACrB,YAAY,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC,CAAA;IAED,OAAO,0CAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAI,CAAA;AAC5E,CAAC,CAAA;AAED,wBAAwB;AACxB,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IACjD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;QAC/D,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA","sourcesContent":["/*\n * @Descripttion: FormList\n * @Author: 郑泳健\n * @Date: 2023-03-06 18:42:08\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-03-17 18:47:05\n */\n\nimport React, { useState, useEffect, useRef, useContext, memo } from 'react'\nimport { cloneDeep, isEqual } from 'lodash'\nimport { getNames } from '../utils'\nimport { FormContext } from '../store'\nimport type { IFormListProps, IFormContext, ILevel, TAddOrRemove, IObject } from '../interface'\n\nconst List: React.FC<IFormListProps> = ({ name, children }) => {\n const maxRef = useRef(-1)\n const { form, initialValues } = useContext<IFormContext>(FormContext)\n const [dataLevel, setDataLevel] = useState<ILevel[]>([])\n\n useEffect(() => {\n const key: string = Array.isArray(name) ? name?.[0] : name\n if (form && form.dataLevel) {\n form.dataLevel[key] = dataLevel\n }\n }, [form, dataLevel, name])\n\n /** 根据默认数值自动生成dataLevel */\n useEffect(() => {\n let dataSource = initialValues\n const attrs = getNames(name)\n\n for (const key of attrs) {\n dataSource = dataSource?.[key] || [{}]\n }\n\n if (Array.isArray(dataSource)) {\n const _level = dataSource.map((i, index) => {\n return {\n key: index,\n name: `${attrs.join('.')}.${index}`,\n }\n })\n setDataLevel(_level)\n maxRef.current = dataSource.length - 1\n }\n }, [initialValues, name])\n\n /** 新增一列 */\n const handleAdd: TAddOrRemove = (index) => {\n const tempDataLevel = cloneDeep(dataLevel)\n maxRef.current++\n const attrs = getNames(name)\n tempDataLevel.splice(index + 1, 0, {\n key: maxRef.current,\n name: `${attrs?.join('.')}.${maxRef.current}`,\n })\n setDataLevel(tempDataLevel)\n }\n\n /** 删除一列 */\n const handleDel: TAddOrRemove = (index) => {\n const temp = cloneDeep(dataLevel)\n temp.splice(index, 1)\n setDataLevel(temp)\n }\n\n return <>{children?.(dataLevel, { add: handleAdd, remove: handleDel })}</>\n}\n\n// name 没有改变就不需要重复render\nexport default memo(List, (nextProps, prevProps) => {\n if (isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {\n return true\n }\n return false\n})\n"]}
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../../../../src/tntd-form/TntdForm/components/List.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAC5E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,IAAI,GAA6B,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,UAAU,CAAe,WAAW,CAAC,CAAA;IAC5F,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IAExD,8CAA8C;IAC9C,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;YACtD,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;gBAChD,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAG,CAAC,CAAC,kDAAI,CAAA;YAC7B,CAAC,CAAC,CAAA;SACH;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAEtE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;gBACjB,MAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0CAAG,CAAC,CAAC,kDAAI,CAAA;YAC7B,CAAC,CAAC,CAAA;SACH;IACH,CAAC,CAAA;IAED,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,GAAG,aAAa,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,GAAG,GAAW,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAE1D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACvB,UAAU,GAAG,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,GAAG,CAAC,KAAI,CAAC,EAAE,CAAC,CAAA;SACvC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACzC,OAAO;oBACL,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE;iBACpC,CAAA;YACH,CAAC,CAAC,CAAA;YACF,YAAY,CAAC,MAAM,CAAC,CAAA;YACpB,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;YACtC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;aAC7B;YACD,YAAY,EAAE,CAAA;SACf;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;IAE/B,WAAW;IACX,MAAM,SAAS,GAAiB,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,GAAG,GAAW,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC1D,MAAM,CAAC,OAAO,EAAE,CAAA;QAChB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC5B,aAAa,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;YACjC,GAAG,EAAE,MAAM,CAAC,OAAO;YACnB,IAAI,EAAE,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE;SAC9C,CAAC,CAAA;QACF,YAAY,CAAC,aAAa,CAAC,CAAA;QAC3B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAA;SACpC;QACD,YAAY,EAAE,CAAA;IAChB,CAAC,CAAA;IAED,WAAW;IACX,MAAM,SAAS,GAAiB,CAAC,KAAK,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,GAAG,GAAW,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACrB,YAAY,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA;SAC3B;QACD,YAAY,EAAE,CAAA;IAChB,CAAC,CAAA;IAED,OAAO,0CAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAI,CAAA;AAC5E,CAAC,CAAA;AAED,wBAAwB;AACxB,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IACjD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE;QAC/D,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAC,CAAA","sourcesContent":["/*\n * @Descripttion: FormList\n * @Author: 郑泳健\n * @Date: 2023-03-06 18:42:08\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 17:42:31\n */\n\nimport React, { useState, useEffect, useRef, useContext, memo } from 'react'\nimport { cloneDeep, isEqual } from 'lodash'\nimport { getNames } from '../utils'\nimport { FormContext } from '../store'\nimport type { IFormListProps, IFormContext, ILevel, TAddOrRemove, IObject } from '../interface'\n\nconst List: React.FC<IFormListProps> = ({ name, children }) => {\n const maxRef = useRef(-1)\n const { form, initialValues, compsRefs, updateRefs } = useContext<IFormContext>(FormContext)\n const [dataLevel, setDataLevel] = useState<ILevel[]>([])\n\n /** 根据一开始记录的渲染shouldUpdate 和 dependencies组件 */\n const updateRender = () => {\n if (Array.isArray(updateRefs.current.shouldUpdateList)) {\n updateRefs.current.shouldUpdateList.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n\n const list = updateRefs.current.dependencies[getNames(name).join('.')]\n\n if (Array.isArray(list)) {\n list.forEach((i) => {\n compsRefs?.current?.[i]?.()\n })\n }\n }\n\n /** 根据默认数值自动生成dataLevel */\n useEffect(() => {\n let dataSource = initialValues\n const attrs = getNames(name)\n const key: string = Array.isArray(name) ? name?.[0] : name\n\n for (const key of attrs) {\n dataSource = dataSource?.[key] || [{}]\n }\n\n if (Array.isArray(dataSource)) {\n const _level = dataSource.map((i, index) => {\n return {\n key: index,\n name: `${attrs.join('.')}.${index}`,\n }\n })\n setDataLevel(_level)\n maxRef.current = dataSource.length - 1\n if (form) {\n form.dataLevel[key] = _level\n }\n updateRender()\n }\n }, [form, initialValues, name])\n\n /** 新增一列 */\n const handleAdd: TAddOrRemove = (index) => {\n const tempDataLevel = cloneDeep(dataLevel)\n const key: string = Array.isArray(name) ? name?.[0] : name\n maxRef.current++\n const attrs = getNames(name)\n tempDataLevel.splice(index + 1, 0, {\n key: maxRef.current,\n name: `${attrs?.join('.')}.${maxRef.current}`,\n })\n setDataLevel(tempDataLevel)\n if (form) {\n form.dataLevel[key] = tempDataLevel\n }\n updateRender()\n }\n\n /** 删除一列 */\n const handleDel: TAddOrRemove = (index) => {\n const temp = cloneDeep(dataLevel)\n const key: string = Array.isArray(name) ? name?.[0] : name\n temp.splice(index, 1)\n setDataLevel(temp)\n if (form) {\n form.dataLevel[key] = temp\n }\n updateRender()\n }\n\n return <>{children?.(dataLevel, { add: handleAdd, remove: handleDel })}</>\n}\n\n// name 没有改变就不需要重复render\nexport default memo(List, (nextProps, prevProps) => {\n if (isEqual(nextProps.name, prevProps.name) && !!prevProps.name) {\n return true\n }\n return false\n})\n"]}
@@ -3,9 +3,9 @@
3
3
  * @Author: 郑泳健
4
4
  * @Date: 2023-02-16 10:43:03
5
5
  * @LastEditors: 郑泳健
6
- * @LastEditTime: 2023-03-20 10:27:35
6
+ * @LastEditTime: 2023-04-06 15:32:07
7
7
  */
8
- import React, { useState, useRef } from 'react';
8
+ import React, { useRef } from 'react';
9
9
  import { validateFields, getFieldsValue, getFieldValue } from './utils';
10
10
  import { FormContext } from './store';
11
11
  import List from './components/List';
@@ -15,14 +15,17 @@ const TntdForm = ({
15
15
  initialValues,
16
16
  children
17
17
  }) => {
18
- // 这个是为了获取当前是哪一个单元格在输入
19
- const [currentChangeKeys, setCurrentChangeKeys] = useState([]);
18
+ const updateRefs = useRef({
19
+ shouldUpdateList: [],
20
+ dependencies: {}
21
+ });
22
+ const compsRefs = useRef({});
20
23
  return React.createElement(FormContext.Provider, {
21
24
  value: {
22
25
  form,
23
26
  initialValues,
24
- currentChangeKeys,
25
- setCurrentChangeKeys
27
+ updateRefs,
28
+ compsRefs
26
29
  }
27
30
  }, children);
28
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAkB,EAAE,EAAE;IACrE,sBAAsB;IACtB,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IAExE,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;YACL,IAAI;YACJ,aAAa;YACb,iBAAiB;YACjB,oBAAoB;SACrB,IAEA,QAAQ,CACY,CACxB,CAAA;AACH,CAAC,CAAA;AAED,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;IACtB,MAAM,IAAI,GAAuB,MAAM,CAAQ;QAC7C,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,aAAa,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3E,cAAc,EAAE,CAAC,GAA+B,EAAE,EAAE;YAClD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;gBACnB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;oBAChD,MAAM,MAAM,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAC,GAAG,CAAC,KAAI,EAAE,CAAA;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;oBACzB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;qBACnE;iBACF;aACF;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AACpB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AAEpB,eAAe,QAAQ,CAAA","sourcesContent":["/*\n * @Descripttion: 高性能动态增删form表单\n * @Author: 郑泳健\n * @Date: 2023-02-16 10:43:03\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-03-20 10:27:35\n */\nimport React, { useState, useRef } from 'react'\nimport { validateFields, getFieldsValue, getFieldValue } from './utils'\nimport { FormContext } from './store'\nimport type { IForm, ITntdFormProps, IObject, TinitialValueType } from './interface'\nimport List from './components/List'\nimport Item from './components/Item'\n\nconst TntdForm = ({ form, initialValues, children }: ITntdFormProps) => {\n // 这个是为了获取当前是哪一个单元格在输入\n const [currentChangeKeys, setCurrentChangeKeys] = useState<string[]>([])\n\n return (\n <FormContext.Provider\n value={{\n form,\n initialValues,\n currentChangeKeys,\n setCurrentChangeKeys,\n }}\n >\n {children}\n </FormContext.Provider>\n )\n}\n\nTntdForm.useForm = () => {\n const form: { current: IForm } = useRef<IForm>({\n dataLevel: {},\n formData: {},\n validateFields: () => validateFields(form.current),\n getFieldsValue: () => getFieldsValue(form.current),\n getFieldValue: (field: Array<string>) => getFieldValue(form.current, field),\n setFieldsValue: (obj: IObject<TinitialValueType>) => {\n for (const i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n const prefix = i?.split('.') || []\n const attr = prefix.pop()\n if (attr && form.current.formData[prefix.join('.')][attr]) {\n form.current.formData[prefix.join('.')][attr].setItemValue(obj[i])\n }\n }\n }\n },\n })\n\n return [form.current]\n}\n\nTntdForm.List = List\nTntdForm.Item = Item\n\nexport default TntdForm\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/index.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,EAAY,MAAM,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAErC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,IAAI,MAAM,mBAAmB,CAAA;AAEpC,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAkB,EAAE,EAAE;IACrE,MAAM,UAAU,GAAG,MAAM,CAAa;QACpC,gBAAgB,EAAE,EAAE;QACpB,YAAY,EAAE,EAAE;KACjB,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAE5B,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;YACL,IAAI;YACJ,aAAa;YACb,UAAU;YACV,SAAS;SACV,IAEA,QAAQ,CACY,CACxB,CAAA;AACH,CAAC,CAAA;AAED,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE;IACtB,MAAM,IAAI,GAAuB,MAAM,CAAQ;QAC7C,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;QAClD,aAAa,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;QAC3E,cAAc,EAAE,CAAC,GAA+B,EAAE,EAAE;YAClD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;gBACnB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;oBAChD,MAAM,MAAM,GAAG,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,KAAK,CAAC,GAAG,CAAC,KAAI,EAAE,CAAA;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;oBACzB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;wBACzD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;qBACnE;iBACF;aACF;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC,CAAA;AAED,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AACpB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;AAEpB,eAAe,QAAQ,CAAA","sourcesContent":["/*\n * @Descripttion: 高性能动态增删form表单\n * @Author: 郑泳健\n * @Date: 2023-02-16 10:43:03\n * @LastEditors: 郑泳健\n * @LastEditTime: 2023-04-06 15:32:07\n */\nimport React, { useState, useRef } from 'react'\nimport { validateFields, getFieldsValue, getFieldValue } from './utils'\nimport { FormContext } from './store'\nimport type { IForm, ITntdFormProps, IObject, TinitialValueType, IUpdateObj } from './interface'\nimport List from './components/List'\nimport Item from './components/Item'\n\nconst TntdForm = ({ form, initialValues, children }: ITntdFormProps) => {\n const updateRefs = useRef<IUpdateObj>({\n shouldUpdateList: [],\n dependencies: {},\n })\n\n const compsRefs = useRef({})\n\n return (\n <FormContext.Provider\n value={{\n form,\n initialValues,\n updateRefs,\n compsRefs,\n }}\n >\n {children}\n </FormContext.Provider>\n )\n}\n\nTntdForm.useForm = () => {\n const form: { current: IForm } = useRef<IForm>({\n dataLevel: {},\n formData: {},\n validateFields: () => validateFields(form.current),\n getFieldsValue: () => getFieldsValue(form.current),\n getFieldValue: (field: Array<string>) => getFieldValue(form.current, field),\n setFieldsValue: (obj: IObject<TinitialValueType>) => {\n for (const i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n const prefix = i?.split('.') || []\n const attr = prefix.pop()\n if (attr && form.current.formData[prefix.join('.')][attr]) {\n form.current.formData[prefix.join('.')][attr].setItemValue(obj[i])\n }\n }\n }\n },\n })\n\n return [form.current]\n}\n\nTntdForm.List = List\nTntdForm.Item = Item\n\nexport default TntdForm\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 层级\n */\nexport interface ILevel {\n key?: number\n name?: string\n}\n\nexport interface IObject<T> {\n [key: string]: T\n}\n\nexport type TinitialValueType = null | undefined | string | number | boolean\n\n/**\n * 每一个单元格的信息\n */\nexport interface IFormItemData {\n /** 每个formItem的值 */\n value: TinitialValueType\n /** 每个formItem的错误信息 */\n errorMsg: string | undefined\n /** 每个formItem的校验方法, 返回值为该formItem的错误信息,同时会在formItem下面显示错误信息 */\n checkItem: () => string | undefined\n /** 给某个formItem设置值 */\n setItemValue: (value: TinitialValueType, callback?: () => void) => void\n}\n\nexport interface IForm {\n /** 记录每一层级的顺序 */\n dataLevel: IObject<ILevel[]>\n /** 整个form的数据,{content.0: { id: IFormItemData, value: IFormItemData }} */\n formData: IFormData\n /** 先校验,并将结果返回 */\n validateFields: () => Promise<any>\n /** 获取form表单的数据 */\n getFieldsValue: () => object\n /** 获取formItem的数据 */\n getFieldValue: (field: Array<string>) => any\n /** 给某些formItem设置数据 */\n setFieldsValue: (fileds: IObject<TinitialValueType>) => void\n}\n\n/**\n * TntdForm的props\n */\nexport interface ITntdFormProps {\n form: IForm\n initialValues: object\n children: React.ReactNode\n}\n\nexport interface IFormContext {\n form?: IForm\n initialValues?: IObject<any>\n currentChangeKeys?: Array<string>\n setCurrentChangeKeys: React.Dispatch<React.SetStateAction<Array<string>>>\n}\n\n/** formList的props */\nexport interface IFormListProps {\n name: string[] | string\n children: (\n dataLevel: ILevel[],\n { add, remove }: { add: TAddOrRemove; remove: TAddOrRemove }\n ) => void\n}\n\n/** 增删事件 */\nexport type TAddOrRemove = (index: number) => void\n\nexport type IFormItem = {\n name: string[] | string\n children: React.ReactChild | React.ReactChild[]\n style: React.CSSProperties\n rules: ValidationRule\n shouldUpdate: boolean\n initialValue: TinitialValueType\n dependencies?: Array<string[] | string>\n} & CustomRequired<IFormContext, 'setCurrentChangeKeys'>\n\n/** 将某个不可选属性变成必选 */\ntype CustomRequired<T, K extends keyof T> = {\n [P in K]-?: T[P]\n} & Omit<T, K>\n\nexport interface ValidationRule {\n /** validation error message */\n message?: React.ReactNode\n /** indicates whether field is required */\n required?: boolean\n /** custom validate function (Note: callback must be called) */\n validator?: (rule: any, value: any, callback: any) => any\n}\n\nexport interface IFormData {\n [name: string]: {\n [attr: string]: IFormItemData\n }\n}\n"]}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/tntd-form/TntdForm/interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 层级\n */\nexport interface ILevel {\n key?: number\n name?: string\n}\n\nexport interface IObject<T> {\n [key: string]: T\n}\n\nexport type TinitialValueType = null | undefined | string | number | boolean\n\n/**\n * 每一个单元格的信息\n */\nexport interface IFormItemData {\n /** 每个formItem的值 */\n value: TinitialValueType\n /** 每个formItem的错误信息 */\n errorMsg: string | undefined\n /** 每个formItem的校验方法, 返回值为该formItem的错误信息,同时会在formItem下面显示错误信息 */\n checkItem: () => string | undefined\n /** 给某个formItem设置值 */\n setItemValue: (value: TinitialValueType, callback?: () => void) => void\n}\n\nexport interface IForm {\n /** 记录每一层级的顺序 */\n dataLevel: IObject<ILevel[]>\n /** 整个form的数据,{content.0: { id: IFormItemData, value: IFormItemData }} */\n formData: IFormData\n /** 先校验,并将结果返回 */\n validateFields: () => Promise<any>\n /** 获取form表单的数据 */\n getFieldsValue: () => object\n /** 获取formItem的数据 */\n getFieldValue: (field: Array<string>) => any\n /** 给某些formItem设置数据 */\n setFieldsValue: (fileds: IObject<TinitialValueType>) => void\n}\n\n/**\n * TntdForm的props\n */\nexport interface ITntdFormProps {\n form: IForm\n initialValues: object\n children: React.ReactNode\n}\n\nexport interface IUpdateObj {\n shouldUpdateList: Array<string>\n dependencies: IObject<string[] | string>\n}\n\nexport interface IFormContext {\n form?: IForm\n initialValues?: IObject<any>\n updateRefs: React.MutableRefObject<IUpdateObj>\n compsRefs: React.MutableRefObject<IObject<() => void>>\n}\n\n/** formList的props */\nexport interface IFormListProps {\n name: string[] | string\n children: (\n dataLevel: ILevel[],\n { add, remove }: { add: TAddOrRemove; remove: TAddOrRemove }\n ) => void\n}\n\n/** 增删事件 */\nexport type TAddOrRemove = (index: number) => void\n\nexport type IFormItem = {\n name: string[] | string\n children: React.ReactChild | React.ReactChild[]\n style: React.CSSProperties\n rules: ValidationRule\n shouldUpdate: boolean\n initialValue: TinitialValueType\n dependencies?: Array<string[] | string>\n} & IFormContext\n\n/** 将某个不可选属性变成必选 */\ntype CustomRequired<T, K extends keyof T> = {\n [P in K]-?: T[P]\n} & Omit<T, K>\n\nexport interface ValidationRule {\n /** validation error message */\n message?: React.ReactNode\n /** indicates whether field is required */\n required?: boolean\n /** custom validate function (Note: callback must be called) */\n validator?: (rule: any, value: any, callback: any) => any\n}\n\nexport interface IFormData {\n [name: string]: {\n [attr: string]: IFormItemData\n }\n}\n\nexport interface IChildrenCompFun {\n onRefresh: () => void\n}\n"]}
@@ -84,8 +84,8 @@
84
84
  }
85
85
  .tntd-second-page {
86
86
  &-header {
87
- height: 50px;
88
- line-height: 50px;
87
+ height: @header-height;
88
+ line-height: @header-height;
89
89
  &-back {
90
90
  font-size: 16px;
91
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,yBAAyB,CAAA;AAEpD,OAAO,+BAA+B,CAAA;AAEtC,cAAc,yBAAyB,CAAA;AAEvC,eAAe,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,yBAAyB,CAAA;AASpD,OAAO,+BAA+B,CAAA;AAEtC,cAAc,yBAAyB,CAAA;AAEvC,eAAe,cAAc,CAAA"}
@@ -18,8 +18,13 @@ Object.keys(_localeProvider).forEach(function (key) {
18
18
  }
19
19
  });
20
20
  });
21
+ var _locale = require("antd/lib/modal/locale");
21
22
  require("antd/lib/locale-provider/style");
22
23
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+ // https://github.com/ant-design/ant-design/pull/29570/files
26
+ _localeProvider["default"].prototype.componentWillUnmount = function () {
27
+ (0, _locale.changeConfirmLocale)(this.props.locale && this.props.locale.Modal);
28
+ };
24
29
  var _default = _localeProvider["default"];
25
30
  exports["default"] = _default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,8EAAoD;AAEpD,yCAAsC;AAEtC,0DAAuC;AAEvC,kBAAe,yBAAc,CAAA","sourcesContent":["import LocaleProvider from 'antd/lib/locale-provider'\n\nimport 'antd/lib/locale-provider/style'\n\nexport * from 'antd/lib/locale-provider'\n\nexport default LocaleProvider\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locale-provider/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,8EAAoD;AAEpD,iDAA0D;AAE1D,4DAA4D;AAC5D,yBAAc,CAAC,SAAS,CAAC,oBAAoB,GAAG;IAC9C,IAAA,4BAAmB,EAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACnE,CAAC,CAAA;AAED,yCAAsC;AAEtC,0DAAuC;AAEvC,kBAAe,yBAAc,CAAA","sourcesContent":["import LocaleProvider from 'antd/lib/locale-provider'\n\nimport { changeConfirmLocale } from 'antd/lib/modal/locale'\n\n// https://github.com/ant-design/ant-design/pull/29570/files\nLocaleProvider.prototype.componentWillUnmount = function () {\n changeConfirmLocale(this.props.locale && this.props.locale.Modal)\n}\n\nimport 'antd/lib/locale-provider/style'\n\nexport * from 'antd/lib/locale-provider'\n\nexport default LocaleProvider\n"]}