dynamic-modal 1.1.19 → 1.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/components/input-upload/input-upload.js +3 -9
  2. package/dist/components/make-button/make-button.js +4 -36
  3. package/dist/components/make-custom-upload/make-custom-upload.js +5 -37
  4. package/dist/components/make-description/make-description.js +4 -9
  5. package/dist/components/make-input/make-input.js +5 -37
  6. package/dist/components/make-select/make-select.js +5 -37
  7. package/dist/components/make-table/make-table.js +12 -53
  8. package/dist/components/make-textarea/make-textarea.js +5 -37
  9. package/dist/components/make-toggle/make-toggle.js +5 -37
  10. package/dist/components/make-upload/make-upload.js +5 -37
  11. package/dist/components/make-watcher/make-watcher.js +4 -36
  12. package/dist/components/portal/portal.js +4 -36
  13. package/dist/context/component/component-state.d.ts +1 -1
  14. package/dist/context/component/component-state.js +4 -36
  15. package/dist/hooks/modal-handler.js +1 -1
  16. package/dist/hooks/use-enable-if.js +1 -1
  17. package/dist/hooks/use-live-data.js +1 -1
  18. package/dist/hooks/use-render-if.js +1 -1
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.js +4 -0
  21. package/dist/interfaces/make-description.d.ts +2 -1
  22. package/dist/modal.d.ts +1 -2
  23. package/dist/modal.js +35 -75
  24. package/dist/src/components/input-upload/input-upload.d.ts +4 -0
  25. package/dist/src/components/input-upload/input-upload.js +41 -0
  26. package/dist/src/components/make-button/make-button.d.ts +4 -0
  27. package/dist/src/components/make-button/make-button.js +14 -0
  28. package/dist/src/components/make-custom-upload/make-custom-upload.d.ts +4 -0
  29. package/dist/src/components/make-custom-upload/make-custom-upload.js +60 -0
  30. package/dist/src/components/make-description/make-description.d.ts +4 -0
  31. package/dist/src/components/make-description/make-description.js +6 -0
  32. package/dist/src/components/make-input/make-input.d.ts +4 -0
  33. package/dist/src/components/make-input/make-input.js +60 -0
  34. package/dist/src/components/make-select/make-select.d.ts +4 -0
  35. package/dist/src/components/make-select/make-select.js +78 -0
  36. package/dist/src/components/make-table/make-table.d.ts +4 -0
  37. package/dist/src/components/make-table/make-table.js +100 -0
  38. package/dist/src/components/make-textarea/make-textarea.d.ts +4 -0
  39. package/dist/src/components/make-textarea/make-textarea.js +60 -0
  40. package/dist/src/components/make-toggle/make-toggle.d.ts +4 -0
  41. package/dist/src/components/make-toggle/make-toggle.js +60 -0
  42. package/dist/src/components/make-upload/make-upload.d.ts +4 -0
  43. package/dist/src/components/make-upload/make-upload.js +59 -0
  44. package/dist/src/components/make-watcher/make-watcher.d.ts +4 -0
  45. package/dist/src/components/make-watcher/make-watcher.js +28 -0
  46. package/dist/src/components/portal/portal.d.ts +3 -0
  47. package/dist/src/components/portal/portal.js +28 -0
  48. package/dist/src/context/component/component-state.d.ts +4 -0
  49. package/dist/src/context/component/component-state.js +8 -0
  50. package/dist/src/hooks/modal-handler.d.ts +7 -0
  51. package/dist/src/hooks/modal-handler.js +25 -0
  52. package/dist/src/hooks/use-enable-if.d.ts +10 -0
  53. package/dist/src/hooks/use-enable-if.js +36 -0
  54. package/dist/src/hooks/use-live-data.d.ts +11 -0
  55. package/dist/src/hooks/use-live-data.js +23 -0
  56. package/dist/src/hooks/use-render-if.d.ts +10 -0
  57. package/dist/src/hooks/use-render-if.js +36 -0
  58. package/dist/src/interfaces/component-state.d.ts +29 -0
  59. package/dist/src/interfaces/component-state.js +1 -0
  60. package/dist/src/interfaces/custom-upload.d.ts +12 -0
  61. package/dist/src/interfaces/custom-upload.js +1 -0
  62. package/dist/src/interfaces/field.d.ts +33 -0
  63. package/dist/src/interfaces/field.js +1 -0
  64. package/dist/src/interfaces/input-upload.d.ts +19 -0
  65. package/dist/src/interfaces/input-upload.js +1 -0
  66. package/dist/src/interfaces/make-button.d.ts +20 -0
  67. package/dist/src/interfaces/make-button.js +1 -0
  68. package/{src/interfaces/make-custom-upload.ts → dist/src/interfaces/make-custom-upload.d.ts} +2 -4
  69. package/dist/src/interfaces/make-custom-upload.js +1 -0
  70. package/dist/src/interfaces/make-description.d.ts +13 -0
  71. package/dist/src/interfaces/make-description.js +1 -0
  72. package/{src/interfaces/make-field-group.ts → dist/src/interfaces/make-field-group.d.ts} +5 -8
  73. package/dist/src/interfaces/make-field-group.js +1 -0
  74. package/{src/interfaces/make-input.ts → dist/src/interfaces/make-input.d.ts} +6 -9
  75. package/dist/src/interfaces/make-input.js +1 -0
  76. package/{src/interfaces/make-select.ts → dist/src/interfaces/make-select.d.ts} +6 -8
  77. package/dist/src/interfaces/make-select.js +1 -0
  78. package/dist/src/interfaces/make-table.d.ts +26 -0
  79. package/dist/src/interfaces/make-table.js +1 -0
  80. package/{src/interfaces/make-textarea.ts → dist/src/interfaces/make-textarea.d.ts} +4 -6
  81. package/dist/src/interfaces/make-textarea.js +1 -0
  82. package/{src/interfaces/make-toggle.ts → dist/src/interfaces/make-toggle.d.ts} +2 -4
  83. package/dist/src/interfaces/make-toggle.js +1 -0
  84. package/dist/src/interfaces/make-upload.d.ts +12 -0
  85. package/dist/src/interfaces/make-upload.js +1 -0
  86. package/{src/interfaces/make-watcher.ts → dist/src/interfaces/make-watcher.d.ts} +3 -5
  87. package/dist/src/interfaces/make-watcher.js +1 -0
  88. package/dist/src/interfaces/modal.d.ts +48 -0
  89. package/dist/src/interfaces/modal.js +1 -0
  90. package/dist/src/interfaces/option.d.ts +4 -0
  91. package/dist/src/interfaces/option.js +1 -0
  92. package/dist/src/interfaces/portal.d.ts +8 -0
  93. package/dist/src/interfaces/portal.js +1 -0
  94. package/dist/src/modal.d.ts +3 -0
  95. package/dist/src/modal.js +135 -0
  96. package/dist/src/util/general/general.util.d.ts +3 -0
  97. package/dist/src/util/general/general.util.js +15 -0
  98. package/dist/util/general/general.util.js +1 -1
  99. package/package.json +20 -2
  100. package/README-ES.md +0 -217
  101. package/eslint.config.mjs +0 -72
  102. package/examples/enable-if.ts +0 -128
  103. package/examples/live-data.ts +0 -61
  104. package/examples/render-if.ts +0 -129
  105. package/examples/simple.ts +0 -75
  106. package/index.ts +0 -5
  107. package/src/components/input-upload/input-upload.tsx +0 -82
  108. package/src/components/make-button/make-button.tsx +0 -25
  109. package/src/components/make-custom-upload/make-custom-upload.tsx +0 -100
  110. package/src/components/make-description/make-description.tsx +0 -21
  111. package/src/components/make-input/make-input.tsx +0 -100
  112. package/src/components/make-select/make-select.tsx +0 -125
  113. package/src/components/make-table/make-table.tsx +0 -201
  114. package/src/components/make-textarea/make-textarea.tsx +0 -100
  115. package/src/components/make-toggle/make-toggle.tsx +0 -100
  116. package/src/components/make-upload/make-upload.tsx +0 -92
  117. package/src/components/make-watcher/make-watcher.tsx +0 -49
  118. package/src/components/portal/portal.tsx +0 -41
  119. package/src/context/component/component-state.tsx +0 -25
  120. package/src/hooks/modal-handler.ts +0 -41
  121. package/src/hooks/use-enable-if.ts +0 -68
  122. package/src/hooks/use-live-data.ts +0 -47
  123. package/src/hooks/use-render-if.ts +0 -69
  124. package/src/interfaces/component-state.ts +0 -55
  125. package/src/interfaces/custom-upload.ts +0 -13
  126. package/src/interfaces/field.ts +0 -43
  127. package/src/interfaces/input-upload.ts +0 -23
  128. package/src/interfaces/make-button.ts +0 -23
  129. package/src/interfaces/make-description.ts +0 -15
  130. package/src/interfaces/make-table.ts +0 -29
  131. package/src/interfaces/make-upload.ts +0 -14
  132. package/src/interfaces/modal.ts +0 -75
  133. package/src/interfaces/option.ts +0 -4
  134. package/src/interfaces/portal.ts +0 -9
  135. package/src/modal.tsx +0 -331
  136. package/src/util/general/general.util.ts +0 -29
  137. package/tsconfig.json +0 -13
@@ -1,13 +0,0 @@
1
- import { ChangeEvent, CSSProperties } from 'react';
2
-
3
- export interface ICustomUpload {
4
- id?: string;
5
- value?: string;
6
- onChange: (event: ChangeEvent<HTMLInputElement>) => void;
7
- accept?: string;
8
- label?: string;
9
- helpText?: string;
10
- style?: CSSProperties;
11
- name: string;
12
- disabled?: boolean;
13
- }
@@ -1,43 +0,0 @@
1
- import { CSSProperties } from 'react';
2
- import {
3
- Control,
4
- FieldValues,
5
- UseFormSetValue,
6
- UseFormUnregister,
7
- UseFormWatch,
8
- } from 'react-hook-form';
9
-
10
- import { IModalRenderCondition } from './modal';
11
-
12
- export interface IValidationBase<T> {
13
- value: T;
14
- message: string;
15
- }
16
-
17
- export interface IField {
18
- name: string;
19
- id?: string;
20
- label?: string;
21
- style?: CSSProperties;
22
- placeholder?: string;
23
- defaultValue?: any;
24
- renderIf?: IModalRenderCondition;
25
- enableIf?: IModalRenderCondition;
26
- validation: {
27
- required: boolean;
28
- regex?: RegExp;
29
- message?: string;
30
- maxLength?: IValidationBase<number>;
31
- minLength?: IValidationBase<number>;
32
- min?: IValidationBase<number | string>;
33
- max?: IValidationBase<number | string>;
34
- };
35
- disabled?: boolean;
36
- }
37
-
38
- export interface IFieldProps {
39
- control: Control<FieldValues, unknown>;
40
- watch: UseFormWatch<FieldValues>;
41
- setValue: UseFormSetValue<FieldValues>;
42
- unregister: UseFormUnregister<FieldValues>;
43
- }
@@ -1,23 +0,0 @@
1
- import { ChangeEvent, CSSProperties } from 'react';
2
-
3
- export interface IFileResult {
4
- name: string;
5
- size: number;
6
- data: string;
7
- }
8
-
9
- export interface IInputUpload {
10
- id?: string;
11
- value?: string;
12
- onChange: (
13
- event: ChangeEvent<HTMLInputElement> | IFileResult | FileList | null,
14
- ) => void;
15
- accept?: string;
16
- label?: string;
17
- helpText?: string;
18
- style?: CSSProperties;
19
- readAsArrayBuffer?: boolean;
20
- name: string;
21
- disabled?: boolean;
22
- read?: boolean;
23
- }
@@ -1,23 +0,0 @@
1
- import { CSSProperties, ReactNode } from 'react';
2
-
3
- import { IFieldProps } from './field';
4
- import { FieldValues, UseFormGetValues } from 'react-hook-form';
5
-
6
- export interface IMakeButton {
7
- id?: string;
8
- elementType: 'button';
9
- disabled?: boolean;
10
- className?: string;
11
- style?: CSSProperties;
12
- variant?: string;
13
- text?: string;
14
- type?: 'button' | 'submit' | 'reset';
15
- onClick?: (formData: FieldValues) => void;
16
- color?: string;
17
- children?: ReactNode
18
- }
19
-
20
- export interface IMakeButtonProps extends IFieldProps {
21
- element: Omit<IMakeButton, 'elementType'>;
22
- getValues: UseFormGetValues<FieldValues>;
23
- }
@@ -1,15 +0,0 @@
1
- import { CSSProperties, FC } from 'react';
2
-
3
- import { IFieldProps } from './field';
4
-
5
- export interface IMakeDescription {
6
- elementType: 'text';
7
- text: string;
8
- containerStyle?: CSSProperties;
9
- textStyle?: CSSProperties;
10
- Icon?: FC;
11
- }
12
-
13
- export interface IMakeDescriptionProps extends IFieldProps {
14
- element: Omit<IMakeDescription, 'elementType'>;
15
- }
@@ -1,29 +0,0 @@
1
- import { CSSProperties, JSX } from 'react';
2
- import { IField, IFieldProps } from './field';
3
- import { IModalLiveDataCondition } from './modal';
4
-
5
- export interface ITableColumn extends Pick<IField, 'style'>{
6
- title: string,
7
- key?: string,
8
- isButton?: boolean
9
- isDeleteAction?: boolean
10
- Icon?: (props: any) => JSX.Element
11
- action?: (row: any) => void
12
- }
13
-
14
- export interface IMakeTable extends Omit<IField, 'label' | 'defaultValue' | 'validation' | 'disabled' | 'enableIf' | 'id'> {
15
- elementType: 'table';
16
- selectValueName: string
17
- selectTitleName: string
18
- selectPlaceholder?: string
19
- selectActionName: string
20
- buttonStyle?: CSSProperties
21
- columns: Array<ITableColumn>
22
- defaultSelected?: Array<string>
23
- data: Array<any>
24
- liveData?: IModalLiveDataCondition;
25
- }
26
-
27
- export interface IMakeTableProps extends Omit<IFieldProps, 'unregister'> {
28
- element: Omit<IMakeTable, 'elementType'>;
29
- }
@@ -1,14 +0,0 @@
1
- import { IField, IFieldProps } from './field';
2
-
3
- export interface IMakeUpload extends Omit<IField, 'defaultValue'> {
4
- elementType: 'upload';
5
- helpText?: string;
6
- read: boolean;
7
- image?: boolean;
8
- accept?: string;
9
- readAsArrayBuffer?: boolean;
10
- }
11
-
12
- export interface IMakeUploadProps extends IFieldProps {
13
- element: Omit<IMakeUpload, 'elementType'>;
14
- }
@@ -1,75 +0,0 @@
1
- import { CSSProperties } from 'react';
2
-
3
- import { IMakeSelect } from './make-select';
4
- import { IMakeInput } from './make-input';
5
- import { IMakeTextarea } from './make-textarea';
6
- import { IMakeToggle } from './make-toggle';
7
- import { IMakeDescription } from './make-description';
8
- import { IMakeFieldGroup } from './make-field-group';
9
- import { IMakeUpload } from './make-upload';
10
- import { IOption } from './option';
11
- import { IMakeButton } from './make-button';
12
- import { IMakeCustomUpload } from './make-custom-upload';
13
- import { IMakeWatcher } from './make-watcher';
14
- import { IMakeTable } from './make-table';
15
-
16
- export type IModalField =
17
- | IMakeSelect
18
- | IMakeInput
19
- | IMakeFieldGroup
20
- | IMakeTextarea
21
- | IMakeToggle
22
- | IMakeDescription
23
- | IMakeUpload
24
- | IMakeCustomUpload
25
- | IMakeWatcher
26
- | IMakeButton
27
- | IMakeTable;
28
-
29
- export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle;
30
-
31
- export interface IModalRenderAction {
32
- action: (data: string, ...args: any[]) => Promise<boolean>;
33
- condition: Array<string>;
34
- }
35
-
36
- export type IModalRenderCriteria = Record<
37
- string,
38
- Array<string | number | boolean> | undefined
39
- >;
40
-
41
- export type IModalRenderCondition = IModalRenderAction | IModalRenderCriteria;
42
-
43
- export type IModalLiveDataCondition = {
44
- action: (data: string, ...args: any[]) => Promise<Array<IOption>>;
45
- condition: Array<string>;
46
- };
47
-
48
- export interface IModalConfigProps {
49
- reservedData?: Record<string, any>;
50
- title: string;
51
- fields: Array<IModalField>;
52
- out: (data: any) => void;
53
- onClose?: () => void;
54
- style?: CSSProperties;
55
- overFlowBody?: string | number;
56
- minHeightBody?: string | number;
57
- useSubmit?: boolean;
58
- useBlur?: boolean;
59
- actions: {
60
- containerStyle?: CSSProperties;
61
- cancel?: Omit<IMakeButton, 'elementType'>;
62
- action: Omit<IMakeButton, 'elementType'>;
63
- };
64
- }
65
-
66
- export type IModalConfigLoader<T = any, D = any> = (
67
- props: T,
68
- action: (modalResult: D) => void,
69
- ) => IModalConfigProps;
70
-
71
- export interface IModal {
72
- open: boolean;
73
- close: () => void;
74
- config: IModalConfigProps;
75
- }
@@ -1,4 +0,0 @@
1
- export interface IOption {
2
- id: string;
3
- name: string;
4
- }
@@ -1,9 +0,0 @@
1
- import { ReactNode } from 'react';
2
-
3
- export interface IPortal {
4
- children: ReactNode;
5
- closeTime: number;
6
- portalOpen: boolean;
7
- portalTag?: string;
8
- useBlur?: boolean;
9
- }
package/src/modal.tsx DELETED
@@ -1,331 +0,0 @@
1
- 'use client';
2
-
3
- import React, { useContext, useEffect, useState } from 'react';
4
- import { useForm } from 'react-hook-form';
5
-
6
- import { Portal } from './components/portal/portal';
7
- import MakeToggle from './components/make-toggle/make-toggle';
8
- import MakeInput from './components/make-input/make-input';
9
- import MakeSelect from './components/make-select/make-select';
10
- import MakeTextarea from './components/make-textarea/make-textarea';
11
- import {
12
- IModal,
13
- IModalField,
14
- IModalConfigProps,
15
- IFormField,
16
- } from './interfaces/modal';
17
- import MakeDescription from './components/make-description/make-description';
18
- import { IFieldProps } from './interfaces/field';
19
- import MakeUpload from './components/make-upload/make-upload';
20
- import MakeButton from './components/make-button/make-button';
21
- import { IMakeInput } from './interfaces/make-input';
22
- import { IMakeSelect } from './interfaces/make-select';
23
- import { IMakeTextarea } from './interfaces/make-textarea';
24
- import { IMakeToggle } from './interfaces/make-toggle';
25
- import { IMakeDescription } from './interfaces/make-description';
26
- import { IMakeUpload } from './interfaces/make-upload';
27
- import { IMakeButton } from './interfaces/make-button';
28
- import { ComponentStateContext } from './context/component/component-state';
29
- import MakeCustomUpload from './components/make-custom-upload/make-custom-upload';
30
- import { IMakeCustomUpload } from './interfaces/make-custom-upload';
31
- import MakeWatcher from './components/make-watcher/make-watcher';
32
- import { IMakeWatcher } from './interfaces/make-watcher';
33
- import MakeTable from './components/make-table/make-table';
34
- import { IMakeTable } from './interfaces/make-table';
35
-
36
- export const Modal = ({ open, close, config }: IModal) => {
37
- const { ModalButtonAction, ModalButtonCancel } = useContext(
38
- ComponentStateContext,
39
- );
40
- const [modalReady, setModalReady] = useState<IModalConfigProps | undefined>(
41
- undefined,
42
- );
43
- const [defaultLoaded, setDefaultLoaded] = useState<boolean>(false);
44
-
45
- const {
46
- control,
47
- handleSubmit,
48
- getValues,
49
- unregister,
50
- setValue,
51
- watch,
52
- trigger,
53
- reset,
54
- getFieldState,
55
- } = useForm();
56
-
57
- const formValueHandler = (element: IFormField) => {
58
- if (
59
- ['group', 'upload', 'custom-upload', 'text'].includes(element.elementType)
60
- )
61
- return;
62
- if (!element.defaultValue && element.renderIf) {
63
- unregister(element.name);
64
- return;
65
- }
66
-
67
- const defaultValue = element.defaultValue ?? '';
68
-
69
- const parsedValue: boolean | string | Array<string> | undefined =
70
- defaultValue === 'true'
71
- ? true
72
- : defaultValue === 'false'
73
- ? false
74
- : defaultValue;
75
-
76
- setValue(element.name, parsedValue ?? '');
77
- };
78
-
79
- const autoLoadGroup = (groupFields: Array<IModalField>) => {
80
- groupFields.forEach((element) => {
81
- formValueHandler(element as IFormField);
82
- });
83
- };
84
-
85
- const autoLoadField = (modalFields: Array<IModalField>) => {
86
- if (defaultLoaded) return;
87
-
88
- modalFields.forEach((element) => {
89
- if (element.elementType === 'group') {
90
- autoLoadGroup(element.groups);
91
- return;
92
- }
93
- formValueHandler(element as IFormField);
94
- });
95
-
96
- setDefaultLoaded(true);
97
- };
98
-
99
- const getUseSubmit = (modalConfig: IModalConfigProps): boolean => {
100
- const useSubmit =
101
- modalConfig.useSubmit === undefined
102
- ? true
103
- : modalConfig.useSubmit === false
104
- ? false
105
- : true;
106
-
107
- return useSubmit;
108
- };
109
-
110
- const getRender = (
111
- { elementType, ...element }: IModalField,
112
- index: number,
113
- isEndOfRender: boolean = false,
114
- ) => {
115
- if (isEndOfRender && modalReady)
116
- setTimeout(() => autoLoadField(modalReady.fields), 200);
117
-
118
- const props: IFieldProps = {
119
- control,
120
- watch,
121
- setValue,
122
- unregister,
123
- };
124
-
125
- return elementType === 'input' ? (
126
- <MakeInput
127
- {...props}
128
- key={`modal-input-${index}`}
129
- element={element as IMakeInput}
130
- />
131
- ) : elementType === 'select' ? (
132
- <MakeSelect
133
- {...props}
134
- key={`modal-select-${index}`}
135
- element={element as IMakeSelect}
136
- />
137
- ) : elementType === 'textarea' ? (
138
- <MakeTextarea
139
- {...props}
140
- key={`modal-textarea-${index}`}
141
- element={element as IMakeTextarea}
142
- />
143
- ) : elementType === 'toggle' ? (
144
- <MakeToggle
145
- {...props}
146
- key={`modal-toggle-${index}`}
147
- element={element as IMakeToggle}
148
- />
149
- ) : elementType === 'text' ? (
150
- <MakeDescription
151
- {...props}
152
- key={`modal-text-${index}`}
153
- element={element as IMakeDescription}
154
- />
155
- ) : elementType === 'upload' ? (
156
- <MakeUpload
157
- {...props}
158
- key={`modal-upload-${index}`}
159
- element={element as IMakeUpload}
160
- />
161
- ) : elementType === 'custom-upload' ? (
162
- <MakeCustomUpload
163
- {...props}
164
- key={`modal-custom-upload-${index}`}
165
- element={element as IMakeCustomUpload}
166
- />
167
- ) : elementType === 'watcher' ? (
168
- <MakeWatcher
169
- {...props}
170
- key={`modal-watcher-${index}`}
171
- element={element as IMakeWatcher}
172
- />
173
- ) : elementType === 'button' ? (
174
- <MakeButton
175
- {...props}
176
- key={`modal-button-${index}`}
177
- element={element as IMakeButton}
178
- getValues={getValues}
179
- />
180
- ) : elementType === 'table' ? (
181
- <MakeTable
182
- {...props}
183
- key={`modal-table-${index}`}
184
- element={element as IMakeTable}
185
- />
186
- ) : null;
187
- };
188
-
189
- const closeHandler = (): void => {
190
- if (modalReady?.onClose) modalReady.onClose();
191
-
192
- setTimeout(() => {
193
- setModalReady(undefined);
194
- setDefaultLoaded(false);
195
- reset();
196
- close();
197
- }, 200);
198
- };
199
-
200
- const manualSubmit = async (): Promise<void> => {
201
- const form = getValues();
202
- const fields = Object.keys(form);
203
- await trigger(fields);
204
-
205
- const validations: Array<boolean> = fields.map((field) => {
206
- const { invalid } = getFieldState(field);
207
-
208
- return invalid;
209
- });
210
-
211
- const result = validations.some((isInvalid) => isInvalid)
212
- ? undefined
213
- : form;
214
-
215
- if (!result) return;
216
-
217
- actionHandler({ ...(modalReady?.reservedData ?? {}), ...form });
218
- };
219
-
220
- const actionHandler = (
221
- data: Record<string, string | number | object>,
222
- ): void => {
223
- modalReady?.out({ ...(modalReady?.reservedData ?? {}), ...data });
224
- closeHandler();
225
- };
226
-
227
- useEffect(() => {
228
- if (open && !modalReady) setModalReady(config);
229
- }, [config, modalReady, open]);
230
-
231
- if (!modalReady) return null;
232
-
233
- return (
234
- <Portal
235
- closeTime={200}
236
- portalOpen={open}
237
- portalTag={'#modal-portal'}
238
- useBlur={modalReady.useBlur}
239
- >
240
- <div
241
- className="rounded bg-white relative w-auto h-auto min-h-[200px] min-w-[500px]"
242
- style={modalReady.style}
243
- >
244
- <form
245
- className="flex flex-col p-4 gap-4"
246
- autoComplete="off"
247
- onSubmit={handleSubmit(actionHandler)}
248
- >
249
- <h2 className="text-bold text-center border-b pb-4 font-semibold">
250
- {modalReady.title}
251
- </h2>
252
- <div
253
- className="flex flex-col gap-4 py-4"
254
- style={{
255
- overflowY: modalReady.overFlowBody ? 'auto' : undefined,
256
- height: modalReady.overFlowBody,
257
- minHeight: modalReady.minHeightBody,
258
- }}
259
- >
260
- {modalReady.fields.map((element, index) => {
261
- const isEndOfRender: boolean =
262
- index + 1 === modalReady.fields.length;
263
-
264
- if (element.elementType === 'group') {
265
- return (
266
- <div
267
- key={`modal-group-${index}`}
268
- className="flex flex-col w-full gap-2"
269
- >
270
- {element.title && (
271
- <h3 className="font-bold border-b-2 pb-2 mb-2">
272
- {element.title}
273
- </h3>
274
- )}
275
- <div
276
- key={`modal-group-${index}`}
277
- className="flex gap-4 w-full"
278
- style={element.style}
279
- >
280
- {element.groups
281
- .filter((sub) =>
282
- [
283
- 'input',
284
- 'select',
285
- 'toggle',
286
- 'multiselect',
287
- 'upload',
288
- 'custom-upload',
289
- 'watcher',
290
- 'button',
291
- 'autocomplete',
292
- ].includes(sub.elementType),
293
- )
294
- .map((sub, subIndex) =>
295
- getRender(sub, index + subIndex, isEndOfRender),
296
- )}
297
- </div>
298
- </div>
299
- );
300
- } else {
301
- return getRender(element, index, isEndOfRender);
302
- }
303
- })}
304
- </div>
305
- <div
306
- className="flex gap-4 items-center justify-center border-t p-2"
307
- style={modalReady?.actions.containerStyle}
308
- >
309
- {modalReady.actions.cancel && (
310
- <ModalButtonCancel
311
- {...modalReady.actions.cancel}
312
- onClick={closeHandler}
313
- />
314
- )}
315
- {getUseSubmit(modalReady) ? (
316
- <ModalButtonAction {...modalReady.actions.action} type="submit" />
317
- ) : (
318
- <ModalButtonAction
319
- {...modalReady.actions.action}
320
- onClick={manualSubmit}
321
- type="button"
322
- />
323
- )}
324
- </div>
325
- </form>
326
- </div>
327
- </Portal>
328
- );
329
- };
330
-
331
- export default Modal;
@@ -1,29 +0,0 @@
1
- 'use client';
2
-
3
- import { IOption } from '../../interfaces/option';
4
-
5
- export const liveDataAction = async (
6
- fieldData: string | number | Array<unknown>,
7
- formData: Record<string, unknown>,
8
- action: (data: string, ...args: any[]) => Promise<IOption[]>,
9
- ) => {
10
- if (typeof fieldData === 'string') {
11
- const options = await action(fieldData, formData);
12
- return options ?? [];
13
- }
14
-
15
- return [] as Array<IOption>;
16
- };
17
-
18
- export const liveDataHandler = async (
19
- fieldData: string | number | Array<unknown>,
20
- formData: Record<string, unknown>,
21
- action: (data: string, ...args: any[]) => Promise<boolean>,
22
- ) => {
23
- if (typeof fieldData === 'string') {
24
- const result = await action(fieldData, formData);
25
- return result ?? false;
26
- }
27
-
28
- return false;
29
- };
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es2020",
4
- "module": "commonjs",
5
- "declaration": true,
6
- "outDir": "./dist",
7
- "strict": true,
8
- "jsx": "react",
9
- "esModuleInterop": true,
10
- "skipLibCheck": true
11
- },
12
- "include": ["src/**/*"]
13
- }