dynamic-modal 1.0.5 → 1.0.7
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/components/input-upload/input-upload.js +3 -1
- package/dist/components/make-autocomplete/make-autocomplete.js +1 -1
- package/dist/components/make-input/make-input.js +1 -1
- package/dist/components/make-multi-select/make-multi-select.js +1 -1
- package/dist/components/make-select/make-select.js +1 -1
- package/dist/components/make-textarea/make-textarea.js +1 -1
- package/dist/components/make-upload/make-upload.js +1 -1
- package/dist/hooks/field-render.js +3 -3
- package/dist/interfaces/input-upload.d.ts +1 -0
- package/dist/interfaces/make-upload.d.ts +1 -0
- package/dist/interfaces/modal.d.ts +2 -2
- package/dist/modal.js +1 -1
- package/package.json +1 -1
- package/src/components/input-upload/input-upload.tsx +2 -1
- package/src/components/make-autocomplete/make-autocomplete.tsx +2 -0
- package/src/components/make-input/make-input.tsx +2 -0
- package/src/components/make-multi-select/make-multi-select.tsx +2 -0
- package/src/components/make-select/make-select.tsx +2 -0
- package/src/components/make-textarea/make-textarea.tsx +2 -0
- package/src/components/make-upload/make-upload.tsx +1 -0
- package/src/hooks/field-render.ts +3 -3
- package/src/interfaces/input-upload.ts +1 -0
- package/src/interfaces/make-upload.ts +1 -0
- package/src/interfaces/modal.ts +2 -2
- package/src/modal.tsx +1 -1
|
@@ -38,7 +38,7 @@ const react_1 = __importStar(require("react"));
|
|
|
38
38
|
const general_1 = require("../../tools/general");
|
|
39
39
|
const InputUpload = (_a) => {
|
|
40
40
|
var _b;
|
|
41
|
-
var { onChange } = _a, props = __rest(_a, ["onChange"]);
|
|
41
|
+
var { onChange, readAsArrayBuffer } = _a, props = __rest(_a, ["onChange", "readAsArrayBuffer"]);
|
|
42
42
|
const onChangeHandler = (event) => {
|
|
43
43
|
if (props.read && event.target.files) {
|
|
44
44
|
readFileBlob(event.target.files[0], false)
|
|
@@ -57,6 +57,8 @@ const InputUpload = (_a) => {
|
|
|
57
57
|
const fileReader = new FileReader();
|
|
58
58
|
if (image)
|
|
59
59
|
fileReader.readAsDataURL(blob);
|
|
60
|
+
else if (readAsArrayBuffer)
|
|
61
|
+
fileReader.readAsArrayBuffer(blob);
|
|
60
62
|
else
|
|
61
63
|
fileReader.readAsText(blob);
|
|
62
64
|
fileReader.onload = () => {
|
|
@@ -56,7 +56,7 @@ const MakeAutocomplete = (_a) => {
|
|
|
56
56
|
}
|
|
57
57
|
}, render: ({ field: { onChange, value }, fieldState: { invalid } }) => {
|
|
58
58
|
var _a, _b, _c, _d;
|
|
59
|
-
return (react_1.default.createElement(react_2.Autocomplete, Object.assign({ size: 'sm' }, element, { isDisabled: (_a = element.disabled) !== null && _a !== void 0 ? _a : !enable, id: (_b = element.id) !== null && _b !== void 0 ? _b : (0, general_1.generateId)(), onSelectionChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectedKey: value, errorMessage: invalid ? ((_c = element.validation.message) !== null && _c !== void 0 ? _c : '') : undefined }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.AutocompleteItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
59
|
+
return (react_1.default.createElement(react_2.Autocomplete, Object.assign({ size: 'sm' }, element, { isDisabled: (_a = element.disabled) !== null && _a !== void 0 ? _a : !enable, id: (_b = element.id) !== null && _b !== void 0 ? _b : (0, general_1.generateId)(), onSelectionChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectedKey: value, color: invalid ? 'danger' : 'success', isInvalid: invalid, errorMessage: invalid ? ((_c = element.validation.message) !== null && _c !== void 0 ? _c : '') : undefined }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.AutocompleteItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
60
60
|
} })
|
|
61
61
|
: react_1.default.createElement(react_1.default.Fragment, null));
|
|
62
62
|
};
|
|
@@ -56,7 +56,7 @@ const MakeInput = (_a) => {
|
|
|
56
56
|
}
|
|
57
57
|
}, render: ({ field: { onChange, value }, fieldState: { invalid } }) => {
|
|
58
58
|
var _a, _b, _c;
|
|
59
|
-
return (react_1.default.createElement(react_2.Input, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, value: value !== null && value !== void 0 ? value : '', errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable })));
|
|
59
|
+
return (react_1.default.createElement(react_2.Input, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, value: value !== null && value !== void 0 ? value : '', color: invalid ? 'danger' : 'success', isInvalid: invalid, errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable })));
|
|
60
60
|
} })
|
|
61
61
|
: null);
|
|
62
62
|
};
|
|
@@ -56,7 +56,7 @@ const MakeMultiSelect = (_a) => {
|
|
|
56
56
|
}
|
|
57
57
|
}, render: ({ field: { onChange, value }, fieldState: { invalid } }) => {
|
|
58
58
|
var _a, _b, _c, _d;
|
|
59
|
-
return (react_1.default.createElement(react_2.Select, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onSelectionChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectionMode: "multiple", selectedKeys: value, errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable, className: 'max-w-lg' }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.SelectItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
59
|
+
return (react_1.default.createElement(react_2.Select, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onSelectionChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectionMode: "multiple", selectedKeys: value, color: invalid ? 'danger' : 'success', isInvalid: invalid, errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable, className: 'max-w-lg' }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.SelectItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
60
60
|
} })
|
|
61
61
|
: null);
|
|
62
62
|
};
|
|
@@ -56,7 +56,7 @@ const MakeSelect = (_a) => {
|
|
|
56
56
|
}
|
|
57
57
|
}, render: ({ field: { onChange, value }, fieldState: { invalid } }) => {
|
|
58
58
|
var _a, _b, _c, _d;
|
|
59
|
-
return (react_1.default.createElement(react_2.Select, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectedKeys: [value], errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.SelectItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
59
|
+
return (react_1.default.createElement(react_2.Select, Object.assign({ size: 'sm' }, element, { id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, label: liveSearching ? 'Loading...' : element.label, selectedKeys: [value], color: invalid ? 'danger' : 'success', isInvalid: invalid, errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable }), (liveData || ((_d = element.options) !== null && _d !== void 0 ? _d : [])).map((opt) => (react_1.default.createElement(react_2.SelectItem, { key: opt.id, value: opt.id }, opt.name)))));
|
|
60
60
|
} })
|
|
61
61
|
: react_1.default.createElement(react_1.default.Fragment, null));
|
|
62
62
|
};
|
|
@@ -56,7 +56,7 @@ const MakeTextarea = (_a) => {
|
|
|
56
56
|
}
|
|
57
57
|
}, render: ({ field: { onChange, value }, fieldState: { invalid } }) => {
|
|
58
58
|
var _a, _b, _c;
|
|
59
|
-
return (react_1.default.createElement(react_2.Textarea, Object.assign({}, element, { disableAutosize: true, id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, label: element.label, value: value !== null && value !== void 0 ? value : '', errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable })));
|
|
59
|
+
return (react_1.default.createElement(react_2.Textarea, Object.assign({}, element, { disableAutosize: true, id: (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(), onChange: onChange, label: element.label, value: value !== null && value !== void 0 ? value : '', color: invalid ? 'danger' : 'success', isInvalid: invalid, errorMessage: invalid ? ((_b = element.validation.message) !== null && _b !== void 0 ? _b : '') : undefined, disabled: (_c = element.disabled) !== null && _c !== void 0 ? _c : !enable })));
|
|
60
60
|
} })
|
|
61
61
|
: null);
|
|
62
62
|
};
|
|
@@ -19,7 +19,7 @@ const MakeUpload = (props) => {
|
|
|
19
19
|
}
|
|
20
20
|
}, render: ({ field: { onChange } }) => {
|
|
21
21
|
var _a;
|
|
22
|
-
return (react_1.default.createElement(input_upload_1.default, { id: props.element.id, name: props.element.name, disabled: (_a = props.element.disabled) !== null && _a !== void 0 ? _a : !enable, onChange: onChange, label: props.element.label, helpText: props.element.helpText, style: props.element.styles, accept: props.element.accept, read: props.element.read }));
|
|
22
|
+
return (react_1.default.createElement(input_upload_1.default, { id: props.element.id, name: props.element.name, disabled: (_a = props.element.disabled) !== null && _a !== void 0 ? _a : !enable, onChange: onChange, label: props.element.label, helpText: props.element.helpText, style: props.element.styles, accept: props.element.accept, read: props.element.read, readAsArrayBuffer: props.element.readAsArrayBuffer }));
|
|
23
23
|
} })
|
|
24
24
|
: null);
|
|
25
25
|
};
|
|
@@ -51,16 +51,16 @@ const useFieldRender = (props) => {
|
|
|
51
51
|
const key = name !== null && name !== void 0 ? name : '';
|
|
52
52
|
const targetField = formData[key];
|
|
53
53
|
if (renderCondition && renderConditionList.includes(key)) {
|
|
54
|
-
const renderStatus = props.element.renderIf[key].includes(targetField);
|
|
54
|
+
const renderStatus = targetField === '*' ? true : props.element.renderIf[key].includes(targetField);
|
|
55
55
|
if (render !== renderStatus)
|
|
56
56
|
setRender(renderStatus);
|
|
57
57
|
}
|
|
58
58
|
else if (enableCondition && enableConditionList.includes(key)) {
|
|
59
|
-
const enableStatus = props.element.enableIf[key].includes(targetField);
|
|
59
|
+
const enableStatus = targetField === '*' ? true : props.element.enableIf[key].includes(targetField);
|
|
60
60
|
if (enable !== enableStatus)
|
|
61
61
|
setEnable(enableStatus);
|
|
62
62
|
}
|
|
63
|
-
if (liveDataCondition &&
|
|
63
|
+
if (liveDataCondition && ((_b = props.element.liveData) === null || _b === void 0 ? void 0 : _b.condition.includes(key))) {
|
|
64
64
|
if (targetField) {
|
|
65
65
|
setLiveSearching(true);
|
|
66
66
|
const options = yield liveDataAction(targetField, formData);
|
|
@@ -12,10 +12,10 @@ import { IMakeButton } from './make-button';
|
|
|
12
12
|
import { IMakeAutoComplete } from './make-autocomplete';
|
|
13
13
|
export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeTextarea | IMakeToggle | IMakeMultiSelect | IMakeText | IMakeUpload | IMakeButton | IMakeAutoComplete;
|
|
14
14
|
export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle | IMakeMultiSelect;
|
|
15
|
-
export type IModalRenderCondition = Record<string, Array<string | number>>;
|
|
15
|
+
export type IModalRenderCondition = Record<string, Array<string | number | '*'>>;
|
|
16
16
|
export type IModalLiveDataCondition = {
|
|
17
17
|
action: (data: string, ...args: any[]) => Promise<Array<IOption>>;
|
|
18
|
-
condition: string
|
|
18
|
+
condition: Array<string>;
|
|
19
19
|
};
|
|
20
20
|
export interface IModalConfigProps {
|
|
21
21
|
fields: Array<IModalField>;
|
package/dist/modal.js
CHANGED
|
@@ -127,7 +127,7 @@ const Modal = ({ open, close, config }) => {
|
|
|
127
127
|
? react_1.default.createElement(portal_1.Portal, { closeTime: 200, portalOpen: open, portalTag: '#modal-portal' },
|
|
128
128
|
react_1.default.createElement("div", { className: 'rounded bg-white relative w-auto h-auto min-h-[200px] min-w-[500px]', style: Object.assign({}, modalReady.styles) },
|
|
129
129
|
react_1.default.createElement("form", { className: 'flex flex-col p-4 gap-4', autoComplete: 'off', onSubmit: handleSubmit(actionHandler) },
|
|
130
|
-
react_1.default.createElement("h2", { className: 'text-bold text-center border-b pb-4' }, modalReady.title),
|
|
130
|
+
react_1.default.createElement("h2", { className: 'text-bold text-center border-b pb-4 font-semibold' }, modalReady.title),
|
|
131
131
|
react_1.default.createElement("div", { className: 'flex flex-col items-center gap-4 py-4', style: {
|
|
132
132
|
overflowY: modalReady.overFlowBody ? 'auto' : undefined,
|
|
133
133
|
height: modalReady.overFlowBody,
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@ import React, { ChangeEvent, FC, useMemo } from 'react'
|
|
|
2
2
|
import { IFileResult, IInputUpload } from '../../interfaces/input-upload'
|
|
3
3
|
import { generateId } from '../../tools/general'
|
|
4
4
|
|
|
5
|
-
const InputUpload: FC<IInputUpload> = ({ onChange, ...props }: IInputUpload) => {
|
|
5
|
+
const InputUpload: FC<IInputUpload> = ({ onChange, readAsArrayBuffer, ...props }: IInputUpload) => {
|
|
6
6
|
|
|
7
7
|
const onChangeHandler = (event: ChangeEvent<HTMLInputElement>) => {
|
|
8
8
|
if (props.read && event.target.files) {
|
|
@@ -21,6 +21,7 @@ const InputUpload: FC<IInputUpload> = ({ onChange, ...props }: IInputUpload) =>
|
|
|
21
21
|
return new Promise((resolve, reject) => {
|
|
22
22
|
const fileReader = new FileReader()
|
|
23
23
|
if(image) fileReader.readAsDataURL(blob)
|
|
24
|
+
else if (readAsArrayBuffer) fileReader.readAsArrayBuffer(blob)
|
|
24
25
|
else fileReader.readAsText(blob)
|
|
25
26
|
|
|
26
27
|
fileReader.onload = () => {
|
|
@@ -34,6 +34,8 @@ const MakeAutocomplete: FC<IMakeAutoCompleteProps> = ({ element, ...props }) =>
|
|
|
34
34
|
onSelectionChange={onChange}
|
|
35
35
|
label={liveSearching ? 'Loading...' : element.label}
|
|
36
36
|
selectedKey={value}
|
|
37
|
+
color={invalid ? 'danger' : 'success'}
|
|
38
|
+
isInvalid={invalid}
|
|
37
39
|
errorMessage={invalid ? (element.validation.message ?? '') : undefined}
|
|
38
40
|
>
|
|
39
41
|
{
|
|
@@ -32,6 +32,8 @@ const MakeInput: FC<IMakeInputProps> = ({ element, ...props }) => {
|
|
|
32
32
|
id={element.id ?? generateId()}
|
|
33
33
|
onChange={onChange}
|
|
34
34
|
value={value ?? ''}
|
|
35
|
+
color={invalid ? 'danger' : 'success'}
|
|
36
|
+
isInvalid={invalid}
|
|
35
37
|
errorMessage={invalid ? (element.validation.message ?? '') : undefined}
|
|
36
38
|
disabled={element.disabled ?? !enable}
|
|
37
39
|
/>
|
|
@@ -34,6 +34,8 @@ const MakeMultiSelect: FC<IMakeMultiSelectProps> = ({ element, ...props }) => {
|
|
|
34
34
|
label={liveSearching ? 'Loading...' : element.label}
|
|
35
35
|
selectionMode="multiple"
|
|
36
36
|
selectedKeys={value}
|
|
37
|
+
color={invalid ? 'danger' : 'success'}
|
|
38
|
+
isInvalid={invalid}
|
|
37
39
|
errorMessage={invalid ? (element.validation.message ?? '') : undefined}
|
|
38
40
|
disabled={element.disabled ?? !enable}
|
|
39
41
|
className='max-w-lg'
|
|
@@ -33,6 +33,8 @@ const MakeSelect: FC<IMakeSelectProps> = ({ element, ...props }) => {
|
|
|
33
33
|
onChange={onChange}
|
|
34
34
|
label={liveSearching ? 'Loading...' : element.label}
|
|
35
35
|
selectedKeys={[value]}
|
|
36
|
+
color={invalid ? 'danger' : 'success'}
|
|
37
|
+
isInvalid={invalid}
|
|
36
38
|
errorMessage={invalid ? (element.validation.message ?? '') : undefined}
|
|
37
39
|
disabled={element.disabled ?? !enable}
|
|
38
40
|
>
|
|
@@ -33,6 +33,8 @@ const MakeTextarea: FC<IMakeTextareaProps> = ({ element, ...props }) => {
|
|
|
33
33
|
onChange={onChange}
|
|
34
34
|
label={element.label}
|
|
35
35
|
value={value ?? ''}
|
|
36
|
+
color={invalid ? 'danger' : 'success'}
|
|
37
|
+
isInvalid={invalid}
|
|
36
38
|
errorMessage={invalid ? (element.validation.message ?? '') : undefined}
|
|
37
39
|
disabled={element.disabled ?? !enable}
|
|
38
40
|
/>
|
|
@@ -75,14 +75,14 @@ export const useFieldRender = (props: IFieldRenderProps): IFieldRender => {
|
|
|
75
75
|
const targetField = formData[key] as string | number
|
|
76
76
|
|
|
77
77
|
if (renderCondition && renderConditionList.includes(key)) {
|
|
78
|
-
const renderStatus: boolean = (props.element.renderIf as IModalRenderCondition)[key].includes(targetField)
|
|
78
|
+
const renderStatus: boolean = targetField === '*' ? true : (props.element.renderIf as IModalRenderCondition)[key].includes(targetField)
|
|
79
79
|
if (render !== renderStatus) setRender(renderStatus)
|
|
80
80
|
} else if (enableCondition && enableConditionList.includes(key)) {
|
|
81
|
-
const enableStatus: boolean = (props.element.enableIf as IModalRenderCondition)[key].includes(targetField)
|
|
81
|
+
const enableStatus: boolean = targetField === '*' ? true : (props.element.enableIf as IModalRenderCondition)[key].includes(targetField)
|
|
82
82
|
if (enable !== enableStatus) setEnable(enableStatus)
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
if (liveDataCondition &&
|
|
85
|
+
if (liveDataCondition && props.element.liveData?.condition.includes(key)) {
|
|
86
86
|
if (targetField) {
|
|
87
87
|
setLiveSearching(true)
|
|
88
88
|
const options: Array<IOption> = await liveDataAction(targetField, formData)
|
package/src/interfaces/modal.ts
CHANGED
|
@@ -16,11 +16,11 @@ export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeText
|
|
|
16
16
|
|
|
17
17
|
export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle | IMakeMultiSelect
|
|
18
18
|
|
|
19
|
-
export type IModalRenderCondition = Record<string, Array<string | number>>
|
|
19
|
+
export type IModalRenderCondition = Record<string, Array<string | number | '*'>>
|
|
20
20
|
|
|
21
21
|
export type IModalLiveDataCondition = {
|
|
22
22
|
action: (data: string, ...args: any[]) => Promise<Array<IOption>>;
|
|
23
|
-
condition: string
|
|
23
|
+
condition: Array<string>
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export interface IModalConfigProps {
|
package/src/modal.tsx
CHANGED
|
@@ -115,7 +115,7 @@ export const Modal = ({ open, close, config }: IModal) => {
|
|
|
115
115
|
? <Portal closeTime={200} portalOpen={open} portalTag={'#modal-portal'}>
|
|
116
116
|
<div className='rounded bg-white relative w-auto h-auto min-h-[200px] min-w-[500px]' style={{ ...modalReady.styles }} >
|
|
117
117
|
<form className='flex flex-col p-4 gap-4' autoComplete='off' onSubmit={handleSubmit(actionHandler)}>
|
|
118
|
-
<h2 className='text-bold text-center border-b pb-4'>{modalReady.title}</h2>
|
|
118
|
+
<h2 className='text-bold text-center border-b pb-4 font-semibold'>{modalReady.title}</h2>
|
|
119
119
|
<div
|
|
120
120
|
className='flex flex-col items-center gap-4 py-4'
|
|
121
121
|
style={{
|