@nvs-dynamic-form/react-core 2.5.2 → 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, 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,20 +1,48 @@
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
- const formikForm_1 = require("./formikForm");
11
- const react_1 = __importDefault(require("react"));
12
- const formBuilder_1 = require("./components/formBuilder");
13
31
  const container_1 = require("./components/container");
14
- const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, 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 },
32
+ const formBuilder_1 = require("./components/formBuilder");
33
+ const formikForm_1 = require("./formikForm");
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
- react_1.default.createElement(button_1.Button, { buttonComponent: buttonComponent, visible: submitButtonVisible, label: submitButtonLabel, isFullWidth: submitButtonIsFullWidth, position: submitButtonPosition, containerClass: submitButtonContainerClass })));
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);
19
47
  };
20
48
  exports.NvsDynamicForm = NvsDynamicForm;
@@ -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,6CAA0C;AAE1C,kDAA0B;AAC1B,0DAAuD;AACvD,sDAAmD;AAE5C,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,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,GAC1C,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;AApDW,QAAA,cAAc,kBAoDzB"}
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"}
@@ -14,6 +14,9 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
14
14
  useGroupContainer?: boolean;
15
15
  buttonComponent: React.FC<any>;
16
16
  submitButtonDefaultOptions: ISubmitButtonDefaultOptions;
17
+ submitButtonOptions?: {
18
+ [key: string]: any;
19
+ };
17
20
  submitButtonVisible?: boolean;
18
21
  submitButtonLabel?: string;
19
22
  submitButtonPosition?: "left" | "center" | "right";
@@ -22,4 +25,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
22
25
  addButtonDefaultOptions?: ArrayFieldAddButton;
23
26
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
24
27
  labelDefaultOptions?: LabelOptions;
28
+ doubleSubmitProtection?: boolean;
25
29
  }
@@ -1,3 +1,3 @@
1
1
  import { IButton } from "./_type";
2
2
  import React from "react";
3
- export declare const Button: ({ buttonComponent: ButtonComponent, visible, label, position, isFullWidth, containerClass, }: IButton) => React.JSX.Element;
3
+ export declare const Button: ({ buttonComponent: ButtonComponent, visible, label, position, isFullWidth, containerClass, options, }: IButton) => React.JSX.Element;
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Button = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
- const Button = ({ buttonComponent: ButtonComponent, visible, label, position = "right", isFullWidth, containerClass, }) => {
8
+ const Button = ({ buttonComponent: ButtonComponent, visible, label, position = "right", isFullWidth, containerClass, options = {}, }) => {
9
9
  const getButtonPositionClass = (position) => {
10
10
  const classes = {
11
11
  left: "nvs-jc-start",
@@ -22,7 +22,7 @@ const Button = ({ buttonComponent: ButtonComponent, visible, label, position = "
22
22
  return visible ? (react_1.default.createElement("div", { className: `nvs-container-fluid${containerClass ? ` ${containerClass}` : ""}` },
23
23
  react_1.default.createElement("div", { className: `nvs-row ${getButtonPositionClass(position)}` },
24
24
  react_1.default.createElement("div", { className: getSubmitButtonClasses() },
25
- react_1.default.createElement(ButtonComponent, null, label))))) : (react_1.default.createElement(react_1.default.Fragment, null));
25
+ react_1.default.createElement(ButtonComponent, { ...options }, label))))) : (react_1.default.createElement(react_1.default.Fragment, null));
26
26
  };
27
27
  exports.Button = Button;
28
28
  //# sourceMappingURL=_template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../../../lib/nvs-dynamic-form/components/button/_template.tsx"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAEnB,MAAM,MAAM,GAAG,CAAC,EACrB,eAAe,EAAE,eAAe,EAChC,OAAO,EACP,KAAK,EACL,QAAQ,GAAG,OAAO,EAClB,WAAW,EACX,cAAc,GACN,EAAE,EAAE;IACZ,MAAM,sBAAsB,GAAG,CAAC,QAAqC,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,eAAe;SACxB,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,uCACE,SAAS,EAAE,sBAAsB,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAE7E,uCAAK,SAAS,EAAE,WAAW,sBAAsB,CAAC,QAAQ,CAAC,EAAE;YAC3D,uCAAK,SAAS,EAAE,sBAAsB,EAAE;gBACtC,8BAAC,eAAe,QAAE,KAAK,CAAmB,CACtC,CACF,CACF,CACP,CAAC,CAAC,CAAC,CACF,6DAAK,CACN,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,MAAM,UAsCjB"}
1
+ {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../../../lib/nvs-dynamic-form/components/button/_template.tsx"],"names":[],"mappings":";;;;;;AACA,kDAA0B;AAEnB,MAAM,MAAM,GAAG,CAAC,EACrB,eAAe,EAAE,eAAe,EAChC,OAAO,EACP,KAAK,EACL,QAAQ,GAAG,OAAO,EAClB,WAAW,EACX,cAAc,EACd,OAAO,GAAG,EAAE,GACJ,EAAE,EAAE;IACZ,MAAM,sBAAsB,GAAG,CAAC,QAAqC,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,eAAe;SACxB,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,uCACE,SAAS,EAAE,sBAAsB,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAE7E,uCAAK,SAAS,EAAE,WAAW,sBAAsB,CAAC,QAAQ,CAAC,EAAE;YAC3D,uCAAK,SAAS,EAAE,sBAAsB,EAAE;gBACtC,8BAAC,eAAe,OAAK,OAAO,IAAG,KAAK,CAAmB,CACnD,CACF,CACF,CACP,CAAC,CAAC,CAAC,CACF,6DAAK,CACN,CAAC;AACJ,CAAC,CAAC;AAvCW,QAAA,MAAM,UAuCjB"}
@@ -5,4 +5,7 @@ export interface IButton {
5
5
  position?: "left" | "center" | "right";
6
6
  isFullWidth?: boolean;
7
7
  containerClass?: string;
8
+ options?: {
9
+ [key: string]: any;
10
+ };
8
11
  }
@@ -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, 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,14 +1,22 @@
1
1
  import "nvs-flexgrid";
2
2
  import "./_style.css";
3
+ import React, { useState } from "react";
3
4
  import { Button } from "./components/button";
4
- import { FormikForm } from "./formikForm";
5
- import React from "react";
6
- import { FormBuilder } from "./components/formBuilder";
7
5
  import { Container } from "./components/container";
8
- export const NvsDynamicForm = ({ onSubmit, formElements = {}, fields = [], formClass, buttonComponent, submitButtonDefaultOptions, 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 },
6
+ import { FormBuilder } from "./components/formBuilder";
7
+ import { FormikForm } from "./formikForm";
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
- React.createElement(Button, { buttonComponent: buttonComponent, visible: submitButtonVisible, label: submitButtonLabel, isFullWidth: submitButtonIsFullWidth, position: submitButtonPosition, containerClass: submitButtonContainerClass })));
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);
13
21
  };
14
22
  //# sourceMappingURL=_template.js.map
@@ -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,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,QAAQ,EACR,YAAY,GAAG,EAAE,EACjB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,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,GAC1C,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"}
@@ -14,6 +14,9 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
14
14
  useGroupContainer?: boolean;
15
15
  buttonComponent: React.FC<any>;
16
16
  submitButtonDefaultOptions: ISubmitButtonDefaultOptions;
17
+ submitButtonOptions?: {
18
+ [key: string]: any;
19
+ };
17
20
  submitButtonVisible?: boolean;
18
21
  submitButtonLabel?: string;
19
22
  submitButtonPosition?: "left" | "center" | "right";
@@ -22,4 +25,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
22
25
  addButtonDefaultOptions?: ArrayFieldAddButton;
23
26
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
24
27
  labelDefaultOptions?: LabelOptions;
28
+ doubleSubmitProtection?: boolean;
25
29
  }
@@ -1,3 +1,3 @@
1
1
  import { IButton } from "./_type";
2
2
  import React from "react";
3
- export declare const Button: ({ buttonComponent: ButtonComponent, visible, label, position, isFullWidth, containerClass, }: IButton) => React.JSX.Element;
3
+ export declare const Button: ({ buttonComponent: ButtonComponent, visible, label, position, isFullWidth, containerClass, options, }: IButton) => React.JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- export const Button = ({ buttonComponent: ButtonComponent, visible, label, position = "right", isFullWidth, containerClass, }) => {
2
+ export const Button = ({ buttonComponent: ButtonComponent, visible, label, position = "right", isFullWidth, containerClass, options = {}, }) => {
3
3
  const getButtonPositionClass = (position) => {
4
4
  const classes = {
5
5
  left: "nvs-jc-start",
@@ -16,6 +16,6 @@ export const Button = ({ buttonComponent: ButtonComponent, visible, label, posit
16
16
  return visible ? (React.createElement("div", { className: `nvs-container-fluid${containerClass ? ` ${containerClass}` : ""}` },
17
17
  React.createElement("div", { className: `nvs-row ${getButtonPositionClass(position)}` },
18
18
  React.createElement("div", { className: getSubmitButtonClasses() },
19
- React.createElement(ButtonComponent, null, label))))) : (React.createElement(React.Fragment, null));
19
+ React.createElement(ButtonComponent, { ...options }, label))))) : (React.createElement(React.Fragment, null));
20
20
  };
21
21
  //# sourceMappingURL=_template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../../../lib/nvs-dynamic-form/components/button/_template.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,eAAe,EAAE,eAAe,EAChC,OAAO,EACP,KAAK,EACL,QAAQ,GAAG,OAAO,EAClB,WAAW,EACX,cAAc,GACN,EAAE,EAAE;IACZ,MAAM,sBAAsB,GAAG,CAAC,QAAqC,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,eAAe;SACxB,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,6BACE,SAAS,EAAE,sBAAsB,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAE7E,6BAAK,SAAS,EAAE,WAAW,sBAAsB,CAAC,QAAQ,CAAC,EAAE;YAC3D,6BAAK,SAAS,EAAE,sBAAsB,EAAE;gBACtC,oBAAC,eAAe,QAAE,KAAK,CAAmB,CACtC,CACF,CACF,CACP,CAAC,CAAC,CAAC,CACF,yCAAK,CACN,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"_template.js","sourceRoot":"","sources":["../../../../../lib/nvs-dynamic-form/components/button/_template.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,eAAe,EAAE,eAAe,EAChC,OAAO,EACP,KAAK,EACL,QAAQ,GAAG,OAAO,EAClB,WAAW,EACX,cAAc,EACd,OAAO,GAAG,EAAE,GACJ,EAAE,EAAE;IACZ,MAAM,sBAAsB,GAAG,CAAC,QAAqC,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,eAAe;SACxB,CAAC;QACF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QAEpC,WAAW,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,CAAC,CAAC,CACf,6BACE,SAAS,EAAE,sBAAsB,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAE7E,6BAAK,SAAS,EAAE,WAAW,sBAAsB,CAAC,QAAQ,CAAC,EAAE;YAC3D,6BAAK,SAAS,EAAE,sBAAsB,EAAE;gBACtC,oBAAC,eAAe,OAAK,OAAO,IAAG,KAAK,CAAmB,CACnD,CACF,CACF,CACP,CAAC,CAAC,CAAC,CACF,yCAAK,CACN,CAAC;AACJ,CAAC,CAAC"}
@@ -5,4 +5,7 @@ export interface IButton {
5
5
  position?: "left" | "center" | "right";
6
6
  isFullWidth?: boolean;
7
7
  containerClass?: string;
8
+ options?: {
9
+ [key: string]: any;
10
+ };
8
11
  }
@@ -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";
7
+ import { Container } from "./components/container";
8
+ import { FormBuilder } from "./components/formBuilder";
5
9
  import { FormikForm } from "./formikForm";
6
10
  import { INvsDynamicForm } from "./_type";
7
- import React from "react";
8
- import { FormBuilder } from "./components/formBuilder";
9
- import { Container } from "./components/container";
10
11
 
11
12
  export const NvsDynamicForm = ({
12
13
  onSubmit,
@@ -15,6 +16,7 @@ export const NvsDynamicForm = ({
15
16
  formClass,
16
17
  buttonComponent,
17
18
  submitButtonDefaultOptions,
19
+ submitButtonOptions,
18
20
  submitButtonVisible = true,
19
21
  submitButtonLabel = submitButtonDefaultOptions.label,
20
22
  submitButtonIsFullWidth = submitButtonDefaultOptions.isFullWidth,
@@ -27,9 +29,19 @@ export const NvsDynamicForm = ({
27
29
  useGroupContainer = false,
28
30
  addButtonDefaultOptions,
29
31
  removeButtonDefaultOptions,
32
+ doubleSubmitProtection = false,
30
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
+
31
43
  const formikForm = (
32
- <FormikForm onSubmit={onSubmit} fields={fields} formClass={formClass}>
44
+ <FormikForm onSubmit={handleSubmit} fields={fields} formClass={formClass}>
33
45
  <FormBuilder
34
46
  containerComponent={container}
35
47
  formElements={formElements}
@@ -49,6 +61,7 @@ export const NvsDynamicForm = ({
49
61
  isFullWidth={submitButtonIsFullWidth}
50
62
  position={submitButtonPosition}
51
63
  containerClass={submitButtonContainerClass}
64
+ options={submitButtonOptions}
52
65
  />
53
66
  </FormikForm>
54
67
  );
@@ -23,6 +23,7 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
23
23
  useGroupContainer?: boolean;
24
24
  buttonComponent: React.FC<any>;
25
25
  submitButtonDefaultOptions: ISubmitButtonDefaultOptions;
26
+ submitButtonOptions?: { [key: string]: any };
26
27
  submitButtonVisible?: boolean;
27
28
  submitButtonLabel?: string;
28
29
  submitButtonPosition?: "left" | "center" | "right";
@@ -31,4 +32,5 @@ export interface INvsDynamicForm extends Omit<IField, "field"> {
31
32
  addButtonDefaultOptions?: ArrayFieldAddButton;
32
33
  removeButtonDefaultOptions?: ArrayFieldRemoveButton;
33
34
  labelDefaultOptions?: LabelOptions;
35
+ doubleSubmitProtection?: boolean;
34
36
  }
@@ -8,6 +8,7 @@ export const Button = ({
8
8
  position = "right",
9
9
  isFullWidth,
10
10
  containerClass,
11
+ options = {},
11
12
  }: IButton) => {
12
13
  const getButtonPositionClass = (position: "left" | "right" | "center") => {
13
14
  const classes = {
@@ -32,7 +33,7 @@ export const Button = ({
32
33
  >
33
34
  <div className={`nvs-row ${getButtonPositionClass(position)}`}>
34
35
  <div className={getSubmitButtonClasses()}>
35
- <ButtonComponent>{label}</ButtonComponent>
36
+ <ButtonComponent {...options}>{label}</ButtonComponent>
36
37
  </div>
37
38
  </div>
38
39
  </div>
@@ -5,4 +5,5 @@ export interface IButton {
5
5
  position?: "left" | "center" | "right";
6
6
  isFullWidth?: boolean;
7
7
  containerClass?: string;
8
+ options?: { [key: string]: any };
8
9
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nvs-dynamic-form/react-core",
3
- "version": "2.5.2",
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",