@react-fabric/form 1.0.0-beta.9 → 1.0.2
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/{src/input/ArrayInput.module.css → css/_arrayInput.css} +8 -8
- package/css/_colorPicker.css +95 -0
- package/{src/internal/Field.module.css → css/_field.css} +94 -33
- package/{src/input/File.module.css → css/_file.css} +21 -6
- package/css/styles.css +27 -0
- package/dist/cjs/builder/FileField.js +107 -78
- package/dist/cjs/builder/FormField.js +60 -39
- package/dist/cjs/builder/SchemaEditor.js +72 -0
- package/dist/cjs/builder/components/AddSchemaFields.js +64 -0
- package/dist/cjs/builder/components/SchemaArrayForm.js +146 -0
- package/dist/cjs/builder/components/SchemaField.js +423 -0
- package/dist/cjs/form/Controller.js +66 -19
- package/dist/cjs/form/Form.js +97 -39
- package/dist/cjs/form/useForm.js +32 -0
- package/dist/cjs/hooks/useFileUploader.js +74 -45
- package/dist/cjs/hooks/useFormBuilder.js +85 -31
- package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +5 -4
- package/dist/cjs/i18n/{en.json.js → en/form.json.js} +5 -5
- package/dist/cjs/i18n/index.js +4 -4
- package/dist/cjs/index.js +41 -2
- package/dist/cjs/input/ArrayInput.js +259 -135
- package/dist/cjs/input/AvatarInput.js +99 -63
- package/dist/cjs/input/Checkbox.js +24 -25
- package/dist/cjs/input/ColorInput.js +138 -81
- package/dist/cjs/input/ColorPicker.js +78 -95
- package/dist/cjs/input/DateInput.js +192 -0
- package/dist/cjs/input/Field.js +21 -20
- package/dist/cjs/input/File.js +85 -80
- package/dist/cjs/input/Hidden.js +27 -13
- package/dist/cjs/input/Input.js +49 -48
- package/dist/cjs/input/Number.js +46 -44
- package/dist/cjs/input/Password.js +51 -49
- package/dist/cjs/input/Radio.js +26 -16
- package/dist/cjs/input/RadioGroup.js +26 -11
- package/dist/cjs/input/{Range.js → RangeSlider.js} +61 -66
- package/dist/cjs/input/Search.js +58 -64
- package/dist/cjs/input/Slider.js +57 -66
- package/dist/cjs/input/Switch.js +29 -27
- package/dist/cjs/input/Textarea.js +65 -53
- package/dist/cjs/internal/ErrorIcon.js +9 -9
- package/dist/cjs/internal/FieldWrapper.js +23 -13
- package/dist/cjs/internal/InputWrapper.js +85 -87
- package/dist/cjs/ranger/index.js +7 -7
- package/dist/cjs/ranger/utils.js +9 -4
- package/dist/cjs/select/AutoComplete.js +93 -76
- package/dist/cjs/select/DualList.js +235 -154
- package/dist/cjs/select/List.js +122 -89
- package/dist/cjs/select/Options.js +58 -54
- package/dist/cjs/select/Select.js +119 -89
- package/dist/cjs/select/helpers.js +5 -5
- package/dist/cjs/select/useSelect.js +83 -58
- package/dist/cjs/types/schema.js +43 -0
- package/dist/cjs/utils/eventHandlers.js +16 -6
- package/dist/cjs/utils/getColor.js +6 -6
- package/dist/cjs/utils/getProps.js +49 -0
- package/dist/esm/builder/FileField.js +109 -80
- package/dist/esm/builder/FormField.js +60 -39
- package/dist/esm/builder/SchemaEditor.js +72 -0
- package/dist/esm/builder/components/AddSchemaFields.js +64 -0
- package/dist/esm/builder/components/SchemaArrayForm.js +146 -0
- package/dist/esm/builder/components/SchemaField.js +423 -0
- package/dist/esm/form/Controller.js +66 -19
- package/dist/esm/form/Form.js +97 -39
- package/dist/esm/form/useForm.js +32 -0
- package/dist/esm/hooks/useFileUploader.js +75 -46
- package/dist/esm/hooks/useFormBuilder.js +84 -30
- package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +5 -4
- package/dist/esm/i18n/{en.json.js → en/form.json.js} +5 -5
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/index.js +36 -1
- package/dist/esm/input/ArrayInput.js +260 -136
- package/dist/esm/input/AvatarInput.js +99 -63
- package/dist/esm/input/Checkbox.js +26 -27
- package/dist/esm/input/ColorInput.js +141 -84
- package/dist/esm/input/ColorPicker.js +80 -97
- package/dist/esm/input/DateInput.js +192 -0
- package/dist/esm/input/Field.js +21 -20
- package/dist/esm/input/File.js +89 -84
- package/dist/esm/input/Hidden.js +28 -14
- package/dist/esm/input/Input.js +51 -50
- package/dist/esm/input/Number.js +48 -46
- package/dist/esm/input/Password.js +54 -52
- package/dist/esm/input/Radio.js +27 -17
- package/dist/esm/input/RadioGroup.js +27 -12
- package/dist/esm/input/{Range.js → RangeSlider.js} +62 -67
- package/dist/esm/input/Search.js +61 -67
- package/dist/esm/input/Slider.js +58 -67
- package/dist/esm/input/Switch.js +31 -29
- package/dist/esm/input/Textarea.js +67 -55
- package/dist/esm/internal/ErrorIcon.js +11 -11
- package/dist/esm/internal/FieldWrapper.js +23 -13
- package/dist/esm/internal/InputWrapper.js +88 -90
- package/dist/esm/ranger/index.js +7 -7
- package/dist/esm/ranger/utils.js +9 -4
- package/dist/esm/select/AutoComplete.js +95 -78
- package/dist/esm/select/DualList.js +233 -152
- package/dist/esm/select/List.js +125 -92
- package/dist/esm/select/Options.js +58 -54
- package/dist/esm/select/Select.js +122 -92
- package/dist/esm/select/helpers.js +5 -5
- package/dist/esm/select/useSelect.js +84 -59
- package/{src/input/ColorPicker.module.css → dist/esm/types/schema.js} +18 -27
- package/dist/esm/utils/eventHandlers.js +16 -6
- package/dist/esm/utils/getColor.js +6 -6
- package/dist/esm/utils/getProps.js +49 -0
- package/dist/types/builder/FileField.d.ts +7 -4
- package/dist/types/builder/FormField.d.ts +4 -2
- package/dist/types/builder/SchemaEditor.d.ts +6 -0
- package/dist/types/builder/components/AddSchemaFields.d.ts +2 -0
- package/dist/types/builder/components/SchemaArrayForm.d.ts +2 -0
- package/dist/types/builder/components/SchemaField.d.ts +12 -0
- package/dist/types/form/Controller.d.ts +45 -3
- package/dist/types/form/Form.d.ts +38 -7
- package/dist/types/form/useForm.d.ts +6 -0
- package/dist/types/hooks/useFileUploader.d.ts +24 -3
- package/dist/types/hooks/useFormBuilder.d.ts +41 -3
- package/dist/types/index.d.ts +32 -2
- package/dist/types/input/ArrayInput.d.ts +68 -13
- package/dist/types/input/AvatarInput.d.ts +23 -6
- package/dist/types/input/Checkbox.d.ts +12 -10
- package/dist/types/input/ColorInput.d.ts +15 -5
- package/dist/types/input/ColorPicker.d.ts +10 -2
- package/dist/types/input/DateInput.d.ts +21 -0
- package/dist/types/input/Field.d.ts +9 -36
- package/dist/types/input/File.d.ts +16 -4
- package/dist/types/input/Hidden.d.ts +7 -6
- package/dist/types/input/Input.d.ts +11 -4
- package/dist/types/input/Number.d.ts +9 -4
- package/dist/types/input/Password.d.ts +9 -4
- package/dist/types/input/Radio.d.ts +9 -4
- package/dist/types/input/RadioGroup.d.ts +14 -6
- package/dist/types/input/{Range.d.ts → RangeSlider.d.ts} +11 -6
- package/dist/types/input/Search.d.ts +14 -4
- package/dist/types/input/Slider.d.ts +9 -6
- package/dist/types/input/Switch.d.ts +13 -8
- package/dist/types/input/Textarea.d.ts +15 -4
- package/dist/types/internal/ErrorIcon.d.ts +4 -1
- package/dist/types/internal/FieldWrapper.d.ts +10 -1
- package/dist/types/internal/InputWrapper.d.ts +19 -1
- package/dist/types/ranger/index.d.ts +7 -3
- package/dist/types/ranger/utils.d.ts +2 -2
- package/dist/types/select/AutoComplete.d.ts +7 -2
- package/dist/types/select/DualList.d.ts +11 -37
- package/dist/types/select/List.d.ts +7 -2
- package/dist/types/select/Options.d.ts +8 -7
- package/dist/types/select/Select.d.ts +7 -2
- package/dist/types/select/helpers.d.ts +2 -2
- package/dist/types/select/useSelect.d.ts +10 -28
- package/dist/types/types/index.d.ts +73 -39
- package/dist/types/types/schema.d.ts +78 -32
- package/dist/types/utils/eventHandlers.d.ts +4 -4
- package/dist/types/utils/getColor.d.ts +4 -4
- package/dist/types/utils/getProps.d.ts +26 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +25 -25
- package/src/builder/FileField.tsx +73 -56
- package/src/builder/FormField.tsx +66 -58
- package/src/builder/SchemaEditor.tsx +78 -0
- package/src/builder/components/AddSchemaFields.tsx +64 -0
- package/src/builder/components/SchemaArrayForm.tsx +146 -0
- package/src/builder/components/SchemaField.tsx +405 -0
- package/src/form/Controller.tsx +61 -24
- package/src/form/Form.tsx +74 -50
- package/src/form/useForm.ts +53 -0
- package/src/hooks/useFileUploader.ts +115 -84
- package/src/hooks/useFormBuilder.tsx +80 -41
- package/src/i18n/{ar.json → ar/form.json} +5 -4
- package/src/i18n/{en.json → en/form.json} +5 -5
- package/src/i18n/index.ts +2 -2
- package/src/index.ts +34 -20
- package/src/input/ArrayInput.tsx +255 -173
- package/src/input/AvatarInput.tsx +82 -39
- package/src/input/Checkbox.tsx +30 -54
- package/src/input/ColorInput.tsx +146 -105
- package/src/input/ColorPicker.tsx +76 -102
- package/src/input/DateInput.tsx +225 -0
- package/src/input/Field.tsx +23 -65
- package/src/input/File.tsx +76 -98
- package/src/input/Hidden.tsx +36 -24
- package/src/input/Input.tsx +55 -53
- package/src/input/Number.tsx +49 -54
- package/src/input/Password.tsx +61 -66
- package/src/input/Radio.tsx +28 -37
- package/src/input/RadioGroup.tsx +30 -25
- package/src/input/{Range.tsx → RangeSlider.tsx} +81 -109
- package/src/input/Search.tsx +64 -77
- package/src/input/Slider.tsx +80 -109
- package/src/input/Switch.tsx +39 -53
- package/src/input/Textarea.tsx +72 -59
- package/src/internal/ErrorIcon.tsx +22 -21
- package/src/internal/FieldWrapper.tsx +33 -23
- package/src/internal/InputWrapper.tsx +132 -143
- package/src/ranger/index.tsx +37 -117
- package/src/ranger/utils.ts +12 -11
- package/src/select/AutoComplete.tsx +113 -123
- package/src/select/DualList.tsx +218 -204
- package/src/select/List.tsx +130 -97
- package/src/select/Options.tsx +59 -57
- package/src/select/Select.tsx +148 -122
- package/src/select/helpers.ts +13 -8
- package/src/select/useSelect.tsx +110 -127
- package/src/types/index.ts +76 -45
- package/src/types/schema.ts +97 -40
- package/src/utils/eventHandlers.ts +24 -26
- package/src/utils/getColor.ts +9 -8
- package/src/utils/getProps.ts +47 -0
- package/src/utils/index.ts +1 -0
- package/dist/cjs/input/ArrayInput.module.css +0 -1
- package/dist/cjs/input/ColorPicker.module.css +0 -1
- package/dist/cjs/input/File.module.css +0 -1
- package/dist/cjs/internal/Field.module.css +0 -1
- package/dist/esm/input/ArrayInput.module.css +0 -1
- package/dist/esm/input/ColorPicker.module.css +0 -1
- package/dist/esm/input/File.module.css +0 -1
- package/dist/esm/internal/Field.module.css +0 -1
package/dist/esm/form/Form.js
CHANGED
|
@@ -1,41 +1,86 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
-
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
5
4
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
5
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
6
6
|
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
7
7
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
8
|
-
import { yupResolver } from '@hookform/resolvers/yup';
|
|
9
8
|
import { useDebounce } from '@react-fabric/core';
|
|
9
|
+
import { EMPTY_OBJECT } from '@react-fabric/utilities';
|
|
10
10
|
import { useRef, useTransition, useEffect, useCallback, useImperativeHandle } from 'react';
|
|
11
11
|
import { useForm, FormProvider } from 'react-hook-form';
|
|
12
12
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
13
13
|
|
|
14
|
-
var _excluded = ["formRef", "
|
|
14
|
+
var _excluded = ["formRef", "resolver", "children", "resetOnChange", "defaultValues", "onSubmit", "onChange"];
|
|
15
15
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
16
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
17
17
|
var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
|
|
18
18
|
return undefined;
|
|
19
19
|
};
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Form component for managing form state and validation using react-hook-form and yup.
|
|
23
|
+
* It provides a simple interface for form handling, including submission, validation, and value management.
|
|
24
|
+
* It supports nested form structures and allows for custom validation schemas using Yup.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```jsx
|
|
28
|
+
* <Form
|
|
29
|
+
* formRef={formRef}
|
|
30
|
+
* resolver={hookformResolver(schema)}
|
|
31
|
+
* defaultValues={{ name: "", email: "" }}
|
|
32
|
+
* onSubmit={(values) => {
|
|
33
|
+
* console.log("Form submitted with values:", values);
|
|
34
|
+
* }}
|
|
35
|
+
* >
|
|
36
|
+
* <input name="name" ref={form.register} placeholder="Name" />
|
|
37
|
+
* <input name="email" ref={form.register} placeholder="Email" />
|
|
38
|
+
* <button type="submit">Submit</button>
|
|
39
|
+
* </Form>
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @see {@link https://react-hook-form.com/docs/useform} for more details on the properties.
|
|
43
|
+
*/
|
|
44
|
+
function Form(_ref) {
|
|
21
45
|
var formRef = _ref.formRef,
|
|
22
|
-
|
|
46
|
+
resolver = _ref.resolver,
|
|
23
47
|
children = _ref.children,
|
|
24
|
-
|
|
48
|
+
resetOnChange = _ref.resetOnChange,
|
|
49
|
+
_ref$defaultValues = _ref.defaultValues,
|
|
50
|
+
_defaultValues = _ref$defaultValues === void 0 ? EMPTY_OBJECT : _ref$defaultValues,
|
|
25
51
|
_ref$onSubmit = _ref.onSubmit,
|
|
26
|
-
|
|
52
|
+
_onSubmit = _ref$onSubmit === void 0 ? DEFAULT_SUBMIT : _ref$onSubmit,
|
|
27
53
|
onChange = _ref.onChange,
|
|
28
54
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
29
55
|
var ref = useRef(null);
|
|
30
56
|
var form = useForm({
|
|
31
57
|
shouldFocusError: true,
|
|
32
|
-
resolver:
|
|
33
|
-
defaultValues:
|
|
58
|
+
resolver: resolver,
|
|
59
|
+
defaultValues: function () {
|
|
60
|
+
var _defaultValues2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
61
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
62
|
+
while (1) switch (_context.prev = _context.next) {
|
|
63
|
+
case 0:
|
|
64
|
+
_context.next = 1;
|
|
65
|
+
return Promise.resolve(_defaultValues);
|
|
66
|
+
case 1:
|
|
67
|
+
return _context.abrupt("return", _context.sent);
|
|
68
|
+
case 2:
|
|
69
|
+
case "end":
|
|
70
|
+
return _context.stop();
|
|
71
|
+
}
|
|
72
|
+
}, _callee);
|
|
73
|
+
}));
|
|
74
|
+
function defaultValues() {
|
|
75
|
+
return _defaultValues2.apply(this, arguments);
|
|
76
|
+
}
|
|
77
|
+
return defaultValues;
|
|
78
|
+
}()
|
|
34
79
|
});
|
|
35
80
|
var _useTransition = useTransition(),
|
|
36
81
|
_useTransition2 = _slicedToArray(_useTransition, 2),
|
|
37
82
|
startTransition = _useTransition2[1];
|
|
38
|
-
var changeHandler = useDebounce(onChange, [onChange]);
|
|
83
|
+
var changeHandler = useDebounce(onChange, [onChange], 300);
|
|
39
84
|
useEffect(function () {
|
|
40
85
|
var subscription = form.watch(function (value) {
|
|
41
86
|
startTransition(function () {
|
|
@@ -45,42 +90,49 @@ var Form = function Form(_ref) {
|
|
|
45
90
|
return function () {
|
|
46
91
|
return subscription.unsubscribe();
|
|
47
92
|
};
|
|
48
|
-
}, [form.watch, changeHandler]);
|
|
93
|
+
}, [form.watch, changeHandler, form]);
|
|
49
94
|
var handleReset = useCallback(function () {
|
|
50
|
-
var _ref$current;
|
|
51
95
|
var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
96
|
+
void Promise.resolve(reset).then(function (resp) {
|
|
97
|
+
var _ref$current;
|
|
98
|
+
form.reset(resp);
|
|
99
|
+
form.clearErrors();
|
|
100
|
+
(_ref$current = ref.current) === null || _ref$current === void 0 || (_ref$current = _ref$current.querySelector("[auto-focus], input, textarea")) === null || _ref$current === void 0 || _ref$current.focus();
|
|
101
|
+
});
|
|
102
|
+
}, [form]);
|
|
103
|
+
useEffect(function () {
|
|
104
|
+
if (resetOnChange) {
|
|
105
|
+
handleReset(_defaultValues);
|
|
106
|
+
}
|
|
107
|
+
}, [_defaultValues, handleReset, resetOnChange]);
|
|
56
108
|
useImperativeHandle(formRef, function () {
|
|
57
109
|
return {
|
|
58
110
|
state: form.formState,
|
|
59
111
|
reset: function reset() {
|
|
60
|
-
return handleReset(
|
|
112
|
+
return handleReset(_defaultValues);
|
|
61
113
|
},
|
|
62
114
|
clear: function clear() {
|
|
63
115
|
return handleReset();
|
|
64
116
|
},
|
|
65
117
|
submit: function submit() {
|
|
66
|
-
return form.handleSubmit(
|
|
118
|
+
return form.handleSubmit(_onSubmit);
|
|
67
119
|
},
|
|
68
120
|
validate: function () {
|
|
69
|
-
var _validate = _asyncToGenerator(
|
|
70
|
-
return _regeneratorRuntime.wrap(function
|
|
71
|
-
while (1) switch (
|
|
121
|
+
var _validate = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(fields) {
|
|
122
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
123
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
72
124
|
case 0:
|
|
73
|
-
|
|
74
|
-
return form.trigger();
|
|
125
|
+
_context2.next = 1;
|
|
126
|
+
return form.trigger(fields);
|
|
127
|
+
case 1:
|
|
128
|
+
return _context2.abrupt("return", _context2.sent);
|
|
75
129
|
case 2:
|
|
76
|
-
return _context.abrupt("return", _context.sent);
|
|
77
|
-
case 3:
|
|
78
130
|
case "end":
|
|
79
|
-
return
|
|
131
|
+
return _context2.stop();
|
|
80
132
|
}
|
|
81
|
-
},
|
|
133
|
+
}, _callee2);
|
|
82
134
|
}));
|
|
83
|
-
function validate() {
|
|
135
|
+
function validate(_x) {
|
|
84
136
|
return _validate.apply(this, arguments);
|
|
85
137
|
}
|
|
86
138
|
return validate;
|
|
@@ -95,28 +147,34 @@ var Form = function Form(_ref) {
|
|
|
95
147
|
},
|
|
96
148
|
setValue: function setValue(k, v) {
|
|
97
149
|
return setTimeout(function () {
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
150
|
+
return (
|
|
151
|
+
// @ts-expect-error ignore
|
|
152
|
+
form.setValue(k, v, {
|
|
153
|
+
shouldDirty: false,
|
|
154
|
+
shouldTouch: false
|
|
155
|
+
})
|
|
156
|
+
);
|
|
102
157
|
}, 50);
|
|
103
158
|
}
|
|
104
159
|
};
|
|
105
|
-
}, [
|
|
160
|
+
}, [_defaultValues, form, handleReset, _onSubmit]);
|
|
106
161
|
var onInvalid = useCallback(function (_, e) {
|
|
107
|
-
var el = e.target;
|
|
162
|
+
var el = e === null || e === void 0 ? void 0 : e.target;
|
|
108
163
|
setTimeout(function () {
|
|
109
164
|
var _el$querySelector;
|
|
110
|
-
return (_el$querySelector = el.querySelector("input[aria-invalid='true'],textarea[aria-invalid='true']")) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.focus();
|
|
165
|
+
return el === null || el === void 0 || (_el$querySelector = el.querySelector("input[aria-invalid='true'],textarea[aria-invalid='true']")) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.focus();
|
|
111
166
|
}, 10);
|
|
112
167
|
}, []);
|
|
113
168
|
return /*#__PURE__*/jsx(FormProvider, _objectSpread(_objectSpread({}, form), {}, {
|
|
114
169
|
children: /*#__PURE__*/jsxs("form", _objectSpread(_objectSpread({
|
|
115
170
|
ref: ref,
|
|
116
171
|
onReset: function onReset() {
|
|
117
|
-
return handleReset(
|
|
172
|
+
return handleReset(_defaultValues);
|
|
173
|
+
},
|
|
174
|
+
onSubmit: function onSubmit(e) {
|
|
175
|
+
e.stopPropagation();
|
|
176
|
+
void form.handleSubmit(_onSubmit, onInvalid)(e);
|
|
118
177
|
},
|
|
119
|
-
onSubmit: form.handleSubmit(onSubmit, onInvalid),
|
|
120
178
|
"data-loading": form.formState.isSubmitting,
|
|
121
179
|
className: "contents",
|
|
122
180
|
autoComplete: "off"
|
|
@@ -127,6 +185,6 @@ var Form = function Form(_ref) {
|
|
|
127
185
|
})]
|
|
128
186
|
}))
|
|
129
187
|
}));
|
|
130
|
-
}
|
|
188
|
+
}
|
|
131
189
|
|
|
132
190
|
export { Form };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import { useFormContext, useWatch } from 'react-hook-form';
|
|
5
|
+
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
function useForm() {
|
|
9
|
+
var _useFormContext = useFormContext(),
|
|
10
|
+
formState = _useFormContext.formState,
|
|
11
|
+
getValues = _useFormContext.getValues,
|
|
12
|
+
setValue = _useFormContext.setValue,
|
|
13
|
+
watch = _useFormContext.watch,
|
|
14
|
+
reset = _useFormContext.reset,
|
|
15
|
+
resetField = _useFormContext.resetField,
|
|
16
|
+
setError = _useFormContext.setError,
|
|
17
|
+
setFocus = _useFormContext.setFocus;
|
|
18
|
+
var values = useWatch();
|
|
19
|
+
return {
|
|
20
|
+
values: _objectSpread(_objectSpread({}, values), getValues()),
|
|
21
|
+
formState: formState,
|
|
22
|
+
getValues: getValues,
|
|
23
|
+
setValue: setValue,
|
|
24
|
+
watch: watch,
|
|
25
|
+
reset: reset,
|
|
26
|
+
resetField: resetField,
|
|
27
|
+
setError: setError,
|
|
28
|
+
setFocus: setFocus
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { useForm };
|
|
@@ -6,14 +6,33 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
|
|
|
6
6
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
7
7
|
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
8
8
|
import { isString, uuid, isObject, isArray } from '@react-fabric/utilities';
|
|
9
|
-
import { useReducer, useCallback } from 'react';
|
|
9
|
+
import { useReducer, useEffect, useCallback } from 'react';
|
|
10
10
|
|
|
11
11
|
var _excluded = ["progress", "abort"],
|
|
12
12
|
_excluded2 = ["file", "progress", "abort"];
|
|
13
13
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
|
+
/**
|
|
16
|
+
* useFileUploader hook provides a way to handle file uploads
|
|
17
|
+
* with progress tracking, error handling, and file management.
|
|
18
|
+
* It uses a reducer to manage the state of uploaded files and their statuses.
|
|
19
|
+
*
|
|
20
|
+
* @param uploader - The function that handles the file upload.
|
|
21
|
+
* @param initialList - Initial list of files to be managed by the uploader.
|
|
22
|
+
* @param multiple - Whether to allow multiple file uploads or not.
|
|
23
|
+
* @returns An object containing methods to upload, remove, retry files,
|
|
24
|
+
* and the current state of the uploader including pending uploads and file list.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```jsx
|
|
28
|
+
* const { upload, remove, retry, state } = useFileUploader(uploader, initialList, multiple);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
function useFileUploader(uploader, initialList) {
|
|
32
|
+
var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
|
|
33
|
+
_ref$multiple = _ref.multiple,
|
|
34
|
+
multiple = _ref$multiple === void 0 ? true : _ref$multiple,
|
|
35
|
+
onChange = _ref.onChange;
|
|
17
36
|
var _useReducer = useReducer(function (state, action) {
|
|
18
37
|
if (action.type === "start") {
|
|
19
38
|
if (!multiple) state.files.clear();
|
|
@@ -60,40 +79,26 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
60
79
|
if (action.type === "remove") {
|
|
61
80
|
state.files["delete"](action.key);
|
|
62
81
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
path: file.path,
|
|
67
|
-
mime: file.mime,
|
|
68
|
-
size: file.size,
|
|
69
|
-
uploaded: file.uploaded,
|
|
70
|
-
filename: file.filename
|
|
71
|
-
};
|
|
72
|
-
}).filter(Boolean);
|
|
73
|
-
return _objectSpread({}, state);
|
|
74
|
-
}, {
|
|
75
|
-
files: new Map(),
|
|
76
|
-
count: 0
|
|
77
|
-
}, function (state) {
|
|
78
|
-
if (initialList) {
|
|
79
|
-
if (isString(initialList)) {
|
|
82
|
+
if (action.type === "init") {
|
|
83
|
+
state.files = new Map();
|
|
84
|
+
if (isString(action.initialList)) {
|
|
80
85
|
var key = uuid();
|
|
81
86
|
state.files.set(key, {
|
|
82
87
|
key: key,
|
|
83
|
-
path: initialList,
|
|
88
|
+
path: action.initialList,
|
|
84
89
|
filename: "",
|
|
85
90
|
size: 0,
|
|
86
91
|
mime: ""
|
|
87
92
|
});
|
|
88
93
|
}
|
|
89
|
-
if (isObject(initialList)) {
|
|
94
|
+
if (isObject(action.initialList)) {
|
|
90
95
|
var _key = uuid();
|
|
91
|
-
state.files.set(_key, _objectSpread(_objectSpread({}, initialList), {}, {
|
|
96
|
+
state.files.set(_key, _objectSpread(_objectSpread({}, action.initialList), {}, {
|
|
92
97
|
key: _key
|
|
93
98
|
}));
|
|
94
99
|
}
|
|
95
|
-
if (isArray(initialList)) {
|
|
96
|
-
initialList.forEach(function (file) {
|
|
100
|
+
if (isArray(action.initialList)) {
|
|
101
|
+
action.initialList.forEach(function (file) {
|
|
97
102
|
var key = uuid();
|
|
98
103
|
state.files.set(key, _objectSpread(_objectSpread({}, file), {}, {
|
|
99
104
|
key: key
|
|
@@ -101,21 +106,46 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
101
106
|
});
|
|
102
107
|
}
|
|
103
108
|
}
|
|
104
|
-
state.list = Array.from(state.files.values())
|
|
105
|
-
|
|
109
|
+
state.list = Array.from(state.files.values()).map(function (file) {
|
|
110
|
+
return !file.progress && !file.error && {
|
|
111
|
+
key: file.key,
|
|
112
|
+
path: file.path,
|
|
113
|
+
mime: file.mime,
|
|
114
|
+
size: file.size,
|
|
115
|
+
uploaded: file.uploaded,
|
|
116
|
+
filename: file.filename
|
|
117
|
+
};
|
|
118
|
+
}).filter(Boolean);
|
|
119
|
+
if (action.type === "remove" || action.type === "stop") {
|
|
120
|
+
setTimeout(function () {
|
|
121
|
+
var _state$list$;
|
|
122
|
+
// @ts-expect-error ignore
|
|
123
|
+
onChange === null || onChange === void 0 || onChange(multiple ? state.list : (_state$list$ = state.list[0]) !== null && _state$list$ !== void 0 ? _state$list$ : null);
|
|
124
|
+
}, 100);
|
|
125
|
+
}
|
|
126
|
+
return _objectSpread({}, state);
|
|
127
|
+
}, {
|
|
128
|
+
files: new Map(),
|
|
129
|
+
count: 0
|
|
106
130
|
}),
|
|
107
131
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
108
132
|
state = _useReducer2[0],
|
|
109
133
|
dispatch = _useReducer2[1];
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
134
|
+
useEffect(function () {
|
|
135
|
+
dispatch({
|
|
136
|
+
type: "init",
|
|
137
|
+
initialList: initialList
|
|
138
|
+
});
|
|
139
|
+
}, [initialList]);
|
|
140
|
+
var doUpload = useCallback(/*#__PURE__*/function () {
|
|
141
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(key, file) {
|
|
142
|
+
var data, _abort;
|
|
143
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
114
144
|
while (1) switch (_context.prev = _context.next) {
|
|
115
145
|
case 0:
|
|
116
146
|
data = new FormData();
|
|
117
147
|
data.append("file", file);
|
|
118
|
-
|
|
148
|
+
_abort = new AbortController();
|
|
119
149
|
dispatch({
|
|
120
150
|
type: "start",
|
|
121
151
|
key: key,
|
|
@@ -127,13 +157,13 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
127
157
|
filename: file.name,
|
|
128
158
|
size: file.size,
|
|
129
159
|
abort: function abort() {
|
|
130
|
-
return
|
|
160
|
+
return _abort.abort();
|
|
131
161
|
}
|
|
132
162
|
}
|
|
133
163
|
});
|
|
134
|
-
_context.next =
|
|
164
|
+
_context.next = 1;
|
|
135
165
|
return uploader(data, {
|
|
136
|
-
signal:
|
|
166
|
+
signal: _abort.signal,
|
|
137
167
|
onUploadProgress: function onUploadProgress(progressEvent) {
|
|
138
168
|
var _progressEvent$progre;
|
|
139
169
|
dispatch({
|
|
@@ -149,7 +179,7 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
149
179
|
path: path
|
|
150
180
|
});
|
|
151
181
|
})["catch"](function (error) {
|
|
152
|
-
var
|
|
182
|
+
var _ref3;
|
|
153
183
|
if (error.code === "ERR_CANCELED" || error.name === "AbortError") {
|
|
154
184
|
return dispatch({
|
|
155
185
|
type: "abort",
|
|
@@ -159,19 +189,19 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
159
189
|
dispatch({
|
|
160
190
|
type: "error",
|
|
161
191
|
key: key,
|
|
162
|
-
error: (
|
|
192
|
+
error: (_ref3 = error === null || error === void 0 ? void 0 : error.message) !== null && _ref3 !== void 0 ? _ref3 : "form:fileUploadFailed"
|
|
163
193
|
});
|
|
164
194
|
});
|
|
165
|
-
case
|
|
195
|
+
case 1:
|
|
166
196
|
case "end":
|
|
167
197
|
return _context.stop();
|
|
168
198
|
}
|
|
169
199
|
}, _callee);
|
|
170
200
|
}));
|
|
171
201
|
return function (_x, _x2) {
|
|
172
|
-
return
|
|
202
|
+
return _ref2.apply(this, arguments);
|
|
173
203
|
};
|
|
174
|
-
}(), []);
|
|
204
|
+
}(), [uploader]);
|
|
175
205
|
var upload = useCallback(function (files) {
|
|
176
206
|
if (!multiple) {
|
|
177
207
|
var _Array$from$, _Array$from$$abort;
|
|
@@ -180,25 +210,24 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
180
210
|
Array.from(files !== null && files !== void 0 ? files : []).slice(0, multiple ? undefined : 1).forEach(function (file) {
|
|
181
211
|
void doUpload(uuid(), file);
|
|
182
212
|
});
|
|
183
|
-
}, [multiple]);
|
|
213
|
+
}, [doUpload, multiple, state.files]);
|
|
184
214
|
var retry = useCallback(function (key) {
|
|
185
215
|
var fileObject = state.files.get(key);
|
|
186
216
|
void ((fileObject === null || fileObject === void 0 ? void 0 : fileObject.file) && doUpload(key, fileObject.file));
|
|
187
|
-
}, [state]);
|
|
217
|
+
}, [doUpload, state.files]);
|
|
188
218
|
var remove = useCallback(function (key) {
|
|
189
219
|
dispatch({
|
|
190
220
|
type: "remove",
|
|
191
221
|
key: key
|
|
192
222
|
});
|
|
193
|
-
}, [
|
|
223
|
+
}, []);
|
|
194
224
|
return {
|
|
195
225
|
upload: upload,
|
|
196
226
|
remove: remove,
|
|
197
227
|
retry: retry,
|
|
198
228
|
pending: state.count,
|
|
199
|
-
list: state.list,
|
|
200
229
|
files: Array.from(state.files.values())
|
|
201
230
|
};
|
|
202
|
-
}
|
|
231
|
+
}
|
|
203
232
|
|
|
204
233
|
export { useFileUploader };
|
|
@@ -1,33 +1,45 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
4
|
+
import { yupResolver } from '@hookform/resolvers/yup';
|
|
5
|
+
import { EmptyContent } from '@react-fabric/core';
|
|
4
6
|
import { yup, isNil, isEmpty } from '@react-fabric/utilities';
|
|
5
7
|
import { useMemo, Fragment } from 'react';
|
|
6
8
|
import { FormField } from '../builder/FormField.js';
|
|
7
|
-
import {
|
|
9
|
+
import { DATA_TYPES } from '../types/schema.js';
|
|
10
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
8
11
|
|
|
9
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t),
|
|
11
|
-
|
|
12
|
-
var yupField = yup.string();
|
|
13
|
-
if (field.datatype ===
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function makeYupField(field) {
|
|
15
|
+
var yupField = yup.string().trim();
|
|
16
|
+
if (field.datatype === DATA_TYPES.SCHEMA) {
|
|
14
17
|
var child = Object.fromEntries(field.schema.map(function (field) {
|
|
15
18
|
return [field.id, makeYupField(field)];
|
|
16
19
|
}));
|
|
17
20
|
yupField = yup.object(child);
|
|
18
21
|
}
|
|
19
|
-
if (field.datatype ===
|
|
20
|
-
|
|
21
|
-
yupField =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
if (field.datatype === DATA_TYPES.BOOL) {
|
|
23
|
+
yupField = yup["boolean"]();
|
|
24
|
+
if (field.required) yupField = yupField.test({
|
|
25
|
+
test: function test(value) {
|
|
26
|
+
return !!value;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
25
29
|
}
|
|
26
|
-
if (field.datatype ===
|
|
27
|
-
|
|
28
|
-
field.
|
|
30
|
+
if (field.datatype === DATA_TYPES.NUMBER || field.datatype === DATA_TYPES.RANGE) {
|
|
31
|
+
var numberField = yup.number();
|
|
32
|
+
if (!isNil(field.min)) numberField = numberField.min(field.min);
|
|
33
|
+
if (!isNil(field.max)) numberField = numberField.max(field.max);
|
|
34
|
+
if (field.datatype === DATA_TYPES.RANGE) yupField = yup.array(numberField);else yupField = numberField;
|
|
29
35
|
}
|
|
30
|
-
if (field.datatype ===
|
|
36
|
+
if (field.datatype === DATA_TYPES.STRING) {
|
|
37
|
+
var stringField = yup.string().trim();
|
|
38
|
+
if (field.options && !field.allowCustom) stringField = stringField.oneOf(field.options);
|
|
39
|
+
if (field.regex) stringField = stringField.matches(new RegExp(field.regex));
|
|
40
|
+
yupField = stringField;
|
|
41
|
+
}
|
|
42
|
+
if (field.datatype === DATA_TYPES.FILE) {
|
|
31
43
|
yupField = yup.object({
|
|
32
44
|
filename: yup.string().required(),
|
|
33
45
|
path: yup.string().required()
|
|
@@ -44,16 +56,49 @@ var makeYupField = function makeYupField(field) {
|
|
|
44
56
|
});
|
|
45
57
|
}
|
|
46
58
|
}
|
|
47
|
-
if (field.required) {
|
|
48
|
-
yupField = yupField.required();
|
|
49
|
-
}
|
|
50
59
|
if (field.multiple) {
|
|
51
|
-
|
|
52
|
-
field.required
|
|
60
|
+
var arrayField = yup.array(yupField);
|
|
61
|
+
if (field.required) arrayField = arrayField.required().min(1);
|
|
62
|
+
yupField = arrayField;
|
|
63
|
+
} else {
|
|
64
|
+
if (field.required) {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
66
|
+
yupField = yupField.required();
|
|
67
|
+
}
|
|
53
68
|
}
|
|
54
69
|
return yupField.label(field.label);
|
|
55
|
-
}
|
|
56
|
-
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* useFormBuilder hook to create a form definition based on a schema.
|
|
74
|
+
* It generates a Yup validation schema and a form definition component.
|
|
75
|
+
*
|
|
76
|
+
* @param {FormSchema} schema - The schema defining the form fields.
|
|
77
|
+
* @param {Object} options - Optional parameters for the form builder.
|
|
78
|
+
* @returns An object containing the form definition and the Yup validation schema.
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```jsx
|
|
82
|
+
* const { formDef, schemaDef } = useFormBuilder(schema, {
|
|
83
|
+
* prefix: "form",
|
|
84
|
+
* inline: true,
|
|
85
|
+
* fileUrl: (path) => `/files/${path}`,
|
|
86
|
+
* uploadHandler: async (file) => {
|
|
87
|
+
* // handle file upload
|
|
88
|
+
* },
|
|
89
|
+
* optionLists: {
|
|
90
|
+
* // define option lists for select fields
|
|
91
|
+
* }
|
|
92
|
+
* * });
|
|
93
|
+
* <FormBuilder
|
|
94
|
+
* schema={schemaDef}
|
|
95
|
+
* onSubmit={(data) => console.log(data)}
|
|
96
|
+
* >
|
|
97
|
+
* {formDef}
|
|
98
|
+
* </FormBuilder>
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
function useFormBuilder(schema) {
|
|
57
102
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
58
103
|
var filteredSchema = useMemo(function () {
|
|
59
104
|
var _schema$filter, _schema$filter2;
|
|
@@ -61,27 +106,36 @@ var useFormBuilder = function useFormBuilder(schema) {
|
|
|
61
106
|
return !!schm.id;
|
|
62
107
|
})) !== null && _schema$filter !== void 0 ? _schema$filter : [];
|
|
63
108
|
}, [schema]);
|
|
64
|
-
var schemaDef =
|
|
65
|
-
return
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
109
|
+
var schemaDef = useMemo(function () {
|
|
110
|
+
return yup.object(Object.fromEntries(filteredSchema.map(function (field) {
|
|
111
|
+
return [field.id, makeYupField(field)];
|
|
112
|
+
})));
|
|
113
|
+
}, [filteredSchema]);
|
|
114
|
+
var resolver = useMemo(function () {
|
|
115
|
+
return yupResolver(schemaDef);
|
|
116
|
+
}, [schemaDef]);
|
|
117
|
+
var formDef = /*#__PURE__*/jsxs(Fragment, {
|
|
118
|
+
children: [filteredSchema.map(function (field, idx) {
|
|
69
119
|
return /*#__PURE__*/jsx("div", {
|
|
70
120
|
className: "mb-4",
|
|
71
|
-
children: field.datatype ===
|
|
121
|
+
children: field.datatype === DATA_TYPES.SCHEMA ? null : /*#__PURE__*/jsx(FormField, _objectSpread(_objectSpread({}, field), {}, {
|
|
72
122
|
autoFocus: idx === 0,
|
|
73
123
|
fileUrl: options.fileUrl,
|
|
124
|
+
optionLists: options.optionLists,
|
|
74
125
|
uploadHandler: options.uploadHandler,
|
|
75
126
|
inline: options.inline,
|
|
76
127
|
prefix: options.prefix
|
|
77
128
|
}))
|
|
78
129
|
}, field.id);
|
|
79
|
-
})
|
|
130
|
+
}), filteredSchema.length === 0 && /*#__PURE__*/jsx(EmptyContent, {
|
|
131
|
+
message: "No schema defined"
|
|
132
|
+
})]
|
|
80
133
|
});
|
|
81
134
|
return {
|
|
82
135
|
formDef: formDef,
|
|
136
|
+
resolver: resolver,
|
|
83
137
|
schemaDef: schemaDef
|
|
84
138
|
};
|
|
85
|
-
}
|
|
139
|
+
}
|
|
86
140
|
|
|
87
141
|
export { useFormBuilder };
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
var addArray = "اضافة عنصر";
|
|
4
4
|
var password = {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
hide: "اخفاء كلمة المرور",
|
|
6
|
+
show: "عرض كلمة المرور"
|
|
7
7
|
};
|
|
8
8
|
var select = {
|
|
9
|
+
createOption: "إنشاء خيار جديد ل ",
|
|
9
10
|
emptyList: "لا توجد خيارات متاحة",
|
|
10
|
-
notFound: "لم يتم العثور على خيارات ل "
|
|
11
|
-
createOption: "إنشاء خيار جديد ل "
|
|
11
|
+
notFound: "لم يتم العثور على خيارات ل "
|
|
12
12
|
};
|
|
13
13
|
var yup = {
|
|
14
14
|
arrayMax: "{{label}} حدد ما يصل {{max}} غرض",
|
|
15
15
|
arrayMin: "{{label}} اختر على الأقل {{min}} غرض",
|
|
16
|
+
empty: "{{label}} يجب ألا يكون فارغًا",
|
|
16
17
|
invalid: "{{label}} نوع بيانات غير صالح",
|
|
17
18
|
invalidType: "{{label}} غير صالح",
|
|
18
19
|
numberMax: "{{label}} الحد الأقصى {{max}}",
|