@nvs-dynamic-form/react-core 2.6.0 → 2.7.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.
@@ -1,5 +1,5 @@
1
1
  import "nvs-flexgrid";
2
2
  import "./_style.css";
3
- import { INvsDynamicForm } from "./_type";
4
3
  import React from "react";
5
- export declare const NvsDynamicForm: ({ onSubmit, formElements, fields, formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible, submitButtonLabel, submitButtonIsFullWidth, submitButtonPosition, submitButtonContainerClass, container, containerVisible, containerOptions, useContainersOutsideGroup, useGroupContainer, addButtonDefaultOptions, removeButtonDefaultOptions, }: INvsDynamicForm) => React.JSX.Element;
4
+ import { INvsDynamicForm } from "./_type";
5
+ export declare const NvsDynamicForm: ({ onSubmit, formElements, fields, formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible, submitButtonLabel, submitButtonIsFullWidth, submitButtonPosition, submitButtonContainerClass, container, containerVisible, containerOptions, useContainersOutsideGroup, useGroupContainer, addButtonDefaultOptions, removeButtonDefaultOptions, doubleSubmitProtection, }: INvsDynamicForm) => React.JSX.Element;
@@ -1,18 +1,46 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
4
24
  };
5
25
  Object.defineProperty(exports, "__esModule", { value: true });
6
26
  exports.NvsDynamicForm = void 0;
7
27
  require("nvs-flexgrid");
8
28
  require("./_style.css");
29
+ const react_1 = __importStar(require("react"));
9
30
  const button_1 = require("./components/button");
10
31
  const container_1 = require("./components/container");
11
32
  const formBuilder_1 = require("./components/formBuilder");
12
33
  const formikForm_1 = require("./formikForm");
13
- const react_1 = __importDefault(require("react"));
14
- const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible = true, submitButtonLabel = submitButtonDefaultOptions.label, submitButtonIsFullWidth = submitButtonDefaultOptions.isFullWidth, submitButtonPosition = submitButtonDefaultOptions.position, submitButtonContainerClass, container = ({ children }) => react_1.default.createElement(react_1.default.Fragment, null, children), containerVisible = false, containerOptions = {}, useContainersOutsideGroup = false, useGroupContainer = false, addButtonDefaultOptions, removeButtonDefaultOptions, }) => {
15
- const formikForm = (react_1.default.createElement(formikForm_1.FormikForm, { onSubmit: onSubmit, fields: fields, formClass: formClass },
34
+ const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible = true, submitButtonLabel = submitButtonDefaultOptions.label, submitButtonIsFullWidth = submitButtonDefaultOptions.isFullWidth, submitButtonPosition = submitButtonDefaultOptions.position, submitButtonContainerClass, container = ({ children }) => react_1.default.createElement(react_1.default.Fragment, null, children), containerVisible = false, containerOptions = {}, useContainersOutsideGroup = false, useGroupContainer = false, addButtonDefaultOptions, removeButtonDefaultOptions, doubleSubmitProtection = false, }) => {
35
+ const [isSubmitting, setIsSubmitting] = (0, react_1.useState)(false);
36
+ const handleSubmit = async (values) => {
37
+ if (doubleSubmitProtection && isSubmitting)
38
+ return;
39
+ setIsSubmitting(true);
40
+ await onSubmit?.(values);
41
+ setIsSubmitting(false);
42
+ };
43
+ const formikForm = (react_1.default.createElement(formikForm_1.FormikForm, { onSubmit: handleSubmit, fields: fields, formClass: formClass },
16
44
  react_1.default.createElement(formBuilder_1.FormBuilder, { containerComponent: container, formElements: formElements, useContainersOutsideGroup: useContainersOutsideGroup, useGroupContainer: useGroupContainer, containerVisible: containerVisible, fields: fields, buttonComponent: buttonComponent, containerOptions: containerOptions, fieldArrayAddButtonDefaultOptions: addButtonDefaultOptions, fieldArrayRemoveButtonDefaultOptions: removeButtonDefaultOptions }),
17
45
  react_1.default.createElement(button_1.Button, { buttonComponent: buttonComponent, visible: submitButtonVisible, label: submitButtonLabel, isFullWidth: submitButtonIsFullWidth, position: submitButtonPosition, containerClass: submitButtonContainerClass, options: submitButtonOptions })));
18
46
  return containerVisible && !useContainersOutsideGroup ? (react_1.default.createElement(container_1.Container, { containerComponent: container, options: containerOptions }, formikForm)) : (formikForm);
@@ -1 +1 @@
1
- {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../lib/nvs-dynamic-form/_template.tsx"],"names":[],"mappings":";;;;;;AAAA,wBAAsB;AACtB,wBAAsB;AAEtB,gDAA6C;AAC7C,sDAAmD;AACnD,0DAAuD;AACvD,6CAA0C;AAE1C,kDAA0B;AAEnB,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GAAG,IAAI,EAC1B,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EACpD,uBAAuB,GAAG,0BAA0B,CAAC,WAAW,EAChE,oBAAoB,GAAG,0BAA0B,CAAC,QAAQ,EAC1D,0BAA0B,EAC1B,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,8DAAG,QAAQ,CAAI,EAC7C,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,EAAE,EACrB,yBAAyB,GAAG,KAAK,EACjC,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,EACvB,0BAA0B,GACV,EAAE,EAAE;IACpB,MAAM,UAAU,GAAG,CACjB,8BAAC,uBAAU,IAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QAClE,8BAAC,yBAAW,IACV,kBAAkB,EAAE,SAAS,EAC7B,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,iCAAiC,EAAE,uBAAuB,EAC1D,oCAAoC,EAAE,0BAA0B,GAChE;QACF,8BAAC,eAAM,IACL,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,cAAc,EAAE,0BAA0B,EAC1C,OAAO,EAAE,mBAAmB,GAC5B,CACS,CACd,CAAC;IAEF,OAAO,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CACtD,8BAAC,qBAAS,IAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,IAChE,UAAU,CACD,CACb,CAAC,CAAC,CAAC,CACF,UAAU,CACX,CAAC;AACJ,CAAC,CAAC;AAtDW,QAAA,cAAc,kBAsDzB"}
1
+ {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../lib/nvs-dynamic-form/_template.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wBAAsB;AACtB,wBAAsB;AAEtB,+CAAwC;AAExC,gDAA6C;AAC7C,sDAAmD;AACnD,0DAAuD;AACvD,6CAA0C;AAGnC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GAAG,IAAI,EAC1B,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EACpD,uBAAuB,GAAG,0BAA0B,CAAC,WAAW,EAChE,oBAAoB,GAAG,0BAA0B,CAAC,QAAQ,EAC1D,0BAA0B,EAC1B,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,8DAAG,QAAQ,CAAI,EAC7C,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,EAAE,EACrB,yBAAyB,GAAG,KAAK,EACjC,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,GAAG,KAAK,GACd,EAAE,EAAE;IACpB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,KAAK,EAAE,MAAe,EAAE,EAAE;QAC7C,IAAI,sBAAsB,IAAI,YAAY;YAAE,OAAO;QACnD,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QACzB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CACjB,8BAAC,uBAAU,IAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QACtE,8BAAC,yBAAW,IACV,kBAAkB,EAAE,SAAS,EAC7B,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,iCAAiC,EAAE,uBAAuB,EAC1D,oCAAoC,EAAE,0BAA0B,GAChE;QACF,8BAAC,eAAM,IACL,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,cAAc,EAAE,0BAA0B,EAC1C,OAAO,EAAE,mBAAmB,GAC5B,CACS,CACd,CAAC;IAEF,OAAO,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CACtD,8BAAC,qBAAS,IAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,IAChE,UAAU,CACD,CACb,CAAC,CAAC,CAAC,CACF,UAAU,CACX,CAAC;AACJ,CAAC,CAAC;AAhEW,QAAA,cAAc,kBAgEzB"}
@@ -25,4 +25,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
25
25
  addButtonDefaultOptions?: ArrayFieldAddButton;
26
26
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
27
27
  labelDefaultOptions?: LabelOptions;
28
+ doubleSubmitProtection?: boolean;
28
29
  }
@@ -1,5 +1,5 @@
1
1
  import "nvs-flexgrid";
2
2
  import "./_style.css";
3
- import { INvsDynamicForm } from "./_type";
4
3
  import React from "react";
5
- export declare const NvsDynamicForm: ({ onSubmit, formElements, fields, formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible, submitButtonLabel, submitButtonIsFullWidth, submitButtonPosition, submitButtonContainerClass, container, containerVisible, containerOptions, useContainersOutsideGroup, useGroupContainer, addButtonDefaultOptions, removeButtonDefaultOptions, }: INvsDynamicForm) => React.JSX.Element;
4
+ import { INvsDynamicForm } from "./_type";
5
+ export declare const NvsDynamicForm: ({ onSubmit, formElements, fields, formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible, submitButtonLabel, submitButtonIsFullWidth, submitButtonPosition, submitButtonContainerClass, container, containerVisible, containerOptions, useContainersOutsideGroup, useGroupContainer, addButtonDefaultOptions, removeButtonDefaultOptions, doubleSubmitProtection, }: INvsDynamicForm) => React.JSX.Element;
@@ -1,12 +1,20 @@
1
1
  import "nvs-flexgrid";
2
2
  import "./_style.css";
3
+ import React, { useState } from "react";
3
4
  import { Button } from "./components/button";
4
5
  import { Container } from "./components/container";
5
6
  import { FormBuilder } from "./components/formBuilder";
6
7
  import { FormikForm } from "./formikForm";
7
- import React from "react";
8
- export const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible = true, submitButtonLabel = submitButtonDefaultOptions.label, submitButtonIsFullWidth = submitButtonDefaultOptions.isFullWidth, submitButtonPosition = submitButtonDefaultOptions.position, submitButtonContainerClass, container = ({ children }) => React.createElement(React.Fragment, null, children), containerVisible = false, containerOptions = {}, useContainersOutsideGroup = false, useGroupContainer = false, addButtonDefaultOptions, removeButtonDefaultOptions, }) => {
9
- const formikForm = (React.createElement(FormikForm, { onSubmit: onSubmit, fields: fields, formClass: formClass },
8
+ export const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, submitButtonOptions, submitButtonVisible = true, submitButtonLabel = submitButtonDefaultOptions.label, submitButtonIsFullWidth = submitButtonDefaultOptions.isFullWidth, submitButtonPosition = submitButtonDefaultOptions.position, submitButtonContainerClass, container = ({ children }) => React.createElement(React.Fragment, null, children), containerVisible = false, containerOptions = {}, useContainersOutsideGroup = false, useGroupContainer = false, addButtonDefaultOptions, removeButtonDefaultOptions, doubleSubmitProtection = false, }) => {
9
+ const [isSubmitting, setIsSubmitting] = useState(false);
10
+ const handleSubmit = async (values) => {
11
+ if (doubleSubmitProtection && isSubmitting)
12
+ return;
13
+ setIsSubmitting(true);
14
+ await onSubmit?.(values);
15
+ setIsSubmitting(false);
16
+ };
17
+ const formikForm = (React.createElement(FormikForm, { onSubmit: handleSubmit, fields: fields, formClass: formClass },
10
18
  React.createElement(FormBuilder, { containerComponent: container, formElements: formElements, useContainersOutsideGroup: useContainersOutsideGroup, useGroupContainer: useGroupContainer, containerVisible: containerVisible, fields: fields, buttonComponent: buttonComponent, containerOptions: containerOptions, fieldArrayAddButtonDefaultOptions: addButtonDefaultOptions, fieldArrayRemoveButtonDefaultOptions: removeButtonDefaultOptions }),
11
19
  React.createElement(Button, { buttonComponent: buttonComponent, visible: submitButtonVisible, label: submitButtonLabel, isFullWidth: submitButtonIsFullWidth, position: submitButtonPosition, containerClass: submitButtonContainerClass, options: submitButtonOptions })));
12
20
  return containerVisible && !useContainersOutsideGroup ? (React.createElement(Container, { containerComponent: container, options: containerOptions }, formikForm)) : (formikForm);
@@ -1 +1 @@
1
- {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../lib/nvs-dynamic-form/_template.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GAAG,IAAI,EAC1B,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EACpD,uBAAuB,GAAG,0BAA0B,CAAC,WAAW,EAChE,oBAAoB,GAAG,0BAA0B,CAAC,QAAQ,EAC1D,0BAA0B,EAC1B,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,0CAAG,QAAQ,CAAI,EAC7C,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,EAAE,EACrB,yBAAyB,GAAG,KAAK,EACjC,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,EACvB,0BAA0B,GACV,EAAE,EAAE;IACpB,MAAM,UAAU,GAAG,CACjB,oBAAC,UAAU,IAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QAClE,oBAAC,WAAW,IACV,kBAAkB,EAAE,SAAS,EAC7B,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,iCAAiC,EAAE,uBAAuB,EAC1D,oCAAoC,EAAE,0BAA0B,GAChE;QACF,oBAAC,MAAM,IACL,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,cAAc,EAAE,0BAA0B,EAC1C,OAAO,EAAE,mBAAmB,GAC5B,CACS,CACd,CAAC;IAEF,OAAO,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CACtD,oBAAC,SAAS,IAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,IAChE,UAAU,CACD,CACb,CAAC,CAAC,CAAC,CACF,UAAU,CACX,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../lib/nvs-dynamic-form/_template.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,GAAG,IAAI,EAC1B,iBAAiB,GAAG,0BAA0B,CAAC,KAAK,EACpD,uBAAuB,GAAG,0BAA0B,CAAC,WAAW,EAChE,oBAAoB,GAAG,0BAA0B,CAAC,QAAQ,EAC1D,0BAA0B,EAC1B,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,0CAAG,QAAQ,CAAI,EAC7C,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,GAAG,EAAE,EACrB,yBAAyB,GAAG,KAAK,EACjC,iBAAiB,GAAG,KAAK,EACzB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,GAAG,KAAK,GACd,EAAE,EAAE;IACpB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,KAAK,EAAE,MAAe,EAAE,EAAE;QAC7C,IAAI,sBAAsB,IAAI,YAAY;YAAE,OAAO;QACnD,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;QACzB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CACjB,oBAAC,UAAU,IAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;QACtE,oBAAC,WAAW,IACV,kBAAkB,EAAE,SAAS,EAC7B,YAAY,EAAE,YAAY,EAC1B,yBAAyB,EAAE,yBAAyB,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,iCAAiC,EAAE,uBAAuB,EAC1D,oCAAoC,EAAE,0BAA0B,GAChE;QACF,oBAAC,MAAM,IACL,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,oBAAoB,EAC9B,cAAc,EAAE,0BAA0B,EAC1C,OAAO,EAAE,mBAAmB,GAC5B,CACS,CACd,CAAC;IAEF,OAAO,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CACtD,oBAAC,SAAS,IAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,IAChE,UAAU,CACD,CACb,CAAC,CAAC,CAAC,CACF,UAAU,CACX,CAAC;AACJ,CAAC,CAAC"}
@@ -25,4 +25,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
25
25
  addButtonDefaultOptions?: ArrayFieldAddButton;
26
26
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
27
27
  labelDefaultOptions?: LabelOptions;
28
+ doubleSubmitProtection?: boolean;
28
29
  }
@@ -1,12 +1,13 @@
1
1
  import "nvs-flexgrid";
2
2
  import "./_style.css";
3
3
 
4
+ import React, { useState } from "react";
5
+
4
6
  import { Button } from "./components/button";
5
7
  import { Container } from "./components/container";
6
8
  import { FormBuilder } from "./components/formBuilder";
7
9
  import { FormikForm } from "./formikForm";
8
10
  import { INvsDynamicForm } from "./_type";
9
- import React from "react";
10
11
 
11
12
  export const NvsDynamicForm = ({
12
13
  onSubmit,
@@ -28,9 +29,19 @@ export const NvsDynamicForm = ({
28
29
  useGroupContainer = false,
29
30
  addButtonDefaultOptions,
30
31
  removeButtonDefaultOptions,
32
+ doubleSubmitProtection = false,
31
33
  }: INvsDynamicForm) => {
34
+ const [isSubmitting, setIsSubmitting] = useState(false);
35
+
36
+ const handleSubmit = async (values: unknown) => {
37
+ if (doubleSubmitProtection && isSubmitting) return;
38
+ setIsSubmitting(true);
39
+ await onSubmit?.(values);
40
+ setIsSubmitting(false);
41
+ };
42
+
32
43
  const formikForm = (
33
- <FormikForm onSubmit={onSubmit} fields={fields} formClass={formClass}>
44
+ <FormikForm onSubmit={handleSubmit} fields={fields} formClass={formClass}>
34
45
  <FormBuilder
35
46
  containerComponent={container}
36
47
  formElements={formElements}
@@ -32,4 +32,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
32
32
  addButtonDefaultOptions?: ArrayFieldAddButton;
33
33
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
34
34
  labelDefaultOptions?: LabelOptions;
35
+ doubleSubmitProtection?: boolean;
35
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nvs-dynamic-form/react-core",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "types": "dist/cjs/index.d.ts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",