dynamic-modal 1.1.1 → 1.1.4

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/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # dynamic-modal
2
2
 
3
+ <<<<<<< README.md
3
4
  `dynamic-modal` is a TypeScript library for creating reusable modals in React and Next.js applications. It uses JSON objects to configure the modal structure, eliminating the need to write HTML. This approach simplifies modal creation and customization, allowing you to open and close modals using a custom hook.
4
5
 
5
6
  ## Requirements
@@ -52,9 +52,9 @@ const component_state_1 = require("../../context/component/component-state");
52
52
  const general_1 = require("../../tools/general");
53
53
  const MakeInput = (_a) => {
54
54
  var _b, _c;
55
- var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), element = __rest(_d, ["validation"]), props = __rest(_a, ["element"]);
55
+ var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), { enableIf, renderIf } = _d, element = __rest(_d, ["validation", "enableIf", "renderIf"]), props = __rest(_a, ["element"]);
56
56
  const { Input } = (0, react_1.useContext)(component_state_1.ComponentStateContext);
57
- const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element }));
57
+ const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element: Object.assign({ enableIf, renderIf }, element) }));
58
58
  const elementId = (0, react_1.useMemo)(() => { var _a; return (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(); }, []);
59
59
  (0, react_1.useEffect)(() => {
60
60
  const subscription = props.watch((value, { name, type }) => checkField(value, { name, type }));
@@ -52,9 +52,9 @@ const general_1 = require("../../tools/general");
52
52
  const component_state_1 = require("../../context/component/component-state");
53
53
  const MakeSelect = (_a) => {
54
54
  var _b, _c;
55
- var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), element = __rest(_d, ["validation"]), props = __rest(_a, ["element"]);
55
+ var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), { enableIf, renderIf } = _d, element = __rest(_d, ["validation", "enableIf", "renderIf"]), props = __rest(_a, ["element"]);
56
56
  const { Select } = (0, react_1.useContext)(component_state_1.ComponentStateContext);
57
- const { render, enable, checkField, liveData, liveSearching } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element }));
57
+ const { render, enable, checkField, liveData, liveSearching } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element: Object.assign({ renderIf, enableIf }, element) }));
58
58
  const elementId = (0, react_1.useMemo)(() => { var _a; return (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(); }, []);
59
59
  (0, react_1.useEffect)(() => {
60
60
  const subscription = props.watch((value, { name, type }) => checkField(value, { name, type }));
@@ -52,9 +52,9 @@ const general_1 = require("../../tools/general");
52
52
  const component_state_1 = require("../../context/component/component-state");
53
53
  const MakeTextarea = (_a) => {
54
54
  var _b, _c;
55
- var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), element = __rest(_d, ["validation"]), props = __rest(_a, ["element"]);
55
+ var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), { enableIf, renderIf } = _d, element = __rest(_d, ["validation", "enableIf", "renderIf"]), props = __rest(_a, ["element"]);
56
56
  const { Textarea } = (0, react_1.useContext)(component_state_1.ComponentStateContext);
57
- const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element }));
57
+ const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element: Object.assign({ enableIf, renderIf }, element) }));
58
58
  const elementId = (0, react_1.useMemo)(() => { var _a; return (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(); }, []);
59
59
  (0, react_1.useEffect)(() => {
60
60
  const subscription = props.watch((value, { name, type }) => checkField(value, { name, type }));
@@ -52,9 +52,9 @@ const general_1 = require("../../tools/general");
52
52
  const component_state_1 = require("../../context/component/component-state");
53
53
  const MakeToggle = (_a) => {
54
54
  var _b, _c;
55
- var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), element = __rest(_d, ["validation"]), props = __rest(_a, ["element"]);
55
+ var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), { enableIf, renderIf } = _d, element = __rest(_d, ["validation", "enableIf", "renderIf"]), props = __rest(_a, ["element"]);
56
56
  const { Toggle } = (0, react_1.useContext)(component_state_1.ComponentStateContext);
57
- const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element }));
57
+ const { render, enable, checkField } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element: Object.assign({ enableIf, renderIf }, element) }));
58
58
  const elementId = (0, react_1.useMemo)(() => { var _a; return (_a = element.id) !== null && _a !== void 0 ? _a : (0, general_1.generateId)(); }, []);
59
59
  (0, react_1.useEffect)(() => {
60
60
  const subscription = props.watch((value, { name, type }) => checkField(value, { name, type }));
@@ -21,8 +21,8 @@ const input_upload_1 = __importDefault(require("../input-upload/input-upload"));
21
21
  const field_render_1 = require("../../hooks/field-render");
22
22
  const MakeUpload = (_a) => {
23
23
  var _b, _c;
24
- var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), element = __rest(_d, ["validation"]), props = __rest(_a, ["element"]);
25
- const { render, enable } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element }));
24
+ var _d = _a.element, _e = _d.validation, { required } = _e, validation = __rest(_e, ["required"]), { enableIf, renderIf } = _d, element = __rest(_d, ["validation", "enableIf", "renderIf"]), props = __rest(_a, ["element"]);
25
+ const { render, enable } = (0, field_render_1.useFieldRender)(Object.assign(Object.assign({}, props), { element: Object.assign({ enableIf, renderIf }, element) }));
26
26
  return (render
27
27
  ? react_1.default.createElement(react_hook_form_1.Controller, { control: props.control, name: element.name, rules: Object.assign({ required: {
28
28
  value: required,
@@ -60,7 +60,7 @@ const useFieldRender = ({ element, setValue, unregister }) => {
60
60
  }
61
61
  }
62
62
  else if (enableCondition && enableConditionList.includes(key) && fieldValidValue) {
63
- const enableStatus = element.enableIf[key].includes(targetField) || element.enableIf[key].includes('');
63
+ const enableStatus = element.enableIf[key].includes(targetField) || element.enableIf[key].includes('*');
64
64
  if (enable !== enableStatus)
65
65
  setEnable(enableStatus);
66
66
  }
@@ -1,5 +1,6 @@
1
1
  import { CSSProperties } from 'react';
2
2
  import { Control, FieldValues, UseFormSetValue, UseFormUnregister, UseFormWatch } from 'react-hook-form';
3
+ import { IModalRenderCondition } from './modal';
3
4
  export interface IValidationBase<T> {
4
5
  value: T;
5
6
  message: string;
@@ -11,8 +12,8 @@ export interface IField {
11
12
  style?: CSSProperties;
12
13
  placeholder?: string;
13
14
  defaultValue?: any;
14
- renderIf?: Record<string, Array<string | number>>;
15
- enableIf?: Record<string, Array<string | number>>;
15
+ renderIf?: IModalRenderCondition;
16
+ enableIf?: IModalRenderCondition;
16
17
  validation: {
17
18
  required: boolean;
18
19
  regex?: RegExp;
@@ -1,8 +1,9 @@
1
1
  import { IField, IFieldProps } from './field';
2
2
  import { IModalLiveDataCondition } from './modal';
3
+ import { IOption } from './option';
3
4
  export interface IMakeSelect extends IField {
4
5
  elementType: 'select';
5
- options: Array<Record<'id' | 'name', string>>;
6
+ options: Array<IOption>;
6
7
  liveData?: IModalLiveDataCondition;
7
8
  isSearch?: boolean;
8
9
  isMulti?: boolean;
@@ -10,7 +10,7 @@ import { IOption } from './option';
10
10
  import { IMakeButton } from './make-button';
11
11
  export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeTextarea | IMakeToggle | IMakeDescription | IMakeUpload | IMakeButton;
12
12
  export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle;
13
- export type IModalRenderCondition = Record<string, Array<string | number>>;
13
+ export type IModalRenderCondition = Record<string, Array<string | number | boolean> | undefined>;
14
14
  export type IModalLiveDataCondition = {
15
15
  action: (data: string, ...args: any[]) => Promise<Array<IOption>>;
16
16
  condition: Array<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dynamic-modal",
3
- "version": "1.1.1",
3
+ "version": "1.1.4",
4
4
  "description": "The dynamic-modal is a solution of creation different modals into project using a json configuration file",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -7,9 +7,9 @@ import { IMakeInputProps } from '../../interfaces/make-input'
7
7
  import { ComponentStateContext } from '../../context/component/component-state'
8
8
  import { generateId } from '../../tools/general'
9
9
 
10
- const MakeInput: FC<IMakeInputProps> = ({ element: { validation: { required, ...validation }, ...element }, ...props }) => {
10
+ const MakeInput: FC<IMakeInputProps> = ({ element: { validation: { required, ...validation }, enableIf, renderIf, ...element }, ...props }) => {
11
11
  const { Input } = useContext(ComponentStateContext)
12
- const { render, enable, checkField } = useFieldRender({ ...props, element })
12
+ const { render, enable, checkField } = useFieldRender({ ...props, element: { enableIf, renderIf, ...element} })
13
13
 
14
14
  const elementId = useMemo(() => element.id ?? generateId(), [])
15
15
 
@@ -7,9 +7,9 @@ import { generateId } from '../../tools/general'
7
7
  import { IMakeSelectProps } from '../../interfaces/make-select'
8
8
  import { ComponentStateContext } from '../../context/component/component-state'
9
9
 
10
- const MakeSelect: FC<IMakeSelectProps> = ({ element: { validation: { required, ...validation }, ...element }, ...props }) => {
10
+ const MakeSelect: FC<IMakeSelectProps> = ({ element: { validation: { required, ...validation }, enableIf, renderIf, ...element }, ...props }) => {
11
11
  const { Select } = useContext(ComponentStateContext)
12
- const { render, enable, checkField, liveData, liveSearching } = useFieldRender({ ...props, element })
12
+ const { render, enable, checkField, liveData, liveSearching } = useFieldRender({ ...props, element: { renderIf, enableIf, ...element} })
13
13
 
14
14
  const elementId = useMemo(() => element.id ?? generateId(), [])
15
15
 
@@ -7,9 +7,9 @@ import { generateId } from '../../tools/general'
7
7
  import { IMakeTextareaProps } from '../../interfaces/make-textarea'
8
8
  import { ComponentStateContext } from '../../context/component/component-state'
9
9
 
10
- const MakeTextarea: FC<IMakeTextareaProps> = ({ element: { validation: { required, ...validation }, ...element }, ...props }) => {
10
+ const MakeTextarea: FC<IMakeTextareaProps> = ({ element: { validation: { required, ...validation }, enableIf, renderIf, ...element }, ...props }) => {
11
11
  const { Textarea } = useContext(ComponentStateContext)
12
- const { render, enable, checkField } = useFieldRender({ ...props, element })
12
+ const { render, enable, checkField } = useFieldRender({ ...props, element: { enableIf, renderIf, ...element } })
13
13
 
14
14
  const elementId = useMemo(() => element.id ?? generateId(), [])
15
15
 
@@ -7,9 +7,9 @@ import { IMakeToggleProps } from '../../interfaces/make-toggle'
7
7
  import { generateId } from '../../tools/general'
8
8
  import { ComponentStateContext } from '../../context/component/component-state'
9
9
 
10
- const MakeToggle: FC<IMakeToggleProps> = ({ element: { validation: { required, ...validation }, ...element }, ...props }) => {
10
+ const MakeToggle: FC<IMakeToggleProps> = ({ element: { validation: { required, ...validation }, enableIf, renderIf, ...element }, ...props }) => {
11
11
  const { Toggle } = useContext(ComponentStateContext)
12
- const { render, enable, checkField } = useFieldRender({ ...props, element })
12
+ const { render, enable, checkField } = useFieldRender({ ...props, element: { enableIf, renderIf, ...element } })
13
13
 
14
14
  const elementId = useMemo(() => element.id ?? generateId(), [])
15
15
 
@@ -6,8 +6,8 @@ import InputUpload from '../input-upload/input-upload'
6
6
  import { useFieldRender } from '../../hooks/field-render'
7
7
  import { IMakeUploadProps } from '../../interfaces/make-upload'
8
8
 
9
- const MakeUpload : FC<IMakeUploadProps> = ({ element: { validation: { required, ...validation }, ...element }, ...props }) => {
10
- const { render, enable } = useFieldRender({ ...props, element })
9
+ const MakeUpload : FC<IMakeUploadProps> = ({ element: { validation: { required, ...validation }, enableIf, renderIf, ...element }, ...props }) => {
10
+ const { render, enable } = useFieldRender({ ...props, element: { enableIf, renderIf, ...element} })
11
11
 
12
12
  return (
13
13
  render
@@ -20,11 +20,11 @@ export interface IFieldRender {
20
20
  liveSearching?: boolean;
21
21
  }
22
22
 
23
- export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue'|'unregister'> {
24
- element: Partial<Pick<IField, 'enableIf'|'renderIf'|'name' >> & Partial<Record<'liveData', IModalLiveDataCondition>>
23
+ export interface IFieldRenderProps extends Pick<IFieldProps, 'setValue' | 'unregister'> {
24
+ element: Partial<Pick<IField, 'enableIf' | 'renderIf' | 'name' >> & Partial<Record<'liveData', IModalLiveDataCondition>>
25
25
  }
26
26
 
27
- export const useFieldRender = ({element, setValue, unregister}: IFieldRenderProps): IFieldRender => {
27
+ export const useFieldRender = ({ element, setValue, unregister }: IFieldRenderProps): IFieldRender => {
28
28
  const [render, setRender] = useState<boolean|null>(null)
29
29
  const [enable, setEnable] = useState<boolean|null>(null)
30
30
  const [liveSearching, setLiveSearching] = useState<boolean>(false)
@@ -77,13 +77,13 @@ export const useFieldRender = ({element, setValue, unregister}: IFieldRenderProp
77
77
  const fieldValidValue: boolean = targetField !== undefined && targetField !== null && targetField !== ''
78
78
 
79
79
  if (renderCondition && renderConditionList.includes(key) && fieldValidValue) {
80
- const renderStatus: boolean = (element.renderIf as IModalRenderCondition)[key].includes(targetField) || (element.renderIf as IModalRenderCondition)[key].includes('*')
80
+ const renderStatus: boolean = (element.renderIf as IModalRenderCondition)[key]!.includes(targetField) || (element.renderIf as IModalRenderCondition)[key]!.includes('*')
81
81
  if (render !== renderStatus) {
82
82
  setRender(renderStatus)
83
83
  if(!renderStatus) unregister(element.name as string)
84
84
  }
85
85
  } else if (enableCondition && enableConditionList.includes(key) && fieldValidValue) {
86
- const enableStatus: boolean = (element.enableIf as IModalRenderCondition)[key].includes(targetField) || (element.enableIf as IModalRenderCondition)[key].includes('')
86
+ const enableStatus: boolean = (element.enableIf as IModalRenderCondition)[key]!.includes(targetField) || (element.enableIf as IModalRenderCondition)[key]!.includes('*')
87
87
  if (enable !== enableStatus) setEnable(enableStatus)
88
88
  }
89
89
 
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { CSSProperties } from 'react'
3
3
  import { Control, FieldValues, UseFormSetValue, UseFormUnregister, UseFormWatch } from 'react-hook-form'
4
+ import { IModalRenderCondition } from './modal'
4
5
 
5
6
  export interface IValidationBase<T> {
6
7
  value: T
@@ -14,8 +15,8 @@ export interface IField {
14
15
  style?: CSSProperties
15
16
  placeholder?: string
16
17
  defaultValue?: any
17
- renderIf?: Record<string, Array<string | number>>
18
- enableIf?: Record<string, Array<string | number>>
18
+ renderIf?: IModalRenderCondition
19
+ enableIf?: IModalRenderCondition
19
20
  validation: {
20
21
  required: boolean
21
22
  regex?: RegExp
@@ -1,9 +1,10 @@
1
1
  import { IField, IFieldProps } from './field'
2
2
  import { IModalLiveDataCondition } from './modal'
3
+ import { IOption } from './option'
3
4
 
4
5
  export interface IMakeSelect extends IField {
5
6
  elementType: 'select'
6
- options: Array<Record<'id'|'name', string>>
7
+ options: Array<IOption>
7
8
  liveData?: IModalLiveDataCondition
8
9
  isSearch?: boolean
9
10
  isMulti?: boolean
@@ -14,12 +14,13 @@ export type IModalField = IMakeSelect | IMakeInput | IMakeFieldGroup | IMakeText
14
14
 
15
15
  export type IFormField = IMakeSelect | IMakeInput | IMakeTextarea | IMakeToggle
16
16
 
17
- export type IModalRenderCondition = Record<string, Array<string | number>>
17
+ export type IModalRenderCondition = Record<string, Array<string | number | boolean> | undefined>
18
18
 
19
19
  export type IModalLiveDataCondition = {
20
20
  action: (data: string, ...args: any[]) => Promise<Array<IOption>>
21
21
  condition: Array<string>
22
22
  }
23
+
23
24
  export interface IModalConfigProps {
24
25
  reservedData?: Record<string, any>
25
26
  title: string