@nvs-dynamic-form/react-core 2.3.0 → 2.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 (79) hide show
  1. package/dist/cjs/nvs-dynamic-form/_template.js +4 -17
  2. package/dist/cjs/nvs-dynamic-form/_template.js.map +1 -1
  3. package/dist/cjs/nvs-dynamic-form/components/arrayField/_template.js +25 -26
  4. package/dist/cjs/nvs-dynamic-form/components/arrayField/_template.js.map +1 -1
  5. package/dist/cjs/nvs-dynamic-form/components/elements/_template.d.ts +16 -0
  6. package/dist/cjs/nvs-dynamic-form/components/elements/_template.js +62 -0
  7. package/dist/cjs/nvs-dynamic-form/components/elements/_template.js.map +1 -0
  8. package/dist/cjs/nvs-dynamic-form/components/elements/index.d.ts +1 -0
  9. package/dist/cjs/nvs-dynamic-form/components/elements/index.js +18 -0
  10. package/dist/cjs/nvs-dynamic-form/components/elements/index.js.map +1 -0
  11. package/dist/cjs/nvs-dynamic-form/components/formBuilder/_template.d.ts +20 -0
  12. package/dist/cjs/nvs-dynamic-form/components/formBuilder/_template.js +84 -0
  13. package/dist/cjs/nvs-dynamic-form/components/formBuilder/_template.js.map +1 -0
  14. package/dist/cjs/nvs-dynamic-form/components/formBuilder/index.d.ts +1 -0
  15. package/dist/cjs/nvs-dynamic-form/components/formBuilder/index.js +18 -0
  16. package/dist/cjs/nvs-dynamic-form/components/formBuilder/index.js.map +1 -0
  17. package/dist/cjs/nvs-dynamic-form/components/groupField/_template.d.ts +2 -1
  18. package/dist/cjs/nvs-dynamic-form/components/groupField/_template.js +33 -17
  19. package/dist/cjs/nvs-dynamic-form/components/groupField/_template.js.map +1 -1
  20. package/dist/cjs/nvs-dynamic-form/components/groupField/_type.d.ts +1 -0
  21. package/dist/cjs/types/array-field.type.d.ts +4 -2
  22. package/dist/cjs/types/array-field.type.js +2 -0
  23. package/dist/cjs/types/array-field.type.js.map +1 -1
  24. package/dist/cjs/types/group-field.type.d.ts +3 -5
  25. package/dist/esm/nvs-dynamic-form/_template.js +4 -17
  26. package/dist/esm/nvs-dynamic-form/_template.js.map +1 -1
  27. package/dist/esm/nvs-dynamic-form/components/arrayField/_template.js +26 -27
  28. package/dist/esm/nvs-dynamic-form/components/arrayField/_template.js.map +1 -1
  29. package/dist/esm/nvs-dynamic-form/components/elements/_template.d.ts +16 -0
  30. package/dist/esm/nvs-dynamic-form/components/elements/_template.js +35 -0
  31. package/dist/esm/nvs-dynamic-form/components/elements/_template.js.map +1 -0
  32. package/dist/esm/nvs-dynamic-form/components/elements/index.d.ts +1 -0
  33. package/dist/esm/nvs-dynamic-form/components/elements/index.js +2 -0
  34. package/dist/esm/nvs-dynamic-form/components/elements/index.js.map +1 -0
  35. package/dist/esm/nvs-dynamic-form/components/formBuilder/_template.d.ts +20 -0
  36. package/dist/esm/nvs-dynamic-form/components/formBuilder/_template.js +57 -0
  37. package/dist/esm/nvs-dynamic-form/components/formBuilder/_template.js.map +1 -0
  38. package/dist/esm/nvs-dynamic-form/components/formBuilder/index.d.ts +1 -0
  39. package/dist/esm/nvs-dynamic-form/components/formBuilder/index.js +2 -0
  40. package/dist/esm/nvs-dynamic-form/components/formBuilder/index.js.map +1 -0
  41. package/dist/esm/nvs-dynamic-form/components/groupField/_template.d.ts +2 -1
  42. package/dist/esm/nvs-dynamic-form/components/groupField/_template.js +10 -17
  43. package/dist/esm/nvs-dynamic-form/components/groupField/_template.js.map +1 -1
  44. package/dist/esm/nvs-dynamic-form/components/groupField/_type.d.ts +1 -0
  45. package/dist/esm/types/array-field.type.d.ts +4 -2
  46. package/dist/esm/types/array-field.type.js +2 -0
  47. package/dist/esm/types/array-field.type.js.map +1 -1
  48. package/dist/esm/types/group-field.type.d.ts +3 -5
  49. package/lib/nvs-dynamic-form/_template.tsx +21 -18
  50. package/lib/nvs-dynamic-form/components/arrayField/_template.tsx +51 -40
  51. package/lib/nvs-dynamic-form/components/elements/_template.tsx +94 -0
  52. package/lib/nvs-dynamic-form/components/elements/index.tsx +1 -0
  53. package/lib/nvs-dynamic-form/components/formBuilder/_template.tsx +149 -0
  54. package/lib/nvs-dynamic-form/components/formBuilder/index.tsx +1 -0
  55. package/lib/nvs-dynamic-form/components/groupField/_template.tsx +33 -13
  56. package/lib/nvs-dynamic-form/components/groupField/_type.tsx +1 -0
  57. package/lib/nvs-dynamic-form/stories/components/button.tsx +17 -0
  58. package/lib/nvs-dynamic-form/stories/components/container.tsx +14 -0
  59. package/lib/nvs-dynamic-form/stories/components/index.tsx +3 -0
  60. package/lib/nvs-dynamic-form/stories/components/textboxElement.tsx +20 -0
  61. package/lib/nvs-dynamic-form/stories/fields/arrayField/basicExample.stories.tsx +87 -0
  62. package/lib/nvs-dynamic-form/stories/fields/arrayField/groupField.stories.tsx +102 -0
  63. package/lib/nvs-dynamic-form/stories/fields/arrayField/nested.stories.tsx +137 -0
  64. package/lib/nvs-dynamic-form/stories/fields/basicExample.stories.tsx +66 -0
  65. package/lib/nvs-dynamic-form/stories/fields/groupField/arrayFields.stories.tsx +113 -0
  66. package/lib/nvs-dynamic-form/stories/fields/groupField/basicExample.stories.tsx +86 -0
  67. package/lib/nvs-dynamic-form/stories/fields/groupField/container.stories.tsx +112 -0
  68. package/lib/nvs-dynamic-form/stories/fields/groupField/nested.stories.tsx +103 -0
  69. package/lib/types/array-field.type.tsx +6 -2
  70. package/lib/types/group-field.type.tsx +3 -3
  71. package/package.json +1 -1
  72. package/dist/cjs/nvs-dynamic-form/services/generateFormContentUtils.d.ts +0 -46
  73. package/dist/cjs/nvs-dynamic-form/services/generateFormContentUtils.js +0 -97
  74. package/dist/cjs/nvs-dynamic-form/services/generateFormContentUtils.js.map +0 -1
  75. package/dist/esm/nvs-dynamic-form/services/generateFormContentUtils.d.ts +0 -46
  76. package/dist/esm/nvs-dynamic-form/services/generateFormContentUtils.js +0 -90
  77. package/dist/esm/nvs-dynamic-form/services/generateFormContentUtils.js.map +0 -1
  78. package/lib/nvs-dynamic-form/_stories.tsx +0 -349
  79. package/lib/nvs-dynamic-form/services/generateFormContentUtils.tsx +0 -196
@@ -0,0 +1,94 @@
1
+ import {
2
+ ArrayField,
3
+ ArrayFieldAddButton,
4
+ GroupField,
5
+ LabelOptions,
6
+ } from "../../../types";
7
+ import { Field, IFormElement } from "../field";
8
+ import React, { useEffect, useState } from "react";
9
+
10
+ import { ArrayField as ArrayFieldElement } from "../arrayField";
11
+ import { FieldBase } from "../../../types";
12
+ import { FieldType } from "../../_type";
13
+ import { GroupField as GroupFieldElement } from "../groupField";
14
+
15
+ export const Elements = ({
16
+ fields,
17
+ formElements,
18
+ containerComponent,
19
+ useContainersOutsideGroup,
20
+ useGroupContainer,
21
+ containerVisible,
22
+ buttonComponent,
23
+ fieldArrayAddButtonDefaultOptions = {},
24
+ fieldArrayRemoveButtonDefaultOptions = {},
25
+ labelDefaultOptions = {},
26
+ }: {
27
+ fields: Array<FieldType>;
28
+ formElements: IFormElement;
29
+ containerComponent: React.FC<any>;
30
+ useContainersOutsideGroup: boolean;
31
+ useGroupContainer: boolean;
32
+ containerVisible: boolean;
33
+ buttonComponent?: React.FC<any>;
34
+ fieldArrayAddButtonDefaultOptions?: ArrayFieldAddButton;
35
+ fieldArrayRemoveButtonDefaultOptions?: ArrayFieldAddButton;
36
+ labelDefaultOptions?: LabelOptions;
37
+ }) => {
38
+ const [fieldsElements, setFieldsElements] = useState<JSX.Element[]>([]);
39
+
40
+ const createFormElements = (): JSX.Element[] => {
41
+ const fieldsElements = [];
42
+ for (const field of fields) {
43
+ if (field instanceof GroupField)
44
+ fieldsElements.push(createGroupFieldElement(field));
45
+ else if (field instanceof ArrayField)
46
+ fieldsElements.push(createArrayFieldElement(field));
47
+ else fieldsElements.push(createSingleFieldElement(field));
48
+ }
49
+ return fieldsElements;
50
+ };
51
+
52
+ const createSingleFieldElement = (field: FieldBase<unknown>) => {
53
+ return <Field key={field.id} formElements={formElements} field={field} />;
54
+ };
55
+
56
+ const createGroupFieldElement = (field: GroupField) => {
57
+ return (
58
+ <GroupFieldElement
59
+ key={field.id}
60
+ formElements={formElements}
61
+ field={field}
62
+ containerComponent={containerComponent}
63
+ useContainersOutsideGroup={useContainersOutsideGroup}
64
+ useGroupContainer={useGroupContainer}
65
+ containerVisible={containerVisible}
66
+ buttonComponent={buttonComponent!}
67
+ />
68
+ );
69
+ };
70
+
71
+ const createArrayFieldElement = (field: ArrayField) => {
72
+ return (
73
+ <ArrayFieldElement
74
+ key={field.id}
75
+ formElements={formElements}
76
+ field={field}
77
+ containerComponent={containerComponent}
78
+ useContainersOutsideGroup={useContainersOutsideGroup}
79
+ useGroupContainer={useGroupContainer}
80
+ containerVisible={containerVisible}
81
+ buttonComponent={buttonComponent!}
82
+ addButtonDefaultOptions={fieldArrayAddButtonDefaultOptions}
83
+ removeButtonDefaultOptions={fieldArrayRemoveButtonDefaultOptions}
84
+ labelDefaultOptions={labelDefaultOptions}
85
+ />
86
+ );
87
+ };
88
+
89
+ useEffect(() => {
90
+ if (fields.length > 0) setFieldsElements(createFormElements());
91
+ }, [fields]);
92
+
93
+ return fieldsElements.length > 0 ? fieldsElements : <></>;
94
+ };
@@ -0,0 +1 @@
1
+ export * from "./_template";
@@ -0,0 +1,149 @@
1
+ import React, { ReactNode, useEffect, useState } from "react";
2
+ import { ArrayField, GroupField, LabelOptions } from "../../../types";
3
+ import { IFormElement } from "../field";
4
+ import { FieldType } from "../../_type";
5
+ import { ArrayFieldAddButton } from "../../../types";
6
+ import { Container } from "../container";
7
+ import { Elements } from "../elements";
8
+
9
+ export const FormBuilder = ({
10
+ containerComponent,
11
+ formElements,
12
+ useContainersOutsideGroup,
13
+ useGroupContainer,
14
+ containerVisible,
15
+ fields,
16
+ containerOptions = {},
17
+ buttonComponent,
18
+ fieldArrayAddButtonDefaultOptions,
19
+ fieldArrayRemoveButtonDefaultOptions,
20
+ labelDefaultOptions,
21
+ }: {
22
+ containerComponent: React.FC<any>;
23
+ formElements: IFormElement;
24
+ useContainersOutsideGroup: boolean;
25
+ useGroupContainer: boolean;
26
+ containerVisible: boolean;
27
+ fields: Array<FieldType>;
28
+ buttonComponent?: React.FC<any>;
29
+ containerOptions?: { [key: string]: any };
30
+ fieldArrayAddButtonDefaultOptions?: ArrayFieldAddButton;
31
+ fieldArrayRemoveButtonDefaultOptions?: ArrayFieldAddButton;
32
+ labelDefaultOptions?: LabelOptions;
33
+ }) => {
34
+ const [formContent, setFormContent] = useState<ReactNode>();
35
+
36
+ const createFormContent = () => {
37
+ const singleFields = createSingleFieldsElements();
38
+ const groupFields = createGroupFieldsElements();
39
+
40
+ let formContent;
41
+ if (containerVisible && useContainersOutsideGroup && singleFields)
42
+ formContent = (
43
+ <>
44
+ {createContainer(singleFields, containerOptions)}
45
+ {groupFields}
46
+ </>
47
+ );
48
+ else
49
+ formContent = createFormGroup(
50
+ <>
51
+ {singleFields}
52
+ {groupFields}
53
+ </>,
54
+ );
55
+
56
+ return formContent;
57
+ };
58
+
59
+ const createContentContainer = (formElements: ReactNode) => {
60
+ return (
61
+ <div className="nvs-container-fluid">
62
+ <div className="nvs-row">{formElements}</div>
63
+ </div>
64
+ );
65
+ };
66
+
67
+ const createSingleFieldsElements = () => {
68
+ const singleFields = getSingleFields();
69
+ return (
70
+ singleFields.length > 0 &&
71
+ createContentContainer(
72
+ <Elements
73
+ fields={singleFields}
74
+ formElements={formElements}
75
+ containerComponent={containerComponent}
76
+ useContainersOutsideGroup={useContainersOutsideGroup}
77
+ useGroupContainer={useGroupContainer}
78
+ containerVisible={containerVisible}
79
+ buttonComponent={buttonComponent}
80
+ fieldArrayAddButtonDefaultOptions={fieldArrayAddButtonDefaultOptions}
81
+ fieldArrayRemoveButtonDefaultOptions={
82
+ fieldArrayRemoveButtonDefaultOptions
83
+ }
84
+ labelDefaultOptions={labelDefaultOptions}
85
+ />,
86
+ )
87
+ );
88
+ };
89
+
90
+ const createGroupFieldsElements = () => {
91
+ const groupFields = getGroupFields();
92
+ return (
93
+ groupFields.length > 0 && (
94
+ <Elements
95
+ fields={groupFields}
96
+ formElements={formElements}
97
+ containerComponent={containerComponent}
98
+ useContainersOutsideGroup={useContainersOutsideGroup}
99
+ useGroupContainer={useGroupContainer}
100
+ containerVisible={containerVisible}
101
+ buttonComponent={buttonComponent}
102
+ fieldArrayAddButtonDefaultOptions={fieldArrayAddButtonDefaultOptions}
103
+ fieldArrayRemoveButtonDefaultOptions={
104
+ fieldArrayRemoveButtonDefaultOptions
105
+ }
106
+ labelDefaultOptions={labelDefaultOptions}
107
+ />
108
+ )
109
+ );
110
+ };
111
+
112
+ const isSingleField = (field: FieldType) => {
113
+ return !(
114
+ (field instanceof GroupField || field instanceof ArrayField) &&
115
+ field.containerVisible &&
116
+ useGroupContainer &&
117
+ containerVisible
118
+ );
119
+ };
120
+
121
+ const getSingleFields = () => {
122
+ return fields.filter((field) => isSingleField(field));
123
+ };
124
+
125
+ const getGroupFields = () => {
126
+ return fields.filter((field) => !isSingleField(field));
127
+ };
128
+
129
+ const createContainer = (content: ReactNode, containerProps: object) => {
130
+ return (
131
+ <Container
132
+ containerComponent={containerComponent}
133
+ options={containerProps}
134
+ >
135
+ {content}
136
+ </Container>
137
+ );
138
+ };
139
+
140
+ const createFormGroup = (formContent: ReactNode) => {
141
+ return <div className="df-form-group">{formContent}</div>;
142
+ };
143
+
144
+ useEffect(() => {
145
+ setFormContent(createFormContent());
146
+ }, [fields]);
147
+
148
+ return <>{formContent}</>;
149
+ };
@@ -0,0 +1 @@
1
+ export * from "./_template";
@@ -1,4 +1,7 @@
1
- import { GenerateFormContentUtils } from "../../services/generateFormContentUtils";
1
+ import React, { useState } from "react";
2
+
3
+ import { Elements } from "../elements";
4
+ import { FormBuilder } from "../formBuilder";
2
5
  import { IGroupField } from "./_type";
3
6
 
4
7
  export const GroupField = ({
@@ -8,25 +11,42 @@ export const GroupField = ({
8
11
  containerVisible,
9
12
  useContainersOutsideGroup,
10
13
  useGroupContainer,
14
+ buttonComponent,
11
15
  }: IGroupField) => {
12
- const generateFormContentUtils = new GenerateFormContentUtils({
13
- containerComponent,
14
- formElements,
15
- useContainersOutsideGroup,
16
- useGroupContainer,
17
- containerOptions: groupField.containerOptions,
18
- containerVisible: containerVisible && groupField.containerVisible!,
19
- fields: groupField.fields.map((field) => {
16
+ const [fields, _] = useState(
17
+ groupField.fields.map((field) => {
20
18
  field.id = `${groupField.id}.${field.id}`;
21
19
  return field;
22
20
  }),
23
- });
21
+ );
24
22
 
25
23
  const isContainerVisible = () => {
26
24
  return groupField.containerVisible && useGroupContainer && containerVisible;
27
25
  };
28
26
 
29
- return isContainerVisible()
30
- ? generateFormContentUtils.createFormContent()
31
- : generateFormContentUtils.createFormElements(groupField.fields);
27
+ return (
28
+ fields &&
29
+ (isContainerVisible() ? (
30
+ <FormBuilder
31
+ containerComponent={containerComponent}
32
+ formElements={formElements}
33
+ useContainersOutsideGroup={useContainersOutsideGroup}
34
+ useGroupContainer={useGroupContainer}
35
+ containerOptions={groupField.containerOptions}
36
+ containerVisible={containerVisible}
37
+ fields={fields}
38
+ buttonComponent={buttonComponent}
39
+ />
40
+ ) : (
41
+ <Elements
42
+ fields={fields}
43
+ containerComponent={containerComponent}
44
+ formElements={formElements}
45
+ useContainersOutsideGroup={useContainersOutsideGroup}
46
+ useGroupContainer={useGroupContainer}
47
+ containerVisible={containerVisible}
48
+ buttonComponent={buttonComponent}
49
+ />
50
+ ))
51
+ );
32
52
  };
@@ -7,4 +7,5 @@ export interface IGroupField extends IField {
7
7
  containerVisible: boolean;
8
8
  useContainersOutsideGroup: boolean;
9
9
  useGroupContainer: boolean;
10
+ buttonComponent?: React.FC<any>;
10
11
  }
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+
3
+ export const ButtonComponent = ({
4
+ children,
5
+ type = "submit",
6
+ onClick = () => {},
7
+ }: {
8
+ children: string;
9
+ type: "submit" | "reset" | "button";
10
+ onClick?: () => void;
11
+ }) => {
12
+ return (
13
+ <button onClick={onClick} style={{ width: "100%" }} type={type}>
14
+ {children}
15
+ </button>
16
+ );
17
+ };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+
3
+ export const Container = ({ children, ...props }) => {
4
+ return (
5
+ <div id="custom-container" className="nvs-container-fluid">
6
+ <div className="nvs-row">
7
+ <div className="nvs-col-12">
8
+ <h1>{props.title}</h1>
9
+ </div>
10
+ <div className="nvs-col-12">{children}</div>
11
+ </div>
12
+ </div>
13
+ );
14
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./button";
2
+ export * from "./container";
3
+ export * from "./textboxElement";
@@ -0,0 +1,20 @@
1
+ import { FieldBase } from "../../../types";
2
+ import React from "react";
3
+
4
+ export class TextboxField extends FieldBase<string> {
5
+ override readonly fieldType? = "textbox";
6
+ type?: "email" | "number" | "password" | "tel" | "text" | "url";
7
+ placeholder?: string;
8
+
9
+ constructor(options: TextboxField) {
10
+ super(options, "");
11
+ this.type = options.type ?? "text";
12
+ this.placeholder = options.placeholder ?? "";
13
+ }
14
+ }
15
+
16
+ export const TextboxElement = ({ defaultValue, ...props }: TextboxField) => {
17
+ return (
18
+ <input style={{ width: "100%", boxSizing: "border-box" }} {...props} />
19
+ );
20
+ };
@@ -0,0 +1,87 @@
1
+ import * as Yup from "yup";
2
+
3
+ import {
4
+ ButtonComponent,
5
+ TextboxElement,
6
+ TextboxField,
7
+ } from "../../components";
8
+ import { INvsDynamicForm, NvsDynamicForm } from "../../..";
9
+
10
+ import { ArrayField } from "../../../../types";
11
+
12
+ export default {
13
+ component: NvsDynamicForm,
14
+ title: "Array Field",
15
+ };
16
+
17
+ export const Default: { args: INvsDynamicForm; name: string } = {
18
+ name: "Default",
19
+ args: {
20
+ onSubmit: (values) => {
21
+ alert(JSON.stringify(values));
22
+ },
23
+ submitButtonIsFullWidth: false,
24
+ submitButtonLabel: "Save",
25
+ submitButtonVisible: true,
26
+ submitButtonPosition: "right",
27
+ submitButtonDefaultOptions: {
28
+ label: "Save",
29
+ isFullWidth: true,
30
+ position: "right",
31
+ },
32
+ buttonComponent: ButtonComponent,
33
+ formElements: {
34
+ textbox: {
35
+ component: TextboxElement,
36
+ class: TextboxField,
37
+ },
38
+ },
39
+ fields: [
40
+ new TextboxField({
41
+ id: "firstName",
42
+ placeholder: "Enter your first name",
43
+ defaultValue: "ismet",
44
+ validate: Yup.string().required(),
45
+ screenSize: {
46
+ desktop: 6,
47
+ mobile: 6,
48
+ },
49
+ }),
50
+ new TextboxField({
51
+ id: "lastName",
52
+ placeholder: "Enter your last name",
53
+ screenSize: {
54
+ desktop: 6,
55
+ mobile: 6,
56
+ },
57
+ }),
58
+ new ArrayField({
59
+ id: "addresses",
60
+ label: "Addresses",
61
+ addButtonOptions: {
62
+ label: "Add Address",
63
+ },
64
+ defaultValues: [
65
+ { cityName: "İzmir", districtName: "Göztepe" },
66
+ { cityName: "İstanbul", districtName: "Kadıköy" },
67
+ ],
68
+ validate: Yup.array().min(2).max(3),
69
+ fields: [
70
+ new TextboxField({
71
+ id: "cityName",
72
+ label: "City Name",
73
+ placeholder: "Enter your city name",
74
+ screenSize: 6,
75
+ validate: Yup.string().required(),
76
+ }),
77
+ new TextboxField({
78
+ id: "districtName",
79
+ label: "district Name",
80
+ placeholder: "Enter your district name",
81
+ screenSize: 6,
82
+ }),
83
+ ],
84
+ }),
85
+ ],
86
+ },
87
+ };
@@ -0,0 +1,102 @@
1
+ import * as Yup from "yup";
2
+
3
+ import { ArrayField, GroupField } from "../../../../types";
4
+ import {
5
+ ButtonComponent,
6
+ TextboxElement,
7
+ TextboxField,
8
+ } from "../../components";
9
+ import { INvsDynamicForm, NvsDynamicForm } from "../../..";
10
+
11
+ export default {
12
+ component: NvsDynamicForm,
13
+ title: "Array Field",
14
+ };
15
+
16
+ export const GroupFieldInArray: { args: INvsDynamicForm; name: string } = {
17
+ name: "Group Field In Array",
18
+ args: {
19
+ onSubmit: (values) => {
20
+ alert(JSON.stringify(values));
21
+ },
22
+ submitButtonIsFullWidth: false,
23
+ submitButtonLabel: "Save",
24
+ submitButtonVisible: true,
25
+ submitButtonPosition: "right",
26
+ submitButtonDefaultOptions: {
27
+ label: "Save",
28
+ isFullWidth: true,
29
+ position: "right",
30
+ },
31
+ buttonComponent: ButtonComponent,
32
+ formElements: {
33
+ textbox: {
34
+ component: TextboxElement,
35
+ class: TextboxField,
36
+ },
37
+ },
38
+ fields: [
39
+ new TextboxField({
40
+ id: "firstName",
41
+ placeholder: "Enter your first name",
42
+ defaultValue: "ismet",
43
+ validate: Yup.string().required(),
44
+ screenSize: {
45
+ desktop: 6,
46
+ mobile: 6,
47
+ },
48
+ }),
49
+ new TextboxField({
50
+ id: "lastName",
51
+ placeholder: "Enter your last name",
52
+ screenSize: {
53
+ desktop: 6,
54
+ mobile: 6,
55
+ },
56
+ }),
57
+ new ArrayField({
58
+ id: "addresses",
59
+ label: "Addresses",
60
+ addButtonOptions: {
61
+ label: "Add Address",
62
+ },
63
+ defaultValues: [
64
+ {
65
+ address: {
66
+ cityName: "Istanbul",
67
+ districtName: "Kadıköy",
68
+ },
69
+ },
70
+ ],
71
+ validate: Yup.array().min(2).max(3),
72
+ fields: [
73
+ new TextboxField({
74
+ id: "addressName",
75
+ label: "Address Name",
76
+ placeholder: "Enter your address name",
77
+ screenSize: 12,
78
+ validate: Yup.string().required(),
79
+ }),
80
+ new GroupField({
81
+ id: "address",
82
+ fields: [
83
+ new TextboxField({
84
+ id: "cityName",
85
+ label: "City Name",
86
+ placeholder: "Enter your city name",
87
+ screenSize: 6,
88
+ validate: Yup.string().required(),
89
+ }),
90
+ new TextboxField({
91
+ id: "districtName",
92
+ label: "district Name",
93
+ placeholder: "Enter your district name",
94
+ screenSize: 6,
95
+ }),
96
+ ],
97
+ }),
98
+ ],
99
+ }),
100
+ ],
101
+ },
102
+ };