@react-fabric/form 1.0.0-beta.60 → 1.0.0-beta.62
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/builder/FileField.js +10 -7
- package/dist/cjs/builder/components/AddSchemaFields.js +2 -1
- package/dist/cjs/builder/components/SchemaArrayForm.js +4 -4
- package/dist/cjs/builder/components/SchemaField.js +4 -4
- package/dist/cjs/form/Form.js +44 -22
- package/dist/cjs/hooks/useFileUploader.js +40 -28
- package/dist/cjs/hooks/useFormBuilder.js +10 -3
- package/dist/cjs/i18n/index.js +4 -4
- package/dist/cjs/input/ArrayInput.js +3 -3
- package/dist/cjs/input/AvatarInput.js +17 -12
- package/dist/cjs/input/Checkbox.js +2 -2
- package/dist/cjs/input/ColorInput.js +2 -2
- package/dist/cjs/input/File.js +1 -1
- package/dist/cjs/input/Hidden.js +1 -10
- package/dist/cjs/input/Password.js +1 -1
- package/dist/cjs/input/Radio.js +2 -2
- package/dist/cjs/input/RadioGroup.js +3 -1
- package/dist/cjs/input/Search.js +2 -3
- package/dist/cjs/internal/ErrorIcon.js +1 -1
- package/dist/cjs/internal/InputWrapper.js +3 -3
- package/dist/cjs/select/AutoComplete.js +1 -2
- package/dist/cjs/select/DualList.js +5 -5
- package/dist/cjs/select/List.js +8 -24
- package/dist/cjs/select/Select.js +9 -28
- package/dist/esm/builder/FileField.js +11 -8
- package/dist/esm/builder/components/AddSchemaFields.js +2 -1
- package/dist/esm/builder/components/SchemaArrayForm.js +5 -5
- package/dist/esm/builder/components/SchemaField.js +5 -5
- package/dist/esm/form/Form.js +44 -22
- package/dist/esm/hooks/useFileUploader.js +41 -29
- package/dist/esm/hooks/useFormBuilder.js +10 -3
- package/dist/esm/i18n/index.js +2 -2
- package/dist/esm/input/ArrayInput.js +4 -4
- package/dist/esm/input/AvatarInput.js +18 -13
- package/dist/esm/input/Checkbox.js +3 -3
- package/dist/esm/input/ColorInput.js +3 -3
- package/dist/esm/input/File.js +2 -2
- package/dist/esm/input/Hidden.js +2 -11
- package/dist/esm/input/Password.js +2 -2
- package/dist/esm/input/Radio.js +3 -3
- package/dist/esm/input/RadioGroup.js +3 -1
- package/dist/esm/input/Search.js +3 -4
- package/dist/esm/internal/ErrorIcon.js +2 -2
- package/dist/esm/internal/InputWrapper.js +4 -4
- package/dist/esm/select/AutoComplete.js +2 -3
- package/dist/esm/select/DualList.js +6 -6
- package/dist/esm/select/List.js +8 -24
- package/dist/esm/select/Select.js +10 -29
- package/dist/types/builder/FileField.d.ts +2 -1
- package/dist/types/form/Form.d.ts +11 -10
- package/dist/types/hooks/useFileUploader.d.ts +4 -2
- package/dist/types/hooks/useFormBuilder.d.ts +6 -0
- package/dist/types/input/AvatarInput.d.ts +2 -2
- package/dist/types/input/Hidden.d.ts +3 -11
- package/dist/types/input/RadioGroup.d.ts +5 -1
- package/dist/types/select/DualList.d.ts +5 -6
- package/dist/types/select/Options.d.ts +1 -1
- package/dist/types/types/index.d.ts +7 -8
- package/package.json +5 -5
- package/src/builder/FileField.tsx +8 -12
- package/src/builder/components/AddSchemaFields.tsx +2 -1
- package/src/builder/components/SchemaArrayForm.tsx +5 -11
- package/src/builder/components/SchemaField.tsx +4 -5
- package/src/form/Form.tsx +30 -24
- package/src/hooks/useFileUploader.ts +41 -29
- package/src/hooks/useFormBuilder.tsx +12 -4
- package/src/i18n/index.ts +2 -2
- package/src/input/ArrayInput.tsx +4 -10
- package/src/input/AvatarInput.tsx +16 -16
- package/src/input/Checkbox.tsx +6 -3
- package/src/input/ColorInput.tsx +3 -7
- package/src/input/File.tsx +2 -2
- package/src/input/Hidden.tsx +4 -22
- package/src/input/Password.tsx +4 -2
- package/src/input/Radio.tsx +3 -3
- package/src/input/RadioGroup.tsx +6 -0
- package/src/input/Search.tsx +3 -3
- package/src/internal/ErrorIcon.tsx +2 -2
- package/src/internal/InputWrapper.tsx +8 -4
- package/src/select/AutoComplete.tsx +2 -3
- package/src/select/DualList.tsx +15 -12
- package/src/select/List.tsx +3 -3
- package/src/select/Options.tsx +1 -1
- package/src/select/Select.tsx +7 -8
- package/src/types/index.ts +8 -7
- /package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +0 -0
- /package/dist/cjs/i18n/{en.json.js → en/form.json.js} +0 -0
- /package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +0 -0
- /package/dist/esm/i18n/{en.json.js → en/form.json.js} +0 -0
- /package/src/i18n/{ar.json → ar/form.json} +0 -0
- /package/src/i18n/{en.json → en/form.json} +0 -0
|
@@ -13,7 +13,7 @@ var Field = require('../input/Field.js');
|
|
|
13
13
|
var Hidden = require('../input/Hidden.js');
|
|
14
14
|
var jsxRuntime = require('react/jsx-runtime');
|
|
15
15
|
|
|
16
|
-
var _excluded = ["uploadHandler", "inline", "label", "accept", "value", "fileUrl", "multiple", "invalid", "error"];
|
|
16
|
+
var _excluded = ["uploadHandler", "inline", "label", "accept", "value", "fileUrl", "onChange", "multiple", "invalid", "error"];
|
|
17
17
|
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; }
|
|
18
18
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).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; }
|
|
19
19
|
var FileField = function FileField(_ref) {
|
|
@@ -24,7 +24,8 @@ var FileField = function FileField(_ref) {
|
|
|
24
24
|
accept = _ref.accept,
|
|
25
25
|
value = _ref.value;
|
|
26
26
|
_ref.fileUrl;
|
|
27
|
-
var
|
|
27
|
+
var onChange = _ref.onChange,
|
|
28
|
+
multiple = _ref.multiple;
|
|
28
29
|
_ref.invalid;
|
|
29
30
|
var error = _ref.error,
|
|
30
31
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -48,10 +49,12 @@ var FileField = function FileField(_ref) {
|
|
|
48
49
|
return function (_x, _x2) {
|
|
49
50
|
return _ref2.apply(this, arguments);
|
|
50
51
|
};
|
|
51
|
-
}(), value,
|
|
52
|
+
}(), value, {
|
|
53
|
+
multiple: multiple,
|
|
54
|
+
onChange: onChange
|
|
55
|
+
}),
|
|
52
56
|
pending = _useFileUploader.pending,
|
|
53
57
|
files = _useFileUploader.files,
|
|
54
|
-
list = _useFileUploader.list,
|
|
55
58
|
upload = _useFileUploader.upload,
|
|
56
59
|
remove = _useFileUploader.remove;
|
|
57
60
|
return /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
|
|
@@ -60,7 +63,7 @@ var FileField = function FileField(_ref) {
|
|
|
60
63
|
inline: inline,
|
|
61
64
|
label: label,
|
|
62
65
|
children: /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
|
|
63
|
-
|
|
66
|
+
value: multiple ? files : files === null || files === void 0 ? void 0 : files[0]
|
|
64
67
|
}, rest))
|
|
65
68
|
}), /*#__PURE__*/jsxRuntime.jsx(core.Tooltip, {
|
|
66
69
|
color: "danger-200",
|
|
@@ -110,7 +113,7 @@ var FileField = function FileField(_ref) {
|
|
|
110
113
|
children: file.error
|
|
111
114
|
})
|
|
112
115
|
}), file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
113
|
-
icon:
|
|
116
|
+
icon: "icon-[mdi--stop]",
|
|
114
117
|
bg: "danger",
|
|
115
118
|
color: "white",
|
|
116
119
|
size: "sm",
|
|
@@ -121,7 +124,7 @@ var FileField = function FileField(_ref) {
|
|
|
121
124
|
return (_file$abort = file.abort) === null || _file$abort === void 0 ? void 0 : _file$abort.call(file);
|
|
122
125
|
}
|
|
123
126
|
}), !file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
124
|
-
icon:
|
|
127
|
+
icon: "icon-[mdi--trash-can-outline]",
|
|
125
128
|
color: "danger",
|
|
126
129
|
size: "sm",
|
|
127
130
|
"aria-label": "remove",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var yup = require('@hookform/resolvers/yup');
|
|
4
5
|
var core = require('@react-fabric/core');
|
|
5
6
|
var utilities = require('@react-fabric/utilities');
|
|
6
7
|
var react = require('react');
|
|
@@ -25,7 +26,7 @@ var AddSchemaFields = function AddSchemaFields(props) {
|
|
|
25
26
|
}, []);
|
|
26
27
|
return /*#__PURE__*/jsxRuntime.jsx(core.Modal, _objectSpread(_objectSpread({}, props), {}, {
|
|
27
28
|
children: /*#__PURE__*/jsxRuntime.jsxs(Form.Form, {
|
|
28
|
-
|
|
29
|
+
resolver: yup.yupResolver(fieldSchema),
|
|
29
30
|
defaultValues: {
|
|
30
31
|
fields: [" "]
|
|
31
32
|
},
|
|
@@ -96,13 +96,13 @@ var SchemaArrayForm = function SchemaArrayForm(_ref) {
|
|
|
96
96
|
children: [dynamic && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
97
97
|
size: "sm",
|
|
98
98
|
variant: "link",
|
|
99
|
-
icon:
|
|
99
|
+
icon: "icon-[mdi--plus-circle-outline]",
|
|
100
100
|
"aria-label": "add field",
|
|
101
101
|
onClick: handleAdd
|
|
102
102
|
}), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
103
103
|
size: "sm",
|
|
104
104
|
variant: "link",
|
|
105
|
-
icon:
|
|
105
|
+
icon: "icon-[mdi--arrow-collapse-vertical]",
|
|
106
106
|
"aria-label": "collapse all",
|
|
107
107
|
onClick: function onClick() {
|
|
108
108
|
return setDefaultOpen(false);
|
|
@@ -110,7 +110,7 @@ var SchemaArrayForm = function SchemaArrayForm(_ref) {
|
|
|
110
110
|
}), /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
111
111
|
size: "sm",
|
|
112
112
|
variant: "link",
|
|
113
|
-
icon:
|
|
113
|
+
icon: "icon-[mdi--arrow-expand-vertical]",
|
|
114
114
|
"aria-label": "expand all",
|
|
115
115
|
onClick: function onClick() {
|
|
116
116
|
return setDefaultOpen(true);
|
|
@@ -138,7 +138,7 @@ var SchemaArrayForm = function SchemaArrayForm(_ref) {
|
|
|
138
138
|
acceptableTypes: acceptableTypes !== null && acceptableTypes !== void 0 ? acceptableTypes : Object.values(schema.DATA_TYPES)
|
|
139
139
|
}, index);
|
|
140
140
|
})
|
|
141
|
-
}), AddModal]
|
|
141
|
+
}), /*#__PURE__*/jsxRuntime.jsx(AddModal, {})]
|
|
142
142
|
});
|
|
143
143
|
};
|
|
144
144
|
|
|
@@ -180,7 +180,7 @@ var SchemaField = function SchemaField(_ref) {
|
|
|
180
180
|
variant: "link",
|
|
181
181
|
"aria-label": "Delete",
|
|
182
182
|
stopPropagation: true,
|
|
183
|
-
icon:
|
|
183
|
+
icon: "icon-[mdi--trash-can-outline]",
|
|
184
184
|
onClick: onRemove,
|
|
185
185
|
className: "invisible group-hover/field:visible"
|
|
186
186
|
})]
|
|
@@ -189,7 +189,7 @@ var SchemaField = function SchemaField(_ref) {
|
|
|
189
189
|
children: [/*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
|
|
190
190
|
name: "".concat(field, ".id"),
|
|
191
191
|
children: /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, {
|
|
192
|
-
|
|
192
|
+
value: id
|
|
193
193
|
})
|
|
194
194
|
}), /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
|
|
195
195
|
name: "".concat(field, ".datatype"),
|
|
@@ -242,7 +242,7 @@ var SchemaField = function SchemaField(_ref) {
|
|
|
242
242
|
}
|
|
243
243
|
})
|
|
244
244
|
}), customOptions && /*#__PURE__*/jsxRuntime.jsx(core.Button, {
|
|
245
|
-
icon:
|
|
245
|
+
icon: "icon-[mdi--list-box-outline]",
|
|
246
246
|
"aria-label": "Custom options",
|
|
247
247
|
onClick: function onClick() {
|
|
248
248
|
void openOptionModal({
|
|
@@ -250,7 +250,7 @@ var SchemaField = function SchemaField(_ref) {
|
|
|
250
250
|
});
|
|
251
251
|
}
|
|
252
252
|
})]
|
|
253
|
-
}), OptionModal]
|
|
253
|
+
}), /*#__PURE__*/jsxRuntime.jsx(OptionModal, {})]
|
|
254
254
|
}), type === schema.DATA_TYPES.FILE && /*#__PURE__*/jsxRuntime.jsx(react.Fragment, {
|
|
255
255
|
children: /*#__PURE__*/jsxRuntime.jsx(Controller.Controller, {
|
|
256
256
|
name: "".concat(field, ".accept"),
|
package/dist/cjs/form/Form.js
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
-
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
5
4
|
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
5
|
+
var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
6
6
|
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
7
7
|
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
8
|
-
var yup = require('@hookform/resolvers/yup');
|
|
9
8
|
var core = require('@react-fabric/core');
|
|
10
9
|
var utilities = require('@react-fabric/utilities');
|
|
11
10
|
var react = require('react');
|
|
12
11
|
var reactHookForm = require('react-hook-form');
|
|
13
12
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
13
|
|
|
15
|
-
var _excluded = ["formRef", "
|
|
14
|
+
var _excluded = ["formRef", "resolver", "children", "resetOnChange", "defaultValues", "onSubmit", "onChange"];
|
|
16
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; }
|
|
17
16
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).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; }
|
|
18
17
|
var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
|
|
@@ -31,10 +30,7 @@ var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
|
|
|
31
30
|
* ```jsx
|
|
32
31
|
* <Form
|
|
33
32
|
* formRef={formRef}
|
|
34
|
-
*
|
|
35
|
-
* name: yup.string().required("Name is required"),
|
|
36
|
-
* email: yup.string().email("Invalid email").required("Email is required"),
|
|
37
|
-
* })}
|
|
33
|
+
* resolver={hookformResolver(schema)}
|
|
38
34
|
* defaultValues={{ name: "", email: "" }}
|
|
39
35
|
* onSubmit={(values) => {
|
|
40
36
|
* console.log("Form submitted with values:", values);
|
|
@@ -52,10 +48,11 @@ var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
|
|
|
52
48
|
*/
|
|
53
49
|
var Form = function Form(_ref) {
|
|
54
50
|
var formRef = _ref.formRef,
|
|
55
|
-
|
|
51
|
+
resolver = _ref.resolver,
|
|
56
52
|
children = _ref.children,
|
|
53
|
+
resetOnChange = _ref.resetOnChange,
|
|
57
54
|
_ref$defaultValues = _ref.defaultValues,
|
|
58
|
-
|
|
55
|
+
_defaultValues = _ref$defaultValues === void 0 ? utilities.EMPTY_OBJECT : _ref$defaultValues,
|
|
59
56
|
_ref$onSubmit = _ref.onSubmit,
|
|
60
57
|
_onSubmit = _ref$onSubmit === void 0 ? DEFAULT_SUBMIT : _ref$onSubmit,
|
|
61
58
|
onChange = _ref.onChange,
|
|
@@ -63,8 +60,27 @@ var Form = function Form(_ref) {
|
|
|
63
60
|
var ref = react.useRef(null);
|
|
64
61
|
var form = reactHookForm.useForm({
|
|
65
62
|
shouldFocusError: true,
|
|
66
|
-
resolver:
|
|
67
|
-
defaultValues:
|
|
63
|
+
resolver: resolver,
|
|
64
|
+
defaultValues: function () {
|
|
65
|
+
var _defaultValues2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
66
|
+
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
67
|
+
while (1) switch (_context.prev = _context.next) {
|
|
68
|
+
case 0:
|
|
69
|
+
_context.next = 2;
|
|
70
|
+
return Promise.resolve(_defaultValues);
|
|
71
|
+
case 2:
|
|
72
|
+
return _context.abrupt("return", _context.sent);
|
|
73
|
+
case 3:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context.stop();
|
|
76
|
+
}
|
|
77
|
+
}, _callee);
|
|
78
|
+
}));
|
|
79
|
+
function defaultValues() {
|
|
80
|
+
return _defaultValues2.apply(this, arguments);
|
|
81
|
+
}
|
|
82
|
+
return defaultValues;
|
|
83
|
+
}()
|
|
68
84
|
});
|
|
69
85
|
var _useTransition = react.useTransition(),
|
|
70
86
|
_useTransition2 = _slicedToArray(_useTransition, 2),
|
|
@@ -86,12 +102,17 @@ var Form = function Form(_ref) {
|
|
|
86
102
|
form.reset(reset);
|
|
87
103
|
form.clearErrors();
|
|
88
104
|
(_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();
|
|
89
|
-
}, [
|
|
105
|
+
}, []);
|
|
106
|
+
react.useEffect(function () {
|
|
107
|
+
if (resetOnChange) {
|
|
108
|
+
handleReset(_defaultValues);
|
|
109
|
+
}
|
|
110
|
+
}, [_defaultValues, resetOnChange]);
|
|
90
111
|
react.useImperativeHandle(formRef, function () {
|
|
91
112
|
return {
|
|
92
113
|
state: form.formState,
|
|
93
114
|
reset: function reset() {
|
|
94
|
-
return handleReset(
|
|
115
|
+
return handleReset(_defaultValues);
|
|
95
116
|
},
|
|
96
117
|
clear: function clear() {
|
|
97
118
|
return handleReset();
|
|
@@ -100,19 +121,19 @@ var Form = function Form(_ref) {
|
|
|
100
121
|
return form.handleSubmit(_onSubmit);
|
|
101
122
|
},
|
|
102
123
|
validate: function () {
|
|
103
|
-
var _validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function
|
|
104
|
-
return _regeneratorRuntime.wrap(function
|
|
105
|
-
while (1) switch (
|
|
124
|
+
var _validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(fields) {
|
|
125
|
+
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
126
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
106
127
|
case 0:
|
|
107
|
-
|
|
128
|
+
_context2.next = 2;
|
|
108
129
|
return form.trigger(fields);
|
|
109
130
|
case 2:
|
|
110
|
-
return
|
|
131
|
+
return _context2.abrupt("return", _context2.sent);
|
|
111
132
|
case 3:
|
|
112
133
|
case "end":
|
|
113
|
-
return
|
|
134
|
+
return _context2.stop();
|
|
114
135
|
}
|
|
115
|
-
},
|
|
136
|
+
}, _callee2);
|
|
116
137
|
}));
|
|
117
138
|
function validate(_x) {
|
|
118
139
|
return _validate.apply(this, arguments);
|
|
@@ -136,9 +157,10 @@ var Form = function Form(_ref) {
|
|
|
136
157
|
}, 50);
|
|
137
158
|
}
|
|
138
159
|
};
|
|
139
|
-
}, [_onSubmit, form, form.formState,
|
|
160
|
+
}, [_onSubmit, form, form.formState, _defaultValues]);
|
|
140
161
|
var onInvalid = react.useCallback(function (_, e) {
|
|
141
162
|
var el = e.target;
|
|
163
|
+
console.log("Invalid:", _, e);
|
|
142
164
|
setTimeout(function () {
|
|
143
165
|
var _el$querySelector;
|
|
144
166
|
return (_el$querySelector = el.querySelector("input[aria-invalid='true'],textarea[aria-invalid='true']")) === null || _el$querySelector === void 0 ? void 0 : _el$querySelector.focus();
|
|
@@ -148,7 +170,7 @@ var Form = function Form(_ref) {
|
|
|
148
170
|
children: /*#__PURE__*/jsxRuntime.jsxs("form", _objectSpread(_objectSpread({
|
|
149
171
|
ref: ref,
|
|
150
172
|
onReset: function onReset() {
|
|
151
|
-
return handleReset(
|
|
173
|
+
return handleReset(_defaultValues);
|
|
152
174
|
},
|
|
153
175
|
onSubmit: function onSubmit(e) {
|
|
154
176
|
e.stopPropagation();
|
|
@@ -29,7 +29,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
32
|
-
var
|
|
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;
|
|
33
36
|
var _useReducer = react.useReducer(function (state, action) {
|
|
34
37
|
if (action.type === "start") {
|
|
35
38
|
if (!multiple) state.files.clear();
|
|
@@ -76,40 +79,26 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
76
79
|
if (action.type === "remove") {
|
|
77
80
|
state.files["delete"](action.key);
|
|
78
81
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
path: file.path,
|
|
83
|
-
mime: file.mime,
|
|
84
|
-
size: file.size,
|
|
85
|
-
uploaded: file.uploaded,
|
|
86
|
-
filename: file.filename
|
|
87
|
-
};
|
|
88
|
-
}).filter(Boolean);
|
|
89
|
-
return _objectSpread({}, state);
|
|
90
|
-
}, {
|
|
91
|
-
files: new Map(),
|
|
92
|
-
count: 0
|
|
93
|
-
}, function (state) {
|
|
94
|
-
if (initialList) {
|
|
95
|
-
if (utilities.isString(initialList)) {
|
|
82
|
+
if (action.type === "init") {
|
|
83
|
+
state.files = new Map();
|
|
84
|
+
if (utilities.isString(action.initialList)) {
|
|
96
85
|
var key = utilities.uuid();
|
|
97
86
|
state.files.set(key, {
|
|
98
87
|
key: key,
|
|
99
|
-
path: initialList,
|
|
88
|
+
path: action.initialList,
|
|
100
89
|
filename: "",
|
|
101
90
|
size: 0,
|
|
102
91
|
mime: ""
|
|
103
92
|
});
|
|
104
93
|
}
|
|
105
|
-
if (utilities.isObject(initialList)) {
|
|
94
|
+
if (utilities.isObject(action.initialList)) {
|
|
106
95
|
var _key = utilities.uuid();
|
|
107
|
-
state.files.set(_key, _objectSpread(_objectSpread({}, initialList), {}, {
|
|
96
|
+
state.files.set(_key, _objectSpread(_objectSpread({}, action.initialList), {}, {
|
|
108
97
|
key: _key
|
|
109
98
|
}));
|
|
110
99
|
}
|
|
111
|
-
if (utilities.isArray(initialList)) {
|
|
112
|
-
initialList.forEach(function (file) {
|
|
100
|
+
if (utilities.isArray(action.initialList)) {
|
|
101
|
+
action.initialList.forEach(function (file) {
|
|
113
102
|
var key = utilities.uuid();
|
|
114
103
|
state.files.set(key, _objectSpread(_objectSpread({}, file), {}, {
|
|
115
104
|
key: key
|
|
@@ -117,14 +106,38 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
117
106
|
});
|
|
118
107
|
}
|
|
119
108
|
}
|
|
120
|
-
state.list = Array.from(state.files.values())
|
|
121
|
-
|
|
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
|
+
onChange === null || onChange === void 0 || onChange(multiple ? state.list : (_state$list$ = state.list[0]) !== null && _state$list$ !== void 0 ? _state$list$ : null);
|
|
123
|
+
}, 100);
|
|
124
|
+
}
|
|
125
|
+
return _objectSpread({}, state);
|
|
126
|
+
}, {
|
|
127
|
+
files: new Map(),
|
|
128
|
+
count: 0
|
|
122
129
|
}),
|
|
123
130
|
_useReducer2 = _slicedToArray(_useReducer, 2),
|
|
124
131
|
state = _useReducer2[0],
|
|
125
132
|
dispatch = _useReducer2[1];
|
|
133
|
+
react.useEffect(function () {
|
|
134
|
+
dispatch({
|
|
135
|
+
type: "init",
|
|
136
|
+
initialList: initialList
|
|
137
|
+
});
|
|
138
|
+
}, [initialList]);
|
|
126
139
|
var doUpload = react.useCallback( /*#__PURE__*/function () {
|
|
127
|
-
var
|
|
140
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(key, file) {
|
|
128
141
|
var data, _abort2;
|
|
129
142
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
130
143
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -185,7 +198,7 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
185
198
|
}, _callee);
|
|
186
199
|
}));
|
|
187
200
|
return function (_x, _x2) {
|
|
188
|
-
return
|
|
201
|
+
return _ref2.apply(this, arguments);
|
|
189
202
|
};
|
|
190
203
|
}(), []);
|
|
191
204
|
var upload = react.useCallback(function (files) {
|
|
@@ -212,7 +225,6 @@ var useFileUploader = function useFileUploader(uploader, initialList) {
|
|
|
212
225
|
remove: remove,
|
|
213
226
|
retry: retry,
|
|
214
227
|
pending: state.count,
|
|
215
|
-
list: state.list,
|
|
216
228
|
files: Array.from(state.files.values())
|
|
217
229
|
};
|
|
218
230
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var yup = require('@hookform/resolvers/yup');
|
|
4
5
|
var core = require('@react-fabric/core');
|
|
5
6
|
var utilities = require('@react-fabric/utilities');
|
|
6
7
|
var react = require('react');
|
|
@@ -100,9 +101,14 @@ var useFormBuilder = function useFormBuilder(schema$1) {
|
|
|
100
101
|
return !!schm.id;
|
|
101
102
|
})) !== null && _schema$filter !== void 0 ? _schema$filter : [];
|
|
102
103
|
}, [schema$1]);
|
|
103
|
-
var schemaDef =
|
|
104
|
-
return
|
|
105
|
-
|
|
104
|
+
var schemaDef = react.useMemo(function () {
|
|
105
|
+
return utilities.yup.object(Object.fromEntries(filteredSchema.map(function (field) {
|
|
106
|
+
return [field.id, makeYupField(field)];
|
|
107
|
+
})));
|
|
108
|
+
}, [filteredSchema]);
|
|
109
|
+
var resolver = react.useMemo(function () {
|
|
110
|
+
return yup.yupResolver(schemaDef);
|
|
111
|
+
}, [schemaDef]);
|
|
106
112
|
var formDef = /*#__PURE__*/jsxRuntime.jsxs(react.Fragment, {
|
|
107
113
|
children: [filteredSchema.map(function (field, idx) {
|
|
108
114
|
return /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
@@ -122,6 +128,7 @@ var useFormBuilder = function useFormBuilder(schema$1) {
|
|
|
122
128
|
});
|
|
123
129
|
return {
|
|
124
130
|
formDef: formDef,
|
|
131
|
+
resolver: resolver,
|
|
125
132
|
schemaDef: schemaDef
|
|
126
133
|
};
|
|
127
134
|
};
|
package/dist/cjs/i18n/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var core = require('@react-fabric/core');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var form$1 = require('./ar/form.json.js');
|
|
5
|
+
var form = require('./en/form.json.js');
|
|
6
6
|
|
|
7
7
|
/*
|
|
8
8
|
* React Fabric
|
|
@@ -28,6 +28,6 @@ var en = require('./en.json.js');
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
core.addTranslationBundle("form", {
|
|
31
|
-
en:
|
|
32
|
-
ar:
|
|
31
|
+
en: form.default,
|
|
32
|
+
ar: form$1.default
|
|
33
33
|
});
|
|
@@ -196,7 +196,7 @@ var ArrayInput = function ArrayInput(_ref) {
|
|
|
196
196
|
},
|
|
197
197
|
children: [/*#__PURE__*/jsxRuntime.jsx(core$1.Icon, _objectSpread(_objectSpread({
|
|
198
198
|
className: isDragging ? "cursor-grabbing" : "cursor-grab",
|
|
199
|
-
icon:
|
|
199
|
+
icon: "icon-[mdi--drag-vertical]"
|
|
200
200
|
}, attributes), listeners)), children]
|
|
201
201
|
});
|
|
202
202
|
}
|
|
@@ -219,7 +219,7 @@ var ArrayInput = function ArrayInput(_ref) {
|
|
|
219
219
|
children: /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
|
|
220
220
|
size: "sm",
|
|
221
221
|
"aria-label": "Add item",
|
|
222
|
-
icon:
|
|
222
|
+
icon: "icon-[mdi--plus-circle-outline]",
|
|
223
223
|
onClick: function onClick() {
|
|
224
224
|
return handleAdd(onAdd === null || onAdd === void 0 ? void 0 : onAdd());
|
|
225
225
|
},
|
|
@@ -260,7 +260,7 @@ var ArrayInput = function ArrayInput(_ref) {
|
|
|
260
260
|
}));
|
|
261
261
|
}), canRemove !== false && /*#__PURE__*/jsxRuntime.jsx(core$1.Button, {
|
|
262
262
|
"aria-label": "Remove item",
|
|
263
|
-
icon:
|
|
263
|
+
icon: "icon-[mdi--minus-circle-outline]",
|
|
264
264
|
color: "danger",
|
|
265
265
|
variant: "link",
|
|
266
266
|
className: "self-end",
|
|
@@ -6,13 +6,13 @@ var _asyncToGenerator = require('@babel/runtime/helpers/asyncToGenerator');
|
|
|
6
6
|
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
7
7
|
var _regeneratorRuntime = require('@babel/runtime/regenerator');
|
|
8
8
|
var core = require('@react-fabric/core');
|
|
9
|
+
var classNames = require('classnames');
|
|
9
10
|
var react = require('react');
|
|
10
11
|
var useFileUploader = require('../hooks/useFileUploader.js');
|
|
11
12
|
var Hidden = require('./Hidden.js');
|
|
12
|
-
var classNames = require('classnames');
|
|
13
13
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
14
|
|
|
15
|
-
var _excluded = ["size", "avatarName", "avatarClassName", "value", "rounded", "defaultValue", "fallbackIcon", "variant", "fileUrl", "uploadHandler"];
|
|
15
|
+
var _excluded = ["size", "avatarName", "avatarClassName", "value", "rounded", "defaultValue", "fallbackIcon", "variant", "fileUrl", "uploadHandler", "onChange"];
|
|
16
16
|
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; }
|
|
17
17
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).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; }
|
|
18
18
|
/**
|
|
@@ -24,7 +24,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
24
24
|
* @returns {JSX.Element} - The rendered AvatarInput component.
|
|
25
25
|
*/
|
|
26
26
|
var AvatarInput = function AvatarInput(_ref) {
|
|
27
|
-
var
|
|
27
|
+
var _files$2;
|
|
28
28
|
var _ref$size = _ref.size,
|
|
29
29
|
size = _ref$size === void 0 ? "6rem" : _ref$size,
|
|
30
30
|
avatarName = _ref.avatarName,
|
|
@@ -36,6 +36,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
36
36
|
variant = _ref.variant,
|
|
37
37
|
fileUrl = _ref.fileUrl,
|
|
38
38
|
uploadHandler = _ref.uploadHandler,
|
|
39
|
+
_onChange = _ref.onChange,
|
|
39
40
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
40
41
|
var _useFileUploader = useFileUploader.useFileUploader( /*#__PURE__*/function () {
|
|
41
42
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(data, config) {
|
|
@@ -55,9 +56,14 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
55
56
|
return function (_x, _x2) {
|
|
56
57
|
return _ref2.apply(this, arguments);
|
|
57
58
|
};
|
|
58
|
-
}(), value,
|
|
59
|
+
}(), value !== null && value !== void 0 ? value : defaultValue, {
|
|
60
|
+
multiple: false,
|
|
61
|
+
onChange: function onChange(files) {
|
|
62
|
+
var _files$path;
|
|
63
|
+
return _onChange === null || _onChange === void 0 ? void 0 : _onChange((_files$path = files === null || files === void 0 ? void 0 : files.path) !== null && _files$path !== void 0 ? _files$path : null);
|
|
64
|
+
}
|
|
65
|
+
}),
|
|
59
66
|
files = _useFileUploader.files,
|
|
60
|
-
list = _useFileUploader.list,
|
|
61
67
|
upload = _useFileUploader.upload,
|
|
62
68
|
remove = _useFileUploader.remove;
|
|
63
69
|
var _useState = react.useState(""),
|
|
@@ -65,7 +71,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
65
71
|
base64 = _useState2[0],
|
|
66
72
|
setBase64 = _useState2[1];
|
|
67
73
|
react.useEffect(function () {
|
|
68
|
-
if (
|
|
74
|
+
if (files !== null && files !== void 0 && files.length) {
|
|
69
75
|
var _files$;
|
|
70
76
|
var file = files === null || files === void 0 || (_files$ = files[0]) === null || _files$ === void 0 ? void 0 : _files$.file;
|
|
71
77
|
void (file && new Response(file).blob().then(function (blob) {
|
|
@@ -82,14 +88,14 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
82
88
|
var _ref3, _fileUrl;
|
|
83
89
|
setBase64((_ref3 = (_fileUrl = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(defaultValue !== null && defaultValue !== void 0 ? defaultValue : "")) !== null && _fileUrl !== void 0 ? _fileUrl : defaultValue) !== null && _ref3 !== void 0 ? _ref3 : "");
|
|
84
90
|
}
|
|
85
|
-
}, [files,
|
|
91
|
+
}, [files, defaultValue]);
|
|
86
92
|
react.useEffect(function () {
|
|
87
93
|
var _fileUrl2, _fileUrl3;
|
|
88
94
|
!value && defaultValue && setBase64((_fileUrl2 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(defaultValue)) !== null && _fileUrl2 !== void 0 ? _fileUrl2 : defaultValue);
|
|
89
95
|
value && setBase64((_fileUrl3 = fileUrl === null || fileUrl === void 0 ? void 0 : fileUrl(value)) !== null && _fileUrl3 !== void 0 ? _fileUrl3 : value);
|
|
90
96
|
}, [value, defaultValue]);
|
|
91
97
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
92
|
-
className: "flex flex-nowrap items-end overflow-hidden",
|
|
98
|
+
className: "flex flex-nowrap items-end overflow-hidden p-px",
|
|
93
99
|
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
94
100
|
className: classNames("inline-block leading-none relative outline overflow-hidden", rounded && "rounded-full", !rounded && "rounded"),
|
|
95
101
|
children: [/*#__PURE__*/jsxRuntime.jsx(core.Avatar, {
|
|
@@ -114,8 +120,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
114
120
|
})]
|
|
115
121
|
})]
|
|
116
122
|
}), /*#__PURE__*/jsxRuntime.jsx(Hidden.HiddenInput, _objectSpread({
|
|
117
|
-
|
|
118
|
-
defaultValue: defaultValue
|
|
123
|
+
value: files === null || files === void 0 || (_files$2 = files[0]) === null || _files$2 === void 0 ? void 0 : _files$2.path
|
|
119
124
|
}, rest)), files.map(function (file, idx) {
|
|
120
125
|
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
121
126
|
className: "px-2 py-1 flex-1 overflow-hidden",
|
|
@@ -128,7 +133,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
128
133
|
children: file.error
|
|
129
134
|
})
|
|
130
135
|
}), file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
131
|
-
icon:
|
|
136
|
+
icon: "icon-[mdi--stop]",
|
|
132
137
|
bg: "danger",
|
|
133
138
|
color: "white",
|
|
134
139
|
size: "sm",
|
|
@@ -139,7 +144,7 @@ var AvatarInput = function AvatarInput(_ref) {
|
|
|
139
144
|
return (_file$abort = file.abort) === null || _file$abort === void 0 ? void 0 : _file$abort.call(file);
|
|
140
145
|
}
|
|
141
146
|
}), !file.progress && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
142
|
-
icon:
|
|
147
|
+
icon: "icon-[mdi--trash-can-outline]",
|
|
143
148
|
color: "danger",
|
|
144
149
|
size: "sm",
|
|
145
150
|
className: "flex-content",
|
|
@@ -43,10 +43,10 @@ var Checkbox = function Checkbox(_ref) {
|
|
|
43
43
|
var deferred = react.useDeferredValue(!!checked);
|
|
44
44
|
var iconOn = react.useMemo(function () {
|
|
45
45
|
var _ref2;
|
|
46
|
-
return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 :
|
|
46
|
+
return (_ref2 = iconChecked !== null && iconChecked !== void 0 ? iconChecked : icon) !== null && _ref2 !== void 0 ? _ref2 : "icon-[mdi--checkbox-marked]";
|
|
47
47
|
}, [icon, iconChecked]);
|
|
48
48
|
var iconOff = react.useMemo(function () {
|
|
49
|
-
return icon !== null && icon !== void 0 ? icon :
|
|
49
|
+
return icon !== null && icon !== void 0 ? icon : "icon-[mdi--checkbox-blank-outline]";
|
|
50
50
|
}, [icon]);
|
|
51
51
|
react.useEffect(function () {
|
|
52
52
|
setActualValue(deferred);
|
|
@@ -120,7 +120,7 @@ var ColorInput = function ColorInput(_ref) {
|
|
|
120
120
|
children: !actualValue && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
121
121
|
size: "md",
|
|
122
122
|
className: "text-muted",
|
|
123
|
-
icon:
|
|
123
|
+
icon: "icon-[mdi--palette]"
|
|
124
124
|
})
|
|
125
125
|
})
|
|
126
126
|
})), isOpen && /*#__PURE__*/jsxRuntime.jsxs("div", _objectSpread(_objectSpread({
|
|
@@ -142,7 +142,7 @@ var ColorInput = function ColorInput(_ref) {
|
|
|
142
142
|
})]
|
|
143
143
|
})), !disabled && showPicker && /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
144
144
|
className: "flex-content p-1",
|
|
145
|
-
icon:
|
|
145
|
+
icon: "icon-[mdi--eyedropper]",
|
|
146
146
|
onClick: function onClick() {
|
|
147
147
|
return window.EyeDropper && new window.EyeDropper().open().then(function (resp) {
|
|
148
148
|
return handleChange(resp.sRGBHex);
|
package/dist/cjs/input/File.js
CHANGED
|
@@ -132,7 +132,7 @@ var FileInput = function FileInput(_ref) {
|
|
|
132
132
|
children: utilities.Format.bytes(file.size)
|
|
133
133
|
}), /*#__PURE__*/jsxRuntime.jsx(core.Icon, {
|
|
134
134
|
className: "cursor-pointer opacity-30 hover:opacity-80",
|
|
135
|
-
icon:
|
|
135
|
+
icon: "icon-[mdi--close]",
|
|
136
136
|
onClick: function onClick() {
|
|
137
137
|
removeFile(idx);
|
|
138
138
|
}
|