@nvs-dynamic-form/react-core 1.2.4 → 1.4.0

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 (92) hide show
  1. package/dist/cjs/index.d.ts +1 -1
  2. package/dist/cjs/index.js +1 -1
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/nvs-dynamic-form/_template.js +72 -0
  5. package/dist/cjs/nvs-dynamic-form/_template.js.map +1 -0
  6. package/dist/cjs/nvs-dynamic-form/_type.d.ts +8 -0
  7. package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form}/_type.js.map +1 -1
  8. package/dist/cjs/nvs-dynamic-form/elements/field/_template.d.ts +3 -0
  9. package/dist/cjs/nvs-dynamic-form/elements/field/_template.js +40 -0
  10. package/dist/cjs/nvs-dynamic-form/elements/field/_template.js.map +1 -0
  11. package/dist/cjs/nvs-dynamic-form/elements/field/_type.d.ts +10 -0
  12. package/dist/cjs/nvs-dynamic-form/elements/field/_type.js +3 -0
  13. package/dist/cjs/nvs-dynamic-form/elements/field/_type.js.map +1 -0
  14. package/dist/cjs/nvs-dynamic-form/elements/field/index.js.map +1 -0
  15. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_template.d.ts +3 -0
  16. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_template.js +30 -0
  17. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_template.js.map +1 -0
  18. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_type.d.ts +11 -0
  19. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_type.js +3 -0
  20. package/dist/cjs/nvs-dynamic-form/elements/submit-button/_type.js.map +1 -0
  21. package/dist/cjs/nvs-dynamic-form/elements/submit-button/index.js +19 -0
  22. package/dist/cjs/nvs-dynamic-form/elements/submit-button/index.js.map +1 -0
  23. package/dist/cjs/nvs-dynamic-form/index.js +19 -0
  24. package/dist/cjs/nvs-dynamic-form/index.js.map +1 -0
  25. package/dist/cjs/types/form-field.type.d.ts +5 -3
  26. package/dist/cjs/types/form-field.type.js +2 -0
  27. package/dist/cjs/types/form-field.type.js.map +1 -1
  28. package/dist/esm/index.d.ts +1 -1
  29. package/dist/esm/index.js +1 -1
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/nvs-dynamic-form/_template.js +45 -0
  32. package/dist/esm/nvs-dynamic-form/_template.js.map +1 -0
  33. package/dist/esm/nvs-dynamic-form/_type.d.ts +8 -0
  34. package/dist/esm/{nvsDynamicForm → nvs-dynamic-form}/_type.js.map +1 -1
  35. package/dist/esm/nvs-dynamic-form/elements/field/_template.d.ts +3 -0
  36. package/dist/esm/nvs-dynamic-form/elements/field/_template.js +33 -0
  37. package/dist/esm/nvs-dynamic-form/elements/field/_template.js.map +1 -0
  38. package/dist/esm/nvs-dynamic-form/elements/field/_type.d.ts +10 -0
  39. package/dist/esm/nvs-dynamic-form/elements/field/_type.js +2 -0
  40. package/dist/esm/nvs-dynamic-form/elements/field/_type.js.map +1 -0
  41. package/dist/esm/nvs-dynamic-form/elements/field/index.d.ts +2 -0
  42. package/dist/esm/nvs-dynamic-form/elements/field/index.js.map +1 -0
  43. package/dist/esm/nvs-dynamic-form/elements/submit-button/_template.d.ts +3 -0
  44. package/dist/esm/nvs-dynamic-form/elements/submit-button/_template.js +23 -0
  45. package/dist/esm/nvs-dynamic-form/elements/submit-button/_template.js.map +1 -0
  46. package/dist/esm/nvs-dynamic-form/elements/submit-button/_type.d.ts +11 -0
  47. package/dist/esm/nvs-dynamic-form/elements/submit-button/_type.js +2 -0
  48. package/dist/esm/nvs-dynamic-form/elements/submit-button/_type.js.map +1 -0
  49. package/dist/esm/nvs-dynamic-form/elements/submit-button/index.d.ts +2 -0
  50. package/dist/esm/nvs-dynamic-form/elements/submit-button/index.js +3 -0
  51. package/dist/esm/nvs-dynamic-form/elements/submit-button/index.js.map +1 -0
  52. package/dist/esm/nvs-dynamic-form/index.d.ts +2 -0
  53. package/dist/esm/nvs-dynamic-form/index.js +3 -0
  54. package/dist/esm/nvs-dynamic-form/index.js.map +1 -0
  55. package/dist/esm/types/form-field.type.d.ts +5 -3
  56. package/dist/esm/types/form-field.type.js +2 -0
  57. package/dist/esm/types/form-field.type.js.map +1 -1
  58. package/lib/index.tsx +1 -1
  59. package/lib/{nvsDynamicForm → nvs-dynamic-form}/_stories.tsx +11 -13
  60. package/lib/nvs-dynamic-form/_template.tsx +81 -0
  61. package/lib/nvs-dynamic-form/_type.tsx +9 -0
  62. package/lib/nvs-dynamic-form/elements/field/_template.tsx +57 -0
  63. package/lib/nvs-dynamic-form/elements/field/_type.tsx +11 -0
  64. package/lib/nvs-dynamic-form/elements/field/index.tsx +2 -0
  65. package/lib/nvs-dynamic-form/elements/submit-button/_template.tsx +42 -0
  66. package/lib/nvs-dynamic-form/elements/submit-button/_type.tsx +12 -0
  67. package/lib/nvs-dynamic-form/elements/submit-button/index.tsx +2 -0
  68. package/lib/nvs-dynamic-form/index.tsx +2 -0
  69. package/lib/types/form-field.type.tsx +7 -3
  70. package/package.json +2 -2
  71. package/dist/cjs/nvsDynamicForm/_template.js +0 -104
  72. package/dist/cjs/nvsDynamicForm/_template.js.map +0 -1
  73. package/dist/cjs/nvsDynamicForm/_type.d.ts +0 -20
  74. package/dist/cjs/nvsDynamicForm/index.js.map +0 -1
  75. package/dist/esm/nvsDynamicForm/_template.js +0 -77
  76. package/dist/esm/nvsDynamicForm/_template.js.map +0 -1
  77. package/dist/esm/nvsDynamicForm/_type.d.ts +0 -20
  78. package/dist/esm/nvsDynamicForm/index.js.map +0 -1
  79. package/lib/nvsDynamicForm/_template.tsx +0 -143
  80. package/lib/nvsDynamicForm/_type.tsx +0 -21
  81. /package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form}/_style.css +0 -0
  82. /package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form}/_template.d.ts +0 -0
  83. /package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form}/_type.js +0 -0
  84. /package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form/elements/field}/index.d.ts +0 -0
  85. /package/dist/cjs/{nvsDynamicForm → nvs-dynamic-form/elements/field}/index.js +0 -0
  86. /package/dist/{esm/nvsDynamicForm → cjs/nvs-dynamic-form/elements/submit-button}/index.d.ts +0 -0
  87. /package/{lib/nvsDynamicForm/index.tsx → dist/cjs/nvs-dynamic-form/index.d.ts} +0 -0
  88. /package/dist/esm/{nvsDynamicForm → nvs-dynamic-form}/_style.css +0 -0
  89. /package/dist/esm/{nvsDynamicForm → nvs-dynamic-form}/_template.d.ts +0 -0
  90. /package/dist/esm/{nvsDynamicForm → nvs-dynamic-form}/_type.js +0 -0
  91. /package/dist/esm/{nvsDynamicForm → nvs-dynamic-form/elements/field}/index.js +0 -0
  92. /package/lib/{nvsDynamicForm → nvs-dynamic-form}/_style.css +0 -0
@@ -1,143 +0,0 @@
1
- import "nvs-flexgrid";
2
- import "./_style.css";
3
-
4
- import * as Yup from "yup";
5
-
6
- import {
7
- DynamicObject,
8
- FieldBase,
9
- IScreenSize,
10
- ScreenSizeType,
11
- } from "../types";
12
- import { Form, Formik, FormikErrors, FormikTouched } from "formik";
13
- import React, { useEffect, useState } from "react";
14
-
15
- import { INvsDynamicForm } from "./_type";
16
-
17
- export const NvsDynamicForm = ({
18
- onSubmit,
19
- formElements = {},
20
- fields = [],
21
- formClass,
22
- submitButton,
23
- submitButtonVisible = true,
24
- submitButtonLabel = submitButton.defaultOptions.label,
25
- submitButtonIsFullWidth = submitButton.defaultOptions.isFullWidth,
26
- submitButtonPosition = submitButton.defaultOptions.position,
27
- }: INvsDynamicForm) => {
28
- const getDefaultValues = (): DynamicObject => {
29
- return fields.reduce((acc: DynamicObject, field: FieldBase<any>) => {
30
- acc[field.id] = field.defaultValue;
31
- return acc;
32
- }, {});
33
- };
34
-
35
- const getValidateSchema = () => {
36
- const validationSchema = fields.reduce(
37
- (acc: { [key: string]: Yup.AnySchema }, field) => {
38
- if (field?.validate) {
39
- acc[field.id] = field.validate;
40
- }
41
- return acc;
42
- },
43
- {},
44
- );
45
- return Yup.object(validationSchema);
46
- };
47
-
48
- const [defaultValues, setDefaultValues] = useState(getDefaultValues());
49
- const [validateSchema, setValidateSchema] = useState(getValidateSchema());
50
-
51
- useEffect(() => {
52
- setDefaultValues(getDefaultValues());
53
- setValidateSchema(getValidateSchema());
54
- }, [fields]);
55
-
56
- const createFieldItemClass = (
57
- screenSize: ScreenSizeType | IScreenSize,
58
- ): Array<string> => {
59
- const className: Array<string> = [];
60
- if (typeof screenSize == "number") className.push("nvs-col-" + screenSize);
61
- else {
62
- className.push("nvs-col-md-" + screenSize?.desktop);
63
- if (screenSize?.tablet) className.push("nvs-col-sm-" + screenSize.tablet);
64
- if (screenSize?.mobile) className.push("nvs-col-xs-" + screenSize.mobile);
65
- }
66
- return className;
67
- };
68
-
69
- const createFormElement = (field: FieldBase<any>) => {
70
- const Field = formElements[field.fieldType!]?.component;
71
- return Field ? <Field {...field} /> : <></>;
72
- };
73
-
74
- const createFormElements = (
75
- errors: FormikErrors<DynamicObject>,
76
- touched: FormikTouched<DynamicObject>,
77
- ) => {
78
- return fields.map((field: FieldBase<any>) => (
79
- <div
80
- key={field.id}
81
- className={createFieldItemClass(field.screenSize ?? 12).join(" ")}
82
- >
83
- {createFormElement({
84
- ...field,
85
- error: errors[field.id],
86
- touched: touched[field.id],
87
- })}
88
- </div>
89
- ));
90
- };
91
-
92
- const getSubmitButtonComponent = () => {
93
- const SubmitButton = submitButton.component;
94
- return <SubmitButton>{submitButtonLabel}</SubmitButton>;
95
- };
96
-
97
- const getButtonPositionClass = (position: "left" | "right" | "center") => {
98
- const classes = {
99
- left: "nvs-jc-start",
100
- right: "nvs-jc-end",
101
- center: "nvs-jc-center",
102
- };
103
- return classes[position];
104
- };
105
-
106
- const createSubmitButton = () => {
107
- const buttonClasses = ["df-button"];
108
-
109
- submitButtonIsFullWidth && buttonClasses.push("nvs-col-12");
110
-
111
- return (
112
- <div
113
- className={`nvs-row ${getButtonPositionClass(submitButtonPosition)}`}
114
- >
115
- <div className={buttonClasses.join(" ")}>
116
- {getSubmitButtonComponent()}
117
- </div>
118
- </div>
119
- );
120
- };
121
-
122
- const createForm = (
123
- errors: FormikErrors<DynamicObject>,
124
- touched: FormikTouched<DynamicObject>,
125
- ) => (
126
- <Form className={`nvs-container-fluid${formClass ? ` ${formClass}` : ""}`}>
127
- <div className="nvs-row">{createFormElements(errors, touched)}</div>
128
- {submitButtonVisible && createSubmitButton()}
129
- </Form>
130
- );
131
-
132
- return (
133
- <Formik
134
- initialValues={defaultValues}
135
- validationSchema={validateSchema}
136
- onSubmit={async (values) => {
137
- onSubmit && (await onSubmit(values));
138
- }}
139
- >
140
- {({ errors, touched }) => createForm(errors, touched)}
141
- </Formik>
142
- );
143
- };
@@ -1,21 +0,0 @@
1
- import { FieldBase, SubmitButtonOptions } from "../types";
2
-
3
- export interface INvsDynamicForm {
4
- onSubmit?: ((values: unknown) => void) | ((values: unknown) => Promise<void>);
5
- submitButton: {
6
- component: React.FC<any>;
7
- defaultOptions: SubmitButtonOptions;
8
- };
9
- formElements: {
10
- [key: string]: {
11
- component: React.FC<any>;
12
- class: typeof FieldBase<any>;
13
- };
14
- };
15
- fields: Array<FieldBase<unknown>>;
16
- formClass?: string;
17
- submitButtonVisible?: boolean;
18
- submitButtonLabel?: string;
19
- submitButtonPosition?: "left" | "center" | "right";
20
- submitButtonIsFullWidth?: boolean;
21
- }