dynamic-modal 1.0.8 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/field-render.d.ts +2 -2
- package/dist/hooks/field-render.js +26 -22
- package/dist/interfaces/field.d.ts +2 -1
- package/dist/modal.js +2 -1
- package/package.json +2 -1
- package/src/hooks/field-render.ts +27 -23
- package/src/interfaces/field.ts +3 -2
- package/src/modal.tsx +2 -1
|
@@ -13,7 +13,7 @@ export interface IFieldRender {
|
|
|
13
13
|
liveData?: Array<IOption>;
|
|
14
14
|
liveSearching?: boolean;
|
|
15
15
|
}
|
|
16
|
-
export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue'> {
|
|
16
|
+
export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue' | 'unregister'> {
|
|
17
17
|
element: Partial<Pick<IField, 'enableIf' | 'renderIf' | 'name'>> & Partial<Record<'liveData', IModalLiveDataCondition>>;
|
|
18
18
|
}
|
|
19
|
-
export declare const useFieldRender: (
|
|
19
|
+
export declare const useFieldRender: ({ element, setValue, unregister }: IFieldRenderProps) => IFieldRender;
|
|
@@ -12,66 +12,70 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.useFieldRender = void 0;
|
|
14
14
|
const react_1 = require("react");
|
|
15
|
-
const useFieldRender = (
|
|
15
|
+
const useFieldRender = ({ element, setValue, unregister }) => {
|
|
16
16
|
const [render, setRender] = (0, react_1.useState)(null);
|
|
17
17
|
const [enable, setEnable] = (0, react_1.useState)(null);
|
|
18
18
|
const [liveSearching, setLiveSearching] = (0, react_1.useState)(false);
|
|
19
19
|
const [liveData, setLiveData] = (0, react_1.useState)(undefined);
|
|
20
20
|
const renderCondition = (0, react_1.useMemo)(() => {
|
|
21
|
-
const isRender =
|
|
21
|
+
const isRender = element.renderIf !== undefined;
|
|
22
22
|
if (render === null)
|
|
23
23
|
setRender(!isRender);
|
|
24
24
|
return isRender;
|
|
25
|
-
}, [
|
|
25
|
+
}, [element.renderIf, render]);
|
|
26
26
|
const enableCondition = (0, react_1.useMemo)(() => {
|
|
27
|
-
const isEnable =
|
|
27
|
+
const isEnable = element.enableIf !== undefined;
|
|
28
28
|
if (enable === null)
|
|
29
29
|
setEnable(!isEnable);
|
|
30
30
|
return isEnable;
|
|
31
|
-
}, [
|
|
31
|
+
}, [element.enableIf, enable]);
|
|
32
32
|
const liveDataCondition = (0, react_1.useMemo)(() => {
|
|
33
|
-
return
|
|
34
|
-
}, [
|
|
33
|
+
return element.liveData !== undefined;
|
|
34
|
+
}, [element.liveData]);
|
|
35
35
|
const renderConditionList = (0, react_1.useMemo)(() => {
|
|
36
|
-
return renderCondition ? Object.keys(
|
|
37
|
-
}, [
|
|
36
|
+
return renderCondition ? Object.keys(element.renderIf) : [];
|
|
37
|
+
}, [element.renderIf, renderCondition]);
|
|
38
38
|
const enableConditionList = (0, react_1.useMemo)(() => {
|
|
39
|
-
return enableCondition ? Object.keys(
|
|
40
|
-
}, [enableCondition,
|
|
39
|
+
return enableCondition ? Object.keys(element.enableIf) : [];
|
|
40
|
+
}, [enableCondition, element.enableIf]);
|
|
41
41
|
const liveDataAction = (0, react_1.useCallback)((field, formData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
42
|
var _a;
|
|
43
|
-
if (typeof field === 'string' && ((_a =
|
|
44
|
-
const options =
|
|
43
|
+
if (typeof field === 'string' && ((_a = element.liveData) === null || _a === void 0 ? void 0 : _a.action)) {
|
|
44
|
+
const options = element.liveData.action(field, formData);
|
|
45
45
|
return options !== null && options !== void 0 ? options : [];
|
|
46
46
|
}
|
|
47
47
|
return [];
|
|
48
|
-
}), [
|
|
48
|
+
}), [element.liveData]);
|
|
49
49
|
const checkField = (0, react_1.useCallback)((formData_1, _a) => __awaiter(void 0, [formData_1, _a], void 0, function* (formData, { name }) {
|
|
50
50
|
var _b;
|
|
51
51
|
const key = name !== null && name !== void 0 ? name : '';
|
|
52
52
|
const targetField = formData[key];
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const fieldValidValue = targetField !== undefined && targetField !== null && targetField !== '';
|
|
54
|
+
if (renderCondition && renderConditionList.includes(key) && fieldValidValue) {
|
|
55
|
+
const renderStatus = element.renderIf[key].includes(targetField) || element.renderIf[key].includes('*');
|
|
56
|
+
if (render !== renderStatus) {
|
|
56
57
|
setRender(renderStatus);
|
|
58
|
+
if (!renderStatus)
|
|
59
|
+
unregister(element.name);
|
|
60
|
+
}
|
|
57
61
|
}
|
|
58
|
-
else if (enableCondition && enableConditionList.includes(key)) {
|
|
59
|
-
const enableStatus =
|
|
62
|
+
else if (enableCondition && enableConditionList.includes(key) && fieldValidValue) {
|
|
63
|
+
const enableStatus = element.enableIf[key].includes(targetField) || element.enableIf[key].includes('');
|
|
60
64
|
if (enable !== enableStatus)
|
|
61
65
|
setEnable(enableStatus);
|
|
62
66
|
}
|
|
63
|
-
if (liveDataCondition && ((_b =
|
|
67
|
+
if (liveDataCondition && ((_b = element.liveData) === null || _b === void 0 ? void 0 : _b.condition.includes(key))) {
|
|
64
68
|
if (targetField) {
|
|
65
69
|
setLiveSearching(true);
|
|
66
70
|
const options = yield liveDataAction(targetField, formData);
|
|
67
71
|
if (liveData && JSON.stringify(liveData) !== JSON.stringify(options)) {
|
|
68
|
-
|
|
72
|
+
setValue(element.name, options);
|
|
69
73
|
}
|
|
70
74
|
setLiveData(options);
|
|
71
75
|
setLiveSearching(false);
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
|
-
}), [enable, enableCondition, enableConditionList, liveData, liveDataAction, liveDataCondition,
|
|
78
|
+
}), [enable, enableCondition, enableConditionList, liveData, liveDataAction, liveDataCondition, render, renderCondition, renderConditionList]);
|
|
75
79
|
return {
|
|
76
80
|
render,
|
|
77
81
|
enable,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties } from 'react';
|
|
2
|
-
import { Control, FieldValues, UseFormSetValue, UseFormWatch } from 'react-hook-form';
|
|
2
|
+
import { Control, FieldValues, UseFormSetValue, UseFormUnregister, UseFormWatch } from 'react-hook-form';
|
|
3
3
|
import { IOption } from './option';
|
|
4
4
|
export interface IFieldLiveData {
|
|
5
5
|
action: (data: string, ...args: unknown[]) => Promise<Array<IOption>>;
|
|
@@ -24,4 +24,5 @@ export interface IFieldProps {
|
|
|
24
24
|
control: Control<FieldValues, unknown>;
|
|
25
25
|
watch: UseFormWatch<FieldValues>;
|
|
26
26
|
setValue: UseFormSetValue<FieldValues>;
|
|
27
|
+
unregister: UseFormUnregister<FieldValues>;
|
|
27
28
|
}
|
package/dist/modal.js
CHANGED
|
@@ -81,7 +81,8 @@ const Modal = ({ open, close, config }) => {
|
|
|
81
81
|
const props = {
|
|
82
82
|
control,
|
|
83
83
|
watch,
|
|
84
|
-
setValue
|
|
84
|
+
setValue,
|
|
85
|
+
unregister
|
|
85
86
|
};
|
|
86
87
|
return element.elementType === 'input'
|
|
87
88
|
? react_1.default.createElement(make_input_1.default, Object.assign({}, props, { key: `modal-input-${index}`, element: element }))
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dynamic-modal",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "The dynamic-modal is a solution of creation differents modals into project using a json configuration file",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "tsc",
|
|
8
8
|
"lint": "eslint .",
|
|
9
|
+
"publish": "npm publish --access public",
|
|
9
10
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
10
11
|
},
|
|
11
12
|
"repository": {
|
|
@@ -19,11 +19,11 @@ export interface IFieldRender {
|
|
|
19
19
|
liveSearching?: boolean;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue'> {
|
|
22
|
+
export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue'|'unregister'> {
|
|
23
23
|
element: Partial<Pick<IField, 'enableIf'|'renderIf'|'name' >> & Partial<Record<'liveData', IModalLiveDataCondition>>
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const useFieldRender = (
|
|
26
|
+
export const useFieldRender = ({element, setValue, unregister}: IFieldRenderProps): IFieldRender => {
|
|
27
27
|
const [render, setRender] = useState<boolean|null>(null)
|
|
28
28
|
const [enable, setEnable] = useState<boolean|null>(null)
|
|
29
29
|
const [liveSearching, setLiveSearching] = useState<boolean>(false)
|
|
@@ -31,67 +31,71 @@ export const useFieldRender = (props: IFieldRenderProps): IFieldRender => {
|
|
|
31
31
|
|
|
32
32
|
const renderCondition = useMemo<boolean>(
|
|
33
33
|
() => {
|
|
34
|
-
const isRender: boolean =
|
|
34
|
+
const isRender: boolean = element.renderIf !== undefined
|
|
35
35
|
if (render === null) setRender(!isRender)
|
|
36
36
|
return isRender
|
|
37
|
-
}, [
|
|
37
|
+
}, [element.renderIf, render]
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
const enableCondition = useMemo<boolean>(
|
|
41
41
|
() => {
|
|
42
|
-
const isEnable: boolean =
|
|
42
|
+
const isEnable: boolean = element.enableIf !== undefined
|
|
43
43
|
if (enable === null) setEnable(!isEnable)
|
|
44
44
|
return isEnable
|
|
45
|
-
}, [
|
|
45
|
+
}, [element.enableIf, enable]
|
|
46
46
|
)
|
|
47
47
|
|
|
48
48
|
const liveDataCondition = useMemo<boolean>(
|
|
49
49
|
() => {
|
|
50
|
-
return
|
|
51
|
-
}, [
|
|
50
|
+
return element.liveData !== undefined
|
|
51
|
+
}, [element.liveData]
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
const renderConditionList: Array<string> = useMemo(() => {
|
|
55
|
-
return renderCondition ? Object.keys(
|
|
56
|
-
}, [
|
|
55
|
+
return renderCondition ? Object.keys(element.renderIf as IModalRenderCondition) : []
|
|
56
|
+
}, [element.renderIf, renderCondition])
|
|
57
57
|
|
|
58
58
|
const enableConditionList: Array<string> = useMemo(() => {
|
|
59
|
-
return enableCondition ? Object.keys(
|
|
60
|
-
}, [enableCondition,
|
|
59
|
+
return enableCondition ? Object.keys(element.enableIf as IModalRenderCondition) : []
|
|
60
|
+
}, [enableCondition, element.enableIf])
|
|
61
61
|
|
|
62
62
|
const liveDataAction = useCallback(
|
|
63
63
|
async (field: string |number | Array<unknown>, formData: IFormData) => {
|
|
64
|
-
if (typeof field === 'string' &&
|
|
65
|
-
const options =
|
|
64
|
+
if (typeof field === 'string' && element.liveData?.action) {
|
|
65
|
+
const options = element.liveData.action(field, formData)
|
|
66
66
|
return options ?? []
|
|
67
67
|
}
|
|
68
68
|
return [] as Array<IOption>
|
|
69
|
-
}, [
|
|
69
|
+
}, [element.liveData]
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
const checkField = useCallback(
|
|
73
73
|
async (formData: IFormData, { name }: IWatchEvent) => {
|
|
74
74
|
const key: string = name ?? ''
|
|
75
75
|
const targetField = formData[key] as string | number
|
|
76
|
+
const fieldValidValue: boolean = targetField !== undefined && targetField !== null && targetField !== ''
|
|
76
77
|
|
|
77
|
-
if (renderCondition && renderConditionList.includes(key)) {
|
|
78
|
-
const renderStatus: boolean = (
|
|
79
|
-
if (render !== renderStatus)
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
if (renderCondition && renderConditionList.includes(key) && fieldValidValue) {
|
|
79
|
+
const renderStatus: boolean = (element.renderIf as IModalRenderCondition)[key].includes(targetField) || (element.renderIf as IModalRenderCondition)[key].includes('*')
|
|
80
|
+
if (render !== renderStatus) {
|
|
81
|
+
setRender(renderStatus)
|
|
82
|
+
if(!renderStatus) unregister(element.name as string)
|
|
83
|
+
}
|
|
84
|
+
} else if (enableCondition && enableConditionList.includes(key) && fieldValidValue) {
|
|
85
|
+
const enableStatus: boolean = (element.enableIf as IModalRenderCondition)[key].includes(targetField) || (element.enableIf as IModalRenderCondition)[key].includes('')
|
|
82
86
|
if (enable !== enableStatus) setEnable(enableStatus)
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
if (liveDataCondition &&
|
|
89
|
+
if (liveDataCondition && element.liveData?.condition.includes(key)) {
|
|
86
90
|
if (targetField) {
|
|
87
91
|
setLiveSearching(true)
|
|
88
92
|
const options: Array<IOption> = await liveDataAction(targetField, formData)
|
|
89
|
-
if (liveData && JSON.stringify(liveData) !== JSON.stringify(options)) {
|
|
93
|
+
if (liveData && JSON.stringify(liveData) !== JSON.stringify(options)) { setValue(element.name as string, options) }
|
|
90
94
|
setLiveData(options)
|
|
91
95
|
setLiveSearching(false)
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
|
-
}, [enable, enableCondition, enableConditionList, liveData, liveDataAction, liveDataCondition,
|
|
98
|
+
}, [enable, enableCondition, enableConditionList, liveData, liveDataAction, liveDataCondition, render, renderCondition, renderConditionList]
|
|
95
99
|
)
|
|
96
100
|
|
|
97
101
|
return {
|
package/src/interfaces/field.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CSSProperties } from 'react'
|
|
2
|
-
import { Control, FieldValues, UseFormSetValue, UseFormWatch } from 'react-hook-form'
|
|
2
|
+
import { Control, FieldValues, UseFormSetValue, UseFormUnregister, UseFormWatch } from 'react-hook-form'
|
|
3
3
|
import { IOption } from './option'
|
|
4
4
|
|
|
5
5
|
export interface IFieldLiveData {
|
|
@@ -26,5 +26,6 @@ export interface IField {
|
|
|
26
26
|
export interface IFieldProps {
|
|
27
27
|
control: Control<FieldValues, unknown>;
|
|
28
28
|
watch: UseFormWatch<FieldValues>;
|
|
29
|
-
setValue: UseFormSetValue<FieldValues
|
|
29
|
+
setValue: UseFormSetValue<FieldValues>;
|
|
30
|
+
unregister: UseFormUnregister<FieldValues>;
|
|
30
31
|
}
|