@hw-component/form 0.0.2-bate → 0.0.2-beta-v1

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 (112) hide show
  1. package/es/CheckboxGroup/index.d.ts +1 -1
  2. package/es/CheckboxGroup/index.js +4 -2
  3. package/es/DialogForm/DrawerForm/Footer.d.ts +4 -0
  4. package/es/DialogForm/DrawerForm/Footer.js +23 -0
  5. package/es/DialogForm/DrawerForm/Title.d.ts +4 -0
  6. package/es/DialogForm/DrawerForm/Title.js +18 -0
  7. package/es/DialogForm/DrawerForm/index.d.ts +4 -0
  8. package/es/DialogForm/DrawerForm/index.js +111 -0
  9. package/es/DialogForm/ModalForm.d.ts +4 -0
  10. package/es/DialogForm/ModalForm.js +89 -0
  11. package/es/DialogForm/hooks.d.ts +14 -0
  12. package/es/DialogForm/hooks.js +124 -0
  13. package/es/DialogForm/modal.d.ts +25 -0
  14. package/es/Form/HFormConnect.d.ts +1 -2
  15. package/es/Form/HFormConnect.js +17 -16
  16. package/es/Form/InitSet.d.ts +1 -4
  17. package/es/Form/InitSet.js +2 -3
  18. package/es/Form/config.d.ts +5 -4
  19. package/es/Form/config.js +6 -4
  20. package/es/Form/hooks/index.d.ts +0 -6
  21. package/es/Form/hooks/index.js +1 -33
  22. package/es/Form/hooks/useHForm.js +72 -15
  23. package/es/Form/index.js +46 -15
  24. package/es/Form/modal.d.ts +20 -8
  25. package/es/Input/SelectInput.d.ts +2 -2
  26. package/es/Input/SelectInput.js +8 -5
  27. package/es/Input/modal.d.ts +2 -0
  28. package/es/Select/hooks/norHooks.d.ts +1 -1
  29. package/es/TDPicker/RangePicker.d.ts +1 -1
  30. package/es/TDPicker/RangePicker.js +4 -2
  31. package/es/TextArea/index.js +21 -0
  32. package/es/Upload/UrlUpload/index.d.ts +2 -2
  33. package/es/Upload/UrlUpload/index.js +3 -3
  34. package/es/Upload/hooks/customRequest.js +99 -36
  35. package/es/Upload/index.d.ts +1 -2
  36. package/es/Upload/index.js +39 -5
  37. package/es/Upload/modal.d.ts +2 -0
  38. package/es/config.js +4 -4
  39. package/es/index.css +1 -1
  40. package/es/index.d.ts +8 -4
  41. package/es/index.js +7 -1
  42. package/lib/CheckboxGroup/index.d.ts +1 -1
  43. package/lib/CheckboxGroup/index.js +4 -2
  44. package/lib/DialogForm/DrawerForm/Footer.d.ts +4 -0
  45. package/lib/DialogForm/DrawerForm/Footer.js +26 -0
  46. package/lib/DialogForm/DrawerForm/Title.d.ts +4 -0
  47. package/lib/DialogForm/DrawerForm/Title.js +21 -0
  48. package/lib/DialogForm/DrawerForm/index.d.ts +4 -0
  49. package/lib/DialogForm/DrawerForm/index.js +114 -0
  50. package/lib/DialogForm/ModalForm.d.ts +4 -0
  51. package/lib/DialogForm/ModalForm.js +92 -0
  52. package/lib/DialogForm/hooks.d.ts +14 -0
  53. package/lib/DialogForm/hooks.js +128 -0
  54. package/lib/DialogForm/modal.d.ts +25 -0
  55. package/lib/Form/HFormConnect.d.ts +1 -2
  56. package/lib/Form/HFormConnect.js +17 -16
  57. package/lib/Form/InitSet.d.ts +1 -4
  58. package/lib/Form/InitSet.js +2 -3
  59. package/lib/Form/config.d.ts +5 -4
  60. package/lib/Form/config.js +3 -1
  61. package/lib/Form/hooks/index.d.ts +0 -6
  62. package/lib/Form/hooks/index.js +0 -33
  63. package/lib/Form/hooks/useHForm.js +72 -15
  64. package/lib/Form/index.js +53 -22
  65. package/lib/Form/modal.d.ts +20 -8
  66. package/lib/Input/SelectInput.d.ts +2 -2
  67. package/lib/Input/SelectInput.js +8 -5
  68. package/lib/Input/modal.d.ts +2 -0
  69. package/lib/Select/hooks/norHooks.d.ts +1 -1
  70. package/lib/TDPicker/RangePicker.d.ts +1 -1
  71. package/lib/TDPicker/RangePicker.js +4 -2
  72. package/lib/TextArea/index.js +24 -0
  73. package/lib/Upload/UrlUpload/index.d.ts +2 -2
  74. package/lib/Upload/UrlUpload/index.js +3 -3
  75. package/lib/Upload/hooks/customRequest.js +99 -36
  76. package/lib/Upload/index.d.ts +1 -2
  77. package/lib/Upload/index.js +39 -5
  78. package/lib/Upload/modal.d.ts +2 -0
  79. package/lib/config.js +4 -4
  80. package/lib/index.css +1 -1
  81. package/lib/index.d.ts +8 -4
  82. package/lib/index.js +10 -0
  83. package/package.json +1 -1
  84. package/src/components/CheckboxGroup/index.tsx +2 -2
  85. package/src/components/DialogForm/DrawerForm/Footer.tsx +19 -0
  86. package/src/components/DialogForm/DrawerForm/Title.tsx +12 -0
  87. package/src/components/DialogForm/DrawerForm/index.tsx +85 -0
  88. package/src/components/DialogForm/ModalForm.tsx +60 -0
  89. package/src/components/DialogForm/hooks.ts +87 -0
  90. package/src/components/DialogForm/modal.ts +27 -0
  91. package/src/components/Form/FormItem/Helper.tsx +3 -4
  92. package/src/components/Form/HFormConnect.tsx +26 -8
  93. package/src/components/Form/InitSet.tsx +3 -5
  94. package/src/components/Form/config.ts +2 -1
  95. package/src/components/Form/hooks/index.ts +0 -20
  96. package/src/components/Form/hooks/useHForm.ts +67 -14
  97. package/src/components/Form/index.less +1 -1
  98. package/src/components/Form/index.tsx +25 -7
  99. package/src/components/Form/modal.ts +22 -10
  100. package/src/components/Input/SelectInput.tsx +4 -2
  101. package/src/components/Input/modal.ts +2 -0
  102. package/src/components/TDPicker/RangePicker.tsx +5 -6
  103. package/src/components/Upload/UrlUpload/index.tsx +2 -2
  104. package/src/components/Upload/hooks/customRequest.ts +57 -14
  105. package/src/components/Upload/index.tsx +39 -7
  106. package/src/components/Upload/modal.ts +2 -0
  107. package/src/components/config.ts +4 -4
  108. package/src/components/index.tsx +6 -0
  109. package/src/pages/DrawerForm/index.tsx +127 -0
  110. package/src/pages/Form/index.tsx +3 -0
  111. package/src/pages/ModalForm/index.tsx +127 -0
  112. package/src/routes.tsx +12 -0
@@ -0,0 +1,12 @@
1
+ import type { ModalProps } from "antd";
2
+ import { Row } from "antd";
3
+ import { CloseOutlined } from "@ant-design/icons";
4
+
5
+ export default ({ title, closable, onCancel }: ModalProps) => {
6
+ return (
7
+ <Row justify={"space-between"}>
8
+ <div>{title}</div>
9
+ {closable && <CloseOutlined onClick={onCancel} />}
10
+ </Row>
11
+ );
12
+ };
@@ -0,0 +1,85 @@
1
+ import { Drawer } from "antd";
2
+ import type { DialogFormProps } from "../modal";
3
+ import { useCurrentForm, useModifyProps, useSub } from "../hooks";
4
+ import HForm from "../../Form";
5
+ import Title from "./Title";
6
+ import Footer from "./Footer";
7
+ export default ({
8
+ visible,
9
+ title,
10
+ onCancel,
11
+ configData,
12
+ infoRequest,
13
+ request,
14
+ afterClose,
15
+ dialogForm,
16
+ closable = true,
17
+ initialValues = {},
18
+ labelWidth,
19
+ onOk,
20
+ onFinish,
21
+ size,
22
+ form,
23
+ footer,
24
+ ...props
25
+ }: DialogFormProps) => {
26
+ const currentForm = useCurrentForm(dialogForm);
27
+ const {
28
+ modalVisible,
29
+ modalFormData,
30
+ setModalVisible,
31
+ initValue,
32
+ onAfterClose,
33
+ } = useModifyProps({
34
+ configData,
35
+ visible,
36
+ initialValues,
37
+ dialogForm: currentForm,
38
+ });
39
+ const cancel = (e) => {
40
+ onAfterClose();
41
+ if (onCancel) {
42
+ return onCancel?.(e);
43
+ }
44
+ setModalVisible(false);
45
+ };
46
+ const { loading, run } = useSub({ request, onFinish });
47
+ const footerComponent = () => {
48
+ if (footer === null) {
49
+ return null;
50
+ }
51
+ return (
52
+ footer || (
53
+ <Footer
54
+ onCancel={cancel}
55
+ onOk={currentForm.submit}
56
+ confirmLoading={loading}
57
+ />
58
+ )
59
+ );
60
+ };
61
+ return (
62
+ <Drawer
63
+ visible={modalVisible}
64
+ title={<Title title={title} closable={closable} onCancel={cancel} />}
65
+ {...props}
66
+ onClose={cancel}
67
+ closable={false}
68
+ destroyOnClose={true}
69
+ footer={footerComponent()}
70
+ >
71
+ <HForm
72
+ configData={modalFormData}
73
+ initialValues={initValue}
74
+ {...props}
75
+ form={currentForm}
76
+ onFinish={async (values) => {
77
+ await run(values);
78
+ setModalVisible(false);
79
+ }}
80
+ infoRequest={infoRequest}
81
+ labelWidth={labelWidth}
82
+ />
83
+ </Drawer>
84
+ );
85
+ };
@@ -0,0 +1,60 @@
1
+ import { Modal } from "antd";
2
+ import type { DialogFormProps } from "./modal";
3
+ import HForm from "../Form";
4
+ import { useCurrentForm, useModifyProps, useSub } from "./hooks";
5
+ export default ({
6
+ visible,
7
+ title,
8
+ onCancel,
9
+ configData,
10
+ infoRequest,
11
+ request,
12
+ afterClose,
13
+ dialogForm,
14
+ initialValues = {},
15
+ onFinish,
16
+ ...props
17
+ }: DialogFormProps) => {
18
+ const currentForm = useCurrentForm(dialogForm);
19
+ const { modalVisible, modalFormData, setModalVisible, initValue } =
20
+ useModifyProps({
21
+ configData,
22
+ visible,
23
+ initialValues,
24
+ dialogForm: currentForm,
25
+ });
26
+ const cancel = (e) => {
27
+ if (onCancel) {
28
+ return onCancel?.(e);
29
+ }
30
+ setModalVisible(false);
31
+ };
32
+ const { loading, run } = useSub({ request, onFinish });
33
+ return (
34
+ <Modal
35
+ title={title}
36
+ visible={modalVisible}
37
+ onCancel={cancel}
38
+ confirmLoading={loading}
39
+ afterClose={() => {
40
+ currentForm.resetFields();
41
+ afterClose?.();
42
+ }}
43
+ {...props}
44
+ onOk={currentForm.submit}
45
+ destroyOnClose={true}
46
+ >
47
+ <HForm
48
+ configData={modalFormData}
49
+ initialValues={initValue}
50
+ onFinish={async (values) => {
51
+ await run(values);
52
+ setModalVisible(false);
53
+ }}
54
+ {...props}
55
+ form={currentForm}
56
+ infoRequest={infoRequest}
57
+ />
58
+ </Modal>
59
+ );
60
+ };
@@ -0,0 +1,87 @@
1
+ import { useEffect, useMemo, useState } from "react";
2
+ import useHForm from "../Form/hooks/useHForm";
3
+ import type {
4
+ DialogFormProps,
5
+ HDialogFormInstance,
6
+ ModifyPropsModal,
7
+ } from "./modal";
8
+ import { useRequest } from "ahooks";
9
+
10
+ export const useModifyProps = ({
11
+ visible,
12
+ configData,
13
+ initialValues,
14
+ dialogForm,
15
+ afterClose,
16
+ }: ModifyPropsModal) => {
17
+ const [modalVisible, setModalVisible] = useState(visible);
18
+ const [modalFormData, setModalFormData] = useState(configData);
19
+ const [initValue, setInitValue] = useState(initialValues);
20
+ const onAfterClose = () => {
21
+ setTimeout(() => {
22
+ dialogForm.resetFields();
23
+ afterClose?.();
24
+ }, 0);
25
+ };
26
+ useEffect(() => {
27
+ setModalVisible(visible);
28
+ }, [visible]);
29
+ useEffect(() => {
30
+ setModalFormData(configData);
31
+ }, [configData]);
32
+ useEffect(() => {
33
+ dialogForm.show = (params = {}) => {
34
+ const {
35
+ configData: changeConfigData,
36
+ initialValues: changeInitialValues,
37
+ } = params;
38
+ if (!!changeConfigData) {
39
+ setModalFormData(changeConfigData);
40
+ }
41
+ setInitValue(changeInitialValues);
42
+ setModalVisible(true);
43
+ };
44
+ dialogForm.hide = () => {
45
+ setModalVisible(false);
46
+ onAfterClose();
47
+ };
48
+ }, [afterClose]);
49
+ return {
50
+ modalFormData,
51
+ modalVisible,
52
+ setModalVisible,
53
+ setModalFormData,
54
+ initValue,
55
+ setInitValue,
56
+ onAfterClose,
57
+ };
58
+ };
59
+ export const useHDialogForm = () => {
60
+ const hForm = useHForm();
61
+ return useMemo<HDialogFormInstance>(() => {
62
+ return {
63
+ ...hForm,
64
+ show: (params) => {},
65
+ hide: () => {},
66
+ };
67
+ }, []);
68
+ };
69
+
70
+ export const useCurrentForm = (hDialogForm?: HDialogFormInstance) => {
71
+ const defaultHModalForm = useHDialogForm();
72
+ return hDialogForm || defaultHModalForm;
73
+ };
74
+
75
+ export const useSub = ({ request, onFinish }: Partial<DialogFormProps>) => {
76
+ return useRequest(
77
+ async (values) => {
78
+ if (onFinish) {
79
+ return onFinish(values);
80
+ }
81
+ if (request) {
82
+ return request(values);
83
+ }
84
+ },
85
+ { manual: true }
86
+ );
87
+ };
@@ -0,0 +1,27 @@
1
+ import type { ModalProps } from "antd";
2
+ import type { HFormInstance, HItemProps, HFormProps } from "../Form/modal";
3
+ import type { PromiseFnResult } from "../modal";
4
+
5
+ type RootProps = HFormProps & ModalProps;
6
+
7
+ export interface ModifyPropsModal {
8
+ configData: HItemProps[];
9
+ visible?: boolean;
10
+ initialValues?: Record<string, any>;
11
+ dialogForm: HDialogFormInstance;
12
+ afterClose?: VoidFunction;
13
+ }
14
+ export interface ShowParamsModal {
15
+ configData?: HItemProps[];
16
+ visible?: boolean;
17
+ initialValues?: Record<string, any>;
18
+ }
19
+
20
+ export interface HDialogFormInstance extends HFormInstance {
21
+ show: (data?: ShowParamsModal) => void;
22
+ hide: VoidFunction;
23
+ }
24
+ export interface DialogFormProps extends Omit<RootProps, "onFinish"> {
25
+ dialogForm?: HDialogFormInstance;
26
+ onFinish?: PromiseFnResult;
27
+ }
@@ -1,7 +1,6 @@
1
1
  import React from "react";
2
- import type { HItemProps } from "@/components/Form/modal";
3
- import type { FormInstance } from "antd";
4
- import { Typography, Row } from "antd";
2
+ import type { HItemProps, HFormInstance } from "@/components/Form/modal";
3
+ import { Typography } from "antd";
5
4
  import { useFormContext } from "../Context";
6
5
 
7
6
  interface HelperProps {
@@ -16,7 +15,7 @@ const Index: React.FC<HelperProps> = ({ helper }) => {
16
15
  if (typeof helper === "function") {
17
16
  return (
18
17
  <Typography.Text type={"secondary"}>
19
- {helper(form as FormInstance)}
18
+ {helper(form as HFormInstance)}
20
19
  </Typography.Text>
21
20
  );
22
21
  }
@@ -4,6 +4,7 @@ import React, { useEffect } from "react";
4
4
  import type { ConnectConfigModal } from "@/components/Form/modal";
5
5
  import type { addFormatItemModal } from "@/components/Form/modal";
6
6
  import type { ConnectResultProps } from "@/components/Form/modal";
7
+ import type { argsFn } from "@/components/Form/modal";
7
8
 
8
9
  const formatMaker = (
9
10
  itemProps: HFormItemProps,
@@ -24,12 +25,18 @@ const formatMaker = (
24
25
  };
25
26
 
26
27
  export default (
27
- Component: React.FunctionComponent | React.ComponentClass,
28
+ component:
29
+ | React.FunctionComponent
30
+ | React.ComponentClass
31
+ | React.ForwardRefRenderFunction<any, any>,
28
32
  config: ConnectConfigModal = {}
29
33
  ) => {
30
34
  const { format = {} } = config;
31
- return (props: HFormItemProps) => {
32
- const { name } = props;
35
+ const Index: React.ForwardRefRenderFunction<any, HFormItemProps> = (
36
+ props: HFormItemProps,
37
+ ref
38
+ ) => {
39
+ const { name = "" } = props;
33
40
 
34
41
  const { form, valueType = "float" } = useFormContext();
35
42
 
@@ -40,10 +47,21 @@ export default (
40
47
  const addFormat = (aFormat: Record<string, addFormatItemModal>) => {
41
48
  form?.addFormat(name, formatMaker(props, aFormat[valueType]));
42
49
  };
43
-
44
- return React.createElement<ConnectResultProps>(Component, {
45
- ...props,
46
- addFormat,
47
- });
50
+ const addDispatchListener = (key: string, fn: argsFn) => {
51
+ form?.addDispatchListener({ key, name }, fn);
52
+ };
53
+ const Component = component as React.ForwardRefRenderFunction<
54
+ any,
55
+ ConnectResultProps
56
+ >;
57
+ return (
58
+ <Component
59
+ {...props}
60
+ addFormat={addFormat}
61
+ addDispatchListener={addDispatchListener}
62
+ ref={ref}
63
+ />
64
+ );
48
65
  };
66
+ return React.forwardRef(Index);
49
67
  };
@@ -1,12 +1,10 @@
1
1
  import { useFormContext } from "./Context";
2
2
  import { useEffect } from "react";
3
- interface InitSetProps {
4
- initValues?: Record<string, any>;
5
- }
6
- export default ({ initValues }: InitSetProps) => {
3
+
4
+ export default () => {
7
5
  const { form } = useFormContext();
8
6
  useEffect(() => {
9
- form.initValues(initValues);
7
+ form.initValues();
10
8
  }, []);
11
9
  return <></>;
12
10
  };
@@ -14,7 +14,7 @@ import HUpload from "../Upload";
14
14
  import HUrlUpload from "../Upload/UrlUpload";
15
15
  import HSubmit from "../Submit";
16
16
  import FormConfigProvider from "../Form/Context/FormConfigProvider";
17
-
17
+ import TextArea from "../TextArea";
18
18
  export const placeholderConfig = {
19
19
  inputType: ["input", "inputNumber", "selectInput", "buttonInput"],
20
20
  selectType: ["select", "datePicker", "timePicker"],
@@ -37,4 +37,5 @@ export default {
37
37
  urlUpload: HUrlUpload,
38
38
  submit: HSubmit,
39
39
  formConfigProvider: FormConfigProvider,
40
+ textArea: TextArea,
40
41
  };
@@ -20,23 +20,3 @@ export const useSub = ({ request, onFinish, form }: ParamsModal) => {
20
20
  { manual: true }
21
21
  );
22
22
  }; //提交
23
-
24
- export const useInit = ({ infoRequest, initialValues = {} }: ParamsModal) => {
25
- const {
26
- run: infoRun,
27
- loading: infoLoading,
28
- error: infoErr,
29
- data: infoData,
30
- } = useRequest(async () => {
31
- if (infoRequest) {
32
- return infoRequest();
33
- }
34
- return initialValues;
35
- });
36
- return {
37
- infoRun,
38
- infoLoading,
39
- infoErr,
40
- infoData,
41
- };
42
- }; //初始化
@@ -1,13 +1,40 @@
1
1
  import { useMemo } from "react";
2
2
  import { Form } from "antd";
3
3
  import type { FormatItemModal, HFormInstance } from "../modal";
4
+ import type { argsFn } from "../modal";
5
+
6
+ interface DispatchItemData {
7
+ keysFn: Record<string, argsFn>;
8
+ defaultFn: argsFn[];
9
+ }
4
10
 
5
11
  export default () => {
6
12
  const [form] = Form.useForm();
7
13
  return useMemo<HFormInstance>(() => {
8
14
  const formatSourceData: Record<string, FormatItemModal> = {};
9
- let dispatchSourceData: Record<string, VoidFunction[]> = {};
15
+ let dispatchSourceData: Record<string, DispatchItemData> = {};
16
+ let cacheValues: Record<string, any> = {};
17
+ const norAddItemDispatch = (name, fn) => {
18
+ if (!name) {
19
+ return {
20
+ keysFn: {},
21
+ defaultFn: [fn],
22
+ };
23
+ }
24
+ return {
25
+ keysFn: {
26
+ [name]: fn,
27
+ },
28
+ defaultFn: [],
29
+ };
30
+ };
10
31
  return {
32
+ initValues() {
33
+ if (cacheValues) {
34
+ const newValue = this.formatValues(cacheValues);
35
+ form.setFieldsValue(newValue);
36
+ }
37
+ },
11
38
  addFormat(name: string, format?: FormatItemModal) {
12
39
  if (!format) {
13
40
  return;
@@ -39,41 +66,67 @@ export default () => {
39
66
  });
40
67
  return newValue;
41
68
  }, //转化方法
42
- dispatch(key) {
69
+ dispatch(action, ...args) {
70
+ const { key, name } = action;
43
71
  const items = dispatchSourceData[key];
44
72
  if (!items) {
45
73
  return;
46
74
  }
47
- items.forEach((fn) => {
48
- fn();
75
+ const { keysFn, defaultFn } = items;
76
+ if (name) {
77
+ return keysFn[name]?.(...args);
78
+ }
79
+ const fnArrays = Object.keys(keysFn).map((itemKey) => {
80
+ return keysFn[itemKey];
81
+ }); //不存在name就合并
82
+ [...fnArrays, ...defaultFn].forEach((fn) => {
83
+ fn(...args);
49
84
  });
50
85
  },
51
- addDispatchListener(key, fn) {
86
+ addDispatchListener(action, fn) {
87
+ const { key, name } = action;
52
88
  const items = dispatchSourceData[key];
53
89
  if (!items) {
54
- dispatchSourceData[key] = [fn];
90
+ dispatchSourceData[key] = norAddItemDispatch(name, fn);
55
91
  return;
56
92
  }
57
- items.push(fn);
58
- dispatchSourceData[key] = items;
93
+ const { keysFn, defaultFn } = items;
94
+ if (name) {
95
+ keysFn[name] = fn;
96
+ } else {
97
+ defaultFn.push(fn);
98
+ }
99
+ dispatchSourceData[key] = {
100
+ keysFn,
101
+ defaultFn,
102
+ };
59
103
  },
60
- removeDispatchListener(key) {
61
- if (!key) {
104
+ removeDispatchListener(action) {
105
+ if (!action) {
62
106
  dispatchSourceData = {};
63
107
  return;
64
108
  }
109
+ const { key, name } = action;
110
+ const items = dispatchSourceData[key];
111
+ if (!items) {
112
+ return;
113
+ }
114
+ if (name) {
115
+ const { keysFn } = items;
116
+ Reflect.deleteProperty(keysFn, name);
117
+ items.keysFn = keysFn;
118
+ dispatchSourceData[key] = items;
119
+ return;
120
+ }
65
121
  Reflect.deleteProperty(dispatchSourceData, key);
66
122
  },
67
- initValues(value = {}) {
68
- const newValue = this.formatValues(value);
69
- form.setFieldsValue(newValue);
70
- },
71
123
  outputValues(value) {
72
124
  return this.formatValues(value, "outputValue");
73
125
  },
74
126
  ...form,
75
127
  setFieldsValue(values) {
76
128
  const newValue = this.formatValues(values);
129
+ cacheValues = values;
77
130
  form.setFieldsValue(newValue);
78
131
  },
79
132
  validateFields(nameList) {
@@ -2,7 +2,7 @@
2
2
  .@{ant-prefix}-hw-form-item-colon:after {
3
3
  position: relative;
4
4
  top: -0.5px;
5
- margin: 0 8px 0 2px;
5
+ margin: 0 0 0 2px;
6
6
  content: ":";
7
7
  }
8
8
  .@{ant-prefix}-hw-form-item-required:before {
@@ -1,11 +1,14 @@
1
1
  import { Form } from "antd";
2
2
  import type { HFormProps } from "./modal";
3
3
  import Item from "./FormItem";
4
- import { useCurrentForm, useInit, useSub } from "./hooks";
4
+ import { useCurrentForm, useSub } from "./hooks";
5
5
  import { FormContext } from "./Context";
6
6
  import PageHandler from "../PageHandler";
7
7
  import useInitConfigData from "./hooks/useInitConfigData";
8
+ import { useEffect } from "react";
9
+ import { useRequest } from "ahooks";
8
10
  import InitSet from "./InitSet";
11
+
9
12
  export default ({
10
13
  configData,
11
14
  labelWidth,
@@ -28,12 +31,27 @@ export default ({
28
31
  valueType,
29
32
  form: hForm,
30
33
  });
31
-
32
- const { infoRun, infoLoading, infoErr, infoData } = useInit({
33
- infoRequest,
34
- initialValues,
34
+ const {
35
+ run: infoRun,
36
+ loading: infoLoading,
37
+ error: infoErr,
38
+ data: infoData,
39
+ } = useRequest(async () => {
40
+ let setValue = initialValues;
41
+ if (!initialValues && !infoRequest) {
42
+ return {};
43
+ }
44
+ if (infoRequest) {
45
+ setValue = await infoRequest();
46
+ }
47
+ hForm.setFieldsValue(setValue);
48
+ return setValue;
35
49
  });
36
-
50
+ useEffect(() => {
51
+ return () => {
52
+ hForm.removeDispatchListener();
53
+ };
54
+ }, []);
37
55
  return (
38
56
  <PageHandler
39
57
  loading={infoLoading}
@@ -53,8 +71,8 @@ export default ({
53
71
  />
54
72
  );
55
73
  })}
74
+ <InitSet />
56
75
  </Form>
57
- <InitSet initValues={infoData} />
58
76
  </FormContext.Provider>
59
77
  </PageHandler>
60
78
  );
@@ -25,6 +25,7 @@ import type {
25
25
  ValueSwitchMapModal,
26
26
  DateRangePickerValueMapModal,
27
27
  } from "../modal";
28
+ import type { ForwardedRef } from "react";
28
29
  type RenderFun = (
29
30
  props: HItemProps,
30
31
  node: React.ReactNode,
@@ -53,18 +54,20 @@ type HelperModal = (form: HFormInstance) => React.ReactNode | string;
53
54
 
54
55
  export type HideModal = (form: HFormInstance) => boolean;
55
56
 
57
+ export type AddDispatchListenerFn = (action: ActionModal, fn: argsFn) => void;
58
+
56
59
  export interface HItemProps extends Omit<FormItemProps, "name"> {
57
60
  type?: string;
58
61
  itemProps?: ItemPropsType;
59
62
  render?: RenderFun;
60
- helper?: HelperModal;
63
+ helper?: HelperModal | string;
61
64
  hover?: string | HoverModal;
62
65
  // formItems?: HItemProps[]; 保留感觉没必要
63
66
  labelWidth?: number;
64
67
  hide?: boolean | HideModal;
65
68
  placeholder?: string | string[];
66
- formatKeys?: string[];
67
- name: string;
69
+ // formatKeys?: string[];
70
+ name?: string;
68
71
  }
69
72
 
70
73
  export interface HFormProps<T = any, R = any> extends Omit<FormProps, "form"> {
@@ -78,11 +81,13 @@ export interface HFormProps<T = any, R = any> extends Omit<FormProps, "form"> {
78
81
 
79
82
  export interface HFormItemProps extends HItemProps {
80
83
  required?: boolean;
84
+ value?: any;
85
+ onChange?: (val: any, item: any) => void;
81
86
  }
82
87
  export interface FormItemWithRender extends Omit<HFormItemProps, "render"> {
83
88
  render: (form: HFormInstance) => React.ReactNode;
84
89
  }
85
-
90
+ export type argsFn = (...args: any[]) => void;
86
91
  export interface FormContextProps {
87
92
  loading?: boolean;
88
93
  form: HFormInstance;
@@ -102,18 +107,21 @@ export interface IFormConfigContextProps {
102
107
  dateRanges?: RangePickerProps["ranges"];
103
108
  uploadProps?: ConfigUploadProps;
104
109
  }
105
-
110
+ interface ActionModal {
111
+ key: string;
112
+ name?: string;
113
+ }
106
114
  export interface HFormInstance extends FormInstance {
107
115
  addFormat: (name: string, formats?: FormatItemModal) => void;
108
- initValues: (values?: Record<string, any>) => void;
116
+ initValues: VoidFunction;
109
117
  formatValues: (
110
118
  values?: Record<string, any>,
111
119
  formatKey?: string
112
120
  ) => Record<string, any>;
113
- dispatch: (key: string) => void;
121
+ dispatch: (action: ActionModal, ...args: any[]) => void;
114
122
  outputValues: (values?: Record<string, any>) => Record<string, any>;
115
- addDispatchListener: (key: string, fn: VoidFunction) => void;
116
- removeDispatchListener: (key?: string) => void;
123
+ addDispatchListener: AddDispatchListenerFn;
124
+ removeDispatchListener: (action?: ActionModal, fn?: argsFn) => void;
117
125
  }
118
126
 
119
127
  export interface ConnectConfigModal {
@@ -137,6 +145,10 @@ export interface addFormatItemModal {
137
145
  outputValue: addValueFormat;
138
146
  }
139
147
 
140
- export interface ConnectResultProps {
148
+ export interface ConnectResultProps extends HFormItemProps {
141
149
  addFormat?: (format: Record<string, addFormatItemModal>) => void;
150
+ addDispatchListener?: (key: string, fn: argsFn) => void;
151
+ ref?: ForwardedRef<any>;
152
+ value?: any;
153
+ onChange?: (value: any, item?: any) => void;
142
154
  }