@akinon/akiform-builder 0.6.0 → 0.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.
- package/dist/cjs/akiform-builder.d.ts +6 -0
- package/dist/cjs/akiform-builder.d.ts.map +1 -0
- package/dist/cjs/akiform-builder.js +283 -0
- package/dist/cjs/field-builder.d.ts +35 -0
- package/dist/cjs/field-builder.d.ts.map +1 -0
- package/dist/cjs/field-builder.js +87 -0
- package/dist/cjs/i18n/index.d.ts +5 -0
- package/dist/cjs/i18n/index.d.ts.map +1 -0
- package/dist/cjs/i18n/index.js +14 -0
- package/dist/cjs/i18n/translations/en.d.ts +7 -0
- package/dist/cjs/i18n/translations/en.d.ts.map +1 -0
- package/dist/cjs/i18n/translations/en.js +8 -0
- package/dist/cjs/i18n/translations/tr.d.ts +7 -0
- package/dist/cjs/i18n/translations/tr.d.ts.map +1 -0
- package/dist/cjs/i18n/translations/tr.js +8 -0
- package/dist/cjs/index.d.ts +2 -4
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +4 -9
- package/dist/cjs/types.d.ts +62 -62
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/akiform-builder.d.ts +6 -0
- package/dist/esm/akiform-builder.d.ts.map +1 -0
- package/dist/esm/akiform-builder.js +280 -0
- package/dist/esm/field-builder.d.ts +35 -0
- package/dist/esm/field-builder.d.ts.map +1 -0
- package/dist/esm/field-builder.js +84 -0
- package/dist/esm/i18n/index.d.ts +5 -0
- package/dist/esm/i18n/index.d.ts.map +1 -0
- package/dist/esm/i18n/index.js +11 -0
- package/dist/esm/i18n/translations/en.d.ts +7 -0
- package/dist/esm/i18n/translations/en.d.ts.map +1 -0
- package/dist/esm/i18n/translations/en.js +6 -0
- package/dist/esm/i18n/translations/tr.d.ts +7 -0
- package/dist/esm/i18n/translations/tr.d.ts.map +1 -0
- package/dist/esm/i18n/translations/tr.js +6 -0
- package/dist/esm/index.d.ts +2 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -4
- package/dist/esm/types.d.ts +62 -62
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +15 -17
- package/dist/cjs/FormBuilderWatch.d.ts +0 -16
- package/dist/cjs/FormBuilderWatch.d.ts.map +0 -1
- package/dist/cjs/FormBuilderWatch.js +0 -72
- package/dist/cjs/RenderField.d.ts +0 -5
- package/dist/cjs/RenderField.d.ts.map +0 -1
- package/dist/cjs/RenderField.js +0 -45
- package/dist/cjs/component.d.ts +0 -4
- package/dist/cjs/component.d.ts.map +0 -1
- package/dist/cjs/component.js +0 -46
- package/dist/cjs/hook.d.ts +0 -3
- package/dist/cjs/hook.d.ts.map +0 -1
- package/dist/cjs/hook.js +0 -38
- package/dist/cjs/transformers/index.d.ts +0 -4
- package/dist/cjs/transformers/index.d.ts.map +0 -1
- package/dist/cjs/transformers/index.js +0 -77
- package/dist/cjs/transformers/types.d.ts +0 -22
- package/dist/cjs/transformers/types.d.ts.map +0 -1
- package/dist/cjs/transformers/types.js +0 -18
- package/dist/esm/FormBuilderWatch.d.ts +0 -16
- package/dist/esm/FormBuilderWatch.d.ts.map +0 -1
- package/dist/esm/FormBuilderWatch.js +0 -68
- package/dist/esm/RenderField.d.ts +0 -5
- package/dist/esm/RenderField.d.ts.map +0 -1
- package/dist/esm/RenderField.js +0 -41
- package/dist/esm/component.d.ts +0 -4
- package/dist/esm/component.d.ts.map +0 -1
- package/dist/esm/component.js +0 -42
- package/dist/esm/hook.d.ts +0 -3
- package/dist/esm/hook.d.ts.map +0 -1
- package/dist/esm/hook.js +0 -34
- package/dist/esm/transformers/index.d.ts +0 -4
- package/dist/esm/transformers/index.d.ts.map +0 -1
- package/dist/esm/transformers/index.js +0 -73
- package/dist/esm/transformers/types.d.ts +0 -22
- package/dist/esm/transformers/types.d.ts.map +0 -1
- package/dist/esm/transformers/types.js +0 -15
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DataTypesEnum = void 0;
|
|
4
|
-
var DataTypesEnum;
|
|
5
|
-
(function (DataTypesEnum) {
|
|
6
|
-
// Area = 'area',
|
|
7
|
-
DataTypesEnum["Dropdown"] = "dropdown";
|
|
8
|
-
DataTypesEnum["Input"] = "input";
|
|
9
|
-
DataTypesEnum["Select"] = "select";
|
|
10
|
-
DataTypesEnum["Text"] = "text";
|
|
11
|
-
DataTypesEnum["Bool"] = "bool";
|
|
12
|
-
// Image = 'image',
|
|
13
|
-
// ValueLabel = 'valuelabel',
|
|
14
|
-
// File = 'file',
|
|
15
|
-
DataTypesEnum["DateTime"] = "datetime";
|
|
16
|
-
// Multiple = 'multiple',
|
|
17
|
-
DataTypesEnum["Nested"] = "nested";
|
|
18
|
-
})(DataTypesEnum || (exports.DataTypesEnum = DataTypesEnum = {}));
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { FormField } from './types';
|
|
3
|
-
type FormBuilderWatchProps = {
|
|
4
|
-
builderFields: FormField[];
|
|
5
|
-
isDebounced?: boolean;
|
|
6
|
-
handleChange: (data: any) => void;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Reasons why seperate FormBuilderWatch component is created from FormBuilder:
|
|
10
|
-
* 1. FormBuilderWatch is a controlled component, value of form fields is controlled. In any given time, value of any field can be forced from parent. It's directly working with value instead of defaultValues. Also there is no way to change defaultValues after first render.
|
|
11
|
-
* 2. FormBuilderWatch is watching form changes and calls the given callback function. It's not using form methods like handleSubmit, reset, etc.
|
|
12
|
-
* 3. It's meticulously designed to not create loop. Since it's controlled and watching form changes, it's easy to create infinite loop. For example, callback can be called as result of form change, and parent can react to this change by returning same values to form.
|
|
13
|
-
*/
|
|
14
|
-
export declare const FormBuilderWatch: ({ builderFields, handleChange, isDebounced }: FormBuilderWatchProps) => React.JSX.Element;
|
|
15
|
-
export {};
|
|
16
|
-
//# sourceMappingURL=FormBuilderWatch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormBuilderWatch.d.ts","sourceRoot":"","sources":["../../src/FormBuilderWatch.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,KAAK,qBAAqB,GAAG;IAC3B,aAAa,EAAE,SAAS,EAAE,CAAC;IAE3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,iDAI1B,qBAAqB,sBAgFvB,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Akiform, useForm, useWatch } from '@akinon/akiform';
|
|
2
|
-
import dayjs from 'dayjs';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { RenderField } from './RenderField';
|
|
5
|
-
/**
|
|
6
|
-
* Reasons why seperate FormBuilderWatch component is created from FormBuilder:
|
|
7
|
-
* 1. FormBuilderWatch is a controlled component, value of form fields is controlled. In any given time, value of any field can be forced from parent. It's directly working with value instead of defaultValues. Also there is no way to change defaultValues after first render.
|
|
8
|
-
* 2. FormBuilderWatch is watching form changes and calls the given callback function. It's not using form methods like handleSubmit, reset, etc.
|
|
9
|
-
* 3. It's meticulously designed to not create loop. Since it's controlled and watching form changes, it's easy to create infinite loop. For example, callback can be called as result of form change, and parent can react to this change by returning same values to form.
|
|
10
|
-
*/
|
|
11
|
-
export const FormBuilderWatch = ({ builderFields, handleChange, isDebounced = false }) => {
|
|
12
|
-
const { control, setValue } = useForm();
|
|
13
|
-
const formWatch = useWatch({ control });
|
|
14
|
-
React.useEffect(() => {
|
|
15
|
-
// if formWatch are empty object, it means it's the first render. Do not call handleChange
|
|
16
|
-
if (!Object.keys(formWatch).length)
|
|
17
|
-
return;
|
|
18
|
-
// if item.value is same with formWatch do not call handleChange to prevent infinite loop
|
|
19
|
-
const isSame = builderFields.every(field => {
|
|
20
|
-
// if field type is datepicker, convert the formWatch value to string before comparing
|
|
21
|
-
if (field.type === 'datepicker') {
|
|
22
|
-
if (formWatch[field.key] === null) {
|
|
23
|
-
formWatch[field.key] = undefined;
|
|
24
|
-
}
|
|
25
|
-
if (!formWatch[field.key]) {
|
|
26
|
-
return field.value === formWatch[field.key];
|
|
27
|
-
}
|
|
28
|
-
const compareResult = dayjs(field.value).isSame(dayjs(formWatch[field.key]), 'day');
|
|
29
|
-
return compareResult;
|
|
30
|
-
}
|
|
31
|
-
// TODO write tests for this part because it can be a source of bug
|
|
32
|
-
// if watch value is object, should stringify before comparing
|
|
33
|
-
const isWatchValueObject = typeof formWatch[field.key] === 'object';
|
|
34
|
-
if (isWatchValueObject) {
|
|
35
|
-
return (JSON.stringify(field.value) === JSON.stringify(formWatch[field.key]));
|
|
36
|
-
}
|
|
37
|
-
return field.value === formWatch[field.key];
|
|
38
|
-
});
|
|
39
|
-
if (isSame) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
if (!isDebounced) {
|
|
43
|
-
handleChange(formWatch);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const timeout = setTimeout(() => {
|
|
47
|
-
handleChange(formWatch);
|
|
48
|
-
}, 1000);
|
|
49
|
-
return () => {
|
|
50
|
-
clearTimeout(timeout);
|
|
51
|
-
};
|
|
52
|
-
}, [formWatch]);
|
|
53
|
-
// value of fields can be set by parent
|
|
54
|
-
React.useEffect(() => {
|
|
55
|
-
builderFields.forEach(field => {
|
|
56
|
-
const { key, value, type } = field;
|
|
57
|
-
// if type is datepicker and value is set, convert it to dayjs
|
|
58
|
-
if (type === 'datepicker' && value) {
|
|
59
|
-
setValue(key, dayjs(value));
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
setValue(key, value);
|
|
63
|
-
});
|
|
64
|
-
}, [builderFields]);
|
|
65
|
-
return (React.createElement(React.Fragment, null,
|
|
66
|
-
React.createElement("div", { className: "form-builder" },
|
|
67
|
-
React.createElement(Akiform, null, builderFields.map(field => RenderField(field, control))))));
|
|
68
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Control } from '@akinon/akiform';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { FormField } from './types';
|
|
4
|
-
export declare const RenderField: (field: FormField, control: Control) => React.JSX.Element | "unsupported field type" | undefined;
|
|
5
|
-
//# sourceMappingURL=RenderField.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenderField.d.ts","sourceRoot":"","sources":["../../src/RenderField.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,iBAAiB,CAAC;AAMpD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAGL,SAAS,EAIV,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,WAAW,UAAW,SAAS,WAAW,OAAO,6DA+F7D,CAAC"}
|
package/dist/esm/RenderField.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { FormItem } from '@akinon/akiform';
|
|
2
|
-
import { Checkbox } from '@akinon/ui-checkbox';
|
|
3
|
-
import { DatePicker } from '@akinon/ui-date-picker';
|
|
4
|
-
import { Input } from '@akinon/ui-input';
|
|
5
|
-
import { InputNumber } from '@akinon/ui-input-number';
|
|
6
|
-
import { Select } from '@akinon/ui-select';
|
|
7
|
-
import React from 'react';
|
|
8
|
-
export const RenderField = (field, control) => {
|
|
9
|
-
var _a, _b;
|
|
10
|
-
switch (field.type) {
|
|
11
|
-
case 'input':
|
|
12
|
-
const inputField = field;
|
|
13
|
-
return (React.createElement(FormItem, { key: inputField.key, name: inputField.key, label: inputField.label, control: control }, ((_a = inputField.props) === null || _a === void 0 ? void 0 : _a.mode) !== 'multiple' ? (React.createElement(Input, { placeholder: inputField.placeholder })) : (React.createElement(Select, { mode: "tags", placeholder: inputField.placeholder }))));
|
|
14
|
-
case 'number':
|
|
15
|
-
const numberField = field;
|
|
16
|
-
return (React.createElement(FormItem, { key: numberField.key, name: numberField.key, label: numberField.label, control: control },
|
|
17
|
-
React.createElement(InputNumber, { keyboard: false, placeholder: numberField.placeholder })));
|
|
18
|
-
case 'select':
|
|
19
|
-
const selectField = field;
|
|
20
|
-
return (React.createElement(FormItem, { key: selectField.key, name: selectField.key, label: selectField.label, control: control },
|
|
21
|
-
React.createElement(Select, { mode: (_b = selectField.props) === null || _b === void 0 ? void 0 : _b.mode, options: selectField.options, placeholder: selectField.placeholder })));
|
|
22
|
-
case 'checkbox':
|
|
23
|
-
const checkboxField = field;
|
|
24
|
-
const { labelRightAligned } = checkboxField.props || {};
|
|
25
|
-
return (React.createElement(FormItem, { key: checkboxField.key, name: checkboxField.key, initialValue: checkboxField.value, control: control, valuePropName: "checked",
|
|
26
|
-
// if labelRightAligned is true, don't pass label prop to Checkbox
|
|
27
|
-
label: labelRightAligned ? '' : checkboxField.label },
|
|
28
|
-
React.createElement(Checkbox, null, labelRightAligned ? checkboxField.label : '')));
|
|
29
|
-
case 'datepicker':
|
|
30
|
-
const datePickerField = field;
|
|
31
|
-
return (React.createElement(FormItem, { key: datePickerField.key, name: datePickerField.key, label: datePickerField.label, control: control },
|
|
32
|
-
React.createElement(DatePicker, { placeholder: datePickerField.placeholder })));
|
|
33
|
-
case 'field-array':
|
|
34
|
-
if (field.config) {
|
|
35
|
-
return (React.createElement(React.Fragment, { key: field.key }, field.config.fields.map(nestedField => RenderField(nestedField, control))));
|
|
36
|
-
}
|
|
37
|
-
break;
|
|
38
|
-
default:
|
|
39
|
-
return 'unsupported field type';
|
|
40
|
-
}
|
|
41
|
-
};
|
package/dist/esm/component.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../src/component.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA0ClD,CAAC"}
|
package/dist/esm/component.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import { Akiform, akivalResolver, useForm } from '@akinon/akiform';
|
|
13
|
-
import * as akival from '@akinon/akival';
|
|
14
|
-
import React from 'react';
|
|
15
|
-
import { RenderField } from './RenderField';
|
|
16
|
-
export const FormBuilder = (_a) => {
|
|
17
|
-
var { builderFields, children } = _a, formProps = __rest(_a, ["builderFields", "children"]);
|
|
18
|
-
const validationSchema = akival.object(builderFields.reduce((schema, field) => {
|
|
19
|
-
if (field.type !== 'field-array' && field.validation) {
|
|
20
|
-
return Object.assign(Object.assign({}, schema), { [field.key]: field.validation });
|
|
21
|
-
}
|
|
22
|
-
return schema;
|
|
23
|
-
}, {}));
|
|
24
|
-
const formMethods = useForm({
|
|
25
|
-
defaultValues: builderFields.reduce((defaultValues, field) => {
|
|
26
|
-
if (field.defaultValue !== undefined) {
|
|
27
|
-
defaultValues[field.key] = field.defaultValue;
|
|
28
|
-
}
|
|
29
|
-
return defaultValues;
|
|
30
|
-
}, {}),
|
|
31
|
-
resolver: akivalResolver(validationSchema)
|
|
32
|
-
});
|
|
33
|
-
const { control } = formMethods;
|
|
34
|
-
return (React.createElement(Akiform, Object.assign({}, formProps, { onFinish: formMethods.handleSubmit(() => {
|
|
35
|
-
var _a;
|
|
36
|
-
return (_a = formProps.onFinish) === null || _a === void 0 ? void 0 : _a.call(formProps, formMethods.getValues());
|
|
37
|
-
}, () => {
|
|
38
|
-
return console.error('Form validation failed');
|
|
39
|
-
}) }),
|
|
40
|
-
builderFields.map(field => RenderField(field, control)),
|
|
41
|
-
React.createElement("div", null, children)));
|
|
42
|
-
};
|
package/dist/esm/hook.d.ts
DELETED
package/dist/esm/hook.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/hook.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmB,kBAAkB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzE,eAAO,MAAM,cAAc,WAAY,SAAS,EAAE,KAAG,kBAkCpD,CAAC"}
|
package/dist/esm/hook.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
-
var t = {};
|
|
3
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
-
t[p] = s[p];
|
|
5
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
-
t[p[i]] = s[p[i]];
|
|
9
|
-
}
|
|
10
|
-
return t;
|
|
11
|
-
};
|
|
12
|
-
import { akivalResolver, useFieldArray, useForm } from '@akinon/akiform';
|
|
13
|
-
import * as akival from '@akinon/akival';
|
|
14
|
-
export const useFormBuilder = (fields) => {
|
|
15
|
-
const validationSchema = akival.object(fields.reduce((schema, field) => {
|
|
16
|
-
if (field.type !== 'field-array' && field.validation) {
|
|
17
|
-
return Object.assign(Object.assign({}, schema), { [field.key]: field.validation });
|
|
18
|
-
}
|
|
19
|
-
return schema;
|
|
20
|
-
}, {}));
|
|
21
|
-
const formMethods = useForm({
|
|
22
|
-
resolver: akivalResolver(validationSchema)
|
|
23
|
-
});
|
|
24
|
-
const fieldArrays = fields
|
|
25
|
-
.filter((field) => field.type === 'field-array')
|
|
26
|
-
.map(fieldArray => {
|
|
27
|
-
const _a = useFieldArray({
|
|
28
|
-
control: formMethods.control,
|
|
29
|
-
name: fieldArray.config.name
|
|
30
|
-
}), { fields: nestedFields } = _a, arrayHelpers = __rest(_a, ["fields"]);
|
|
31
|
-
return Object.assign(Object.assign(Object.assign({}, fieldArray), { name: fieldArray.config.name, fields: nestedFields }), arrayHelpers);
|
|
32
|
-
});
|
|
33
|
-
return Object.assign(Object.assign({}, formMethods), { fieldArrays });
|
|
34
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transformers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EAGV,MAAM,UAAU,CAAC;AAClB,OAAO,EAAiB,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBrD,eAAO,MAAM,qBAAqB,SAC1B,OAAO,MAAM,EAAE,WAAW,CAAC,KAChC,SAAS,EA8EX,CAAC"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { DataTypesEnum } from './types';
|
|
2
|
-
const fieldTypeMap = {
|
|
3
|
-
text: 'input',
|
|
4
|
-
input: 'input',
|
|
5
|
-
dropdown: 'select',
|
|
6
|
-
select: 'select',
|
|
7
|
-
datetime: 'datepicker',
|
|
8
|
-
nested: 'field-array',
|
|
9
|
-
boolean: 'select',
|
|
10
|
-
bool: 'checkbox'
|
|
11
|
-
};
|
|
12
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
-
function isItemCompatible(item) {
|
|
14
|
-
return (typeof item.key === 'string' &&
|
|
15
|
-
typeof item.name === 'string' &&
|
|
16
|
-
Object.values(DataTypesEnum).includes(item.data_type));
|
|
17
|
-
}
|
|
18
|
-
export const transformToFormFields = (data) => {
|
|
19
|
-
return Object.values(data)
|
|
20
|
-
.reduce((acc, item) => {
|
|
21
|
-
if (!isItemCompatible(item)) {
|
|
22
|
-
console.warn('Incompatible item detected on field type transformer:', item);
|
|
23
|
-
return acc;
|
|
24
|
-
}
|
|
25
|
-
const fieldType = fieldTypeMap[item.data_type];
|
|
26
|
-
if (!fieldType) {
|
|
27
|
-
console.error('Unsupported data type:', item.data_type);
|
|
28
|
-
return acc;
|
|
29
|
-
}
|
|
30
|
-
let field = null;
|
|
31
|
-
// TODO: add defaultValue to all fields
|
|
32
|
-
switch (fieldType) {
|
|
33
|
-
case 'field-array':
|
|
34
|
-
if (item.schema) {
|
|
35
|
-
field = {
|
|
36
|
-
key: item.key,
|
|
37
|
-
label: item.name,
|
|
38
|
-
type: fieldType,
|
|
39
|
-
config: {
|
|
40
|
-
name: item.key,
|
|
41
|
-
fields: transformToFormFields(item.schema)
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
break;
|
|
46
|
-
case 'select':
|
|
47
|
-
if (item.choices) {
|
|
48
|
-
const choices = item.choices;
|
|
49
|
-
field = {
|
|
50
|
-
key: item.key,
|
|
51
|
-
label: item.name,
|
|
52
|
-
type: fieldType,
|
|
53
|
-
placeholder: item.placeholder,
|
|
54
|
-
options: choices.map(choice => ({
|
|
55
|
-
key: choice.value.toString(),
|
|
56
|
-
value: choice.value,
|
|
57
|
-
label: choice.label
|
|
58
|
-
})),
|
|
59
|
-
validation: item.validation
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
break;
|
|
63
|
-
default:
|
|
64
|
-
field = Object.assign(Object.assign({}, item), { key: item.key, label: item.name, validation: item.validation, type: fieldType, children: null, control: item.control });
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
if (field !== null) {
|
|
68
|
-
acc.push(field);
|
|
69
|
-
}
|
|
70
|
-
return acc;
|
|
71
|
-
}, [])
|
|
72
|
-
.filter((item) => item !== null);
|
|
73
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export declare enum DataTypesEnum {
|
|
2
|
-
Dropdown = "dropdown",
|
|
3
|
-
Input = "input",
|
|
4
|
-
Select = "select",
|
|
5
|
-
Text = "text",
|
|
6
|
-
Bool = "bool",
|
|
7
|
-
DateTime = "datetime",
|
|
8
|
-
Nested = "nested"
|
|
9
|
-
}
|
|
10
|
-
export type TBaseSchema = {
|
|
11
|
-
key: string;
|
|
12
|
-
data_type: DataTypesEnum[keyof DataTypesEnum];
|
|
13
|
-
name: string;
|
|
14
|
-
pk?: number | string;
|
|
15
|
-
options?: Array<{
|
|
16
|
-
key: string;
|
|
17
|
-
value: string | number;
|
|
18
|
-
label: string;
|
|
19
|
-
}>;
|
|
20
|
-
[key: string]: any;
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/transformers/types.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IAEvB,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IAIb,QAAQ,aAAa;IAErB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC,MAAM,aAAa,CAAC,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export var DataTypesEnum;
|
|
2
|
-
(function (DataTypesEnum) {
|
|
3
|
-
// Area = 'area',
|
|
4
|
-
DataTypesEnum["Dropdown"] = "dropdown";
|
|
5
|
-
DataTypesEnum["Input"] = "input";
|
|
6
|
-
DataTypesEnum["Select"] = "select";
|
|
7
|
-
DataTypesEnum["Text"] = "text";
|
|
8
|
-
DataTypesEnum["Bool"] = "bool";
|
|
9
|
-
// Image = 'image',
|
|
10
|
-
// ValueLabel = 'valuelabel',
|
|
11
|
-
// File = 'file',
|
|
12
|
-
DataTypesEnum["DateTime"] = "datetime";
|
|
13
|
-
// Multiple = 'multiple',
|
|
14
|
-
DataTypesEnum["Nested"] = "nested";
|
|
15
|
-
})(DataTypesEnum || (DataTypesEnum = {}));
|