@react-fabric/form 1.0.0-beta.61 → 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.
Files changed (49) hide show
  1. package/dist/cjs/builder/FileField.js +8 -5
  2. package/dist/cjs/builder/components/SchemaArrayForm.js +1 -1
  3. package/dist/cjs/builder/components/SchemaField.js +2 -2
  4. package/dist/cjs/form/Form.js +40 -15
  5. package/dist/cjs/hooks/useFileUploader.js +40 -28
  6. package/dist/cjs/i18n/index.js +4 -4
  7. package/dist/cjs/input/AvatarInput.js +14 -9
  8. package/dist/cjs/input/Hidden.js +1 -10
  9. package/dist/cjs/input/RadioGroup.js +3 -1
  10. package/dist/cjs/select/DualList.js +1 -1
  11. package/dist/cjs/select/List.js +4 -2
  12. package/dist/cjs/select/Select.js +1 -1
  13. package/dist/esm/builder/FileField.js +8 -5
  14. package/dist/esm/builder/components/SchemaArrayForm.js +1 -1
  15. package/dist/esm/builder/components/SchemaField.js +2 -2
  16. package/dist/esm/form/Form.js +40 -15
  17. package/dist/esm/hooks/useFileUploader.js +41 -29
  18. package/dist/esm/i18n/index.js +2 -2
  19. package/dist/esm/input/AvatarInput.js +14 -9
  20. package/dist/esm/input/Hidden.js +2 -11
  21. package/dist/esm/input/RadioGroup.js +3 -1
  22. package/dist/esm/select/DualList.js +1 -1
  23. package/dist/esm/select/List.js +4 -2
  24. package/dist/esm/select/Select.js +1 -1
  25. package/dist/types/builder/FileField.d.ts +2 -1
  26. package/dist/types/form/Form.d.ts +6 -2
  27. package/dist/types/hooks/useFileUploader.d.ts +4 -2
  28. package/dist/types/input/AvatarInput.d.ts +1 -1
  29. package/dist/types/input/Hidden.d.ts +3 -11
  30. package/dist/types/input/RadioGroup.d.ts +5 -1
  31. package/package.json +5 -5
  32. package/src/builder/FileField.tsx +5 -3
  33. package/src/builder/components/SchemaArrayForm.tsx +1 -1
  34. package/src/builder/components/SchemaField.tsx +2 -2
  35. package/src/form/Form.tsx +20 -13
  36. package/src/hooks/useFileUploader.ts +41 -29
  37. package/src/i18n/index.ts +2 -2
  38. package/src/input/AvatarInput.tsx +11 -11
  39. package/src/input/Hidden.tsx +4 -22
  40. package/src/input/RadioGroup.tsx +6 -0
  41. package/src/select/DualList.tsx +1 -1
  42. package/src/select/List.tsx +2 -2
  43. package/src/select/Select.tsx +1 -1
  44. /package/dist/cjs/i18n/{ar.json.js → ar/form.json.js} +0 -0
  45. /package/dist/cjs/i18n/{en.json.js → en/form.json.js} +0 -0
  46. /package/dist/esm/i18n/{ar.json.js → ar/form.json.js} +0 -0
  47. /package/dist/esm/i18n/{en.json.js → en/form.json.js} +0 -0
  48. /package/src/i18n/{ar.json → ar/form.json} +0 -0
  49. /package/src/i18n/{en.json → en/form.json} +0 -0
@@ -1,8 +1,8 @@
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
8
  import { useDebounce } from '@react-fabric/core';
@@ -11,7 +11,7 @@ import { useRef, useTransition, useEffect, useCallback, useImperativeHandle } fr
11
11
  import { useForm as useForm$1, FormProvider, useFormContext, useWatch } from 'react-hook-form';
12
12
  import { jsx, jsxs } from 'react/jsx-runtime';
13
13
 
14
- var _excluded = ["formRef", "resolver", "children", "defaultValues", "onSubmit", "onChange"];
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
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; }
17
17
  var DEFAULT_SUBMIT = function DEFAULT_SUBMIT() {
@@ -50,8 +50,9 @@ var Form = function Form(_ref) {
50
50
  var formRef = _ref.formRef,
51
51
  resolver = _ref.resolver,
52
52
  children = _ref.children,
53
+ resetOnChange = _ref.resetOnChange,
53
54
  _ref$defaultValues = _ref.defaultValues,
54
- defaultValues = _ref$defaultValues === void 0 ? EMPTY_OBJECT : _ref$defaultValues,
55
+ _defaultValues = _ref$defaultValues === void 0 ? EMPTY_OBJECT : _ref$defaultValues,
55
56
  _ref$onSubmit = _ref.onSubmit,
56
57
  _onSubmit = _ref$onSubmit === void 0 ? DEFAULT_SUBMIT : _ref$onSubmit,
57
58
  onChange = _ref.onChange,
@@ -60,7 +61,26 @@ var Form = function Form(_ref) {
60
61
  var form = useForm$1({
61
62
  shouldFocusError: true,
62
63
  resolver: resolver,
63
- defaultValues: defaultValues
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
+ }()
64
84
  });
65
85
  var _useTransition = useTransition(),
66
86
  _useTransition2 = _slicedToArray(_useTransition, 2),
@@ -82,12 +102,17 @@ var Form = function Form(_ref) {
82
102
  form.reset(reset);
83
103
  form.clearErrors();
84
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();
85
- }, [defaultValues]);
105
+ }, []);
106
+ useEffect(function () {
107
+ if (resetOnChange) {
108
+ handleReset(_defaultValues);
109
+ }
110
+ }, [_defaultValues, resetOnChange]);
86
111
  useImperativeHandle(formRef, function () {
87
112
  return {
88
113
  state: form.formState,
89
114
  reset: function reset() {
90
- return handleReset(defaultValues);
115
+ return handleReset(_defaultValues);
91
116
  },
92
117
  clear: function clear() {
93
118
  return handleReset();
@@ -96,19 +121,19 @@ var Form = function Form(_ref) {
96
121
  return form.handleSubmit(_onSubmit);
97
122
  },
98
123
  validate: function () {
99
- var _validate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(fields) {
100
- return _regeneratorRuntime.wrap(function _callee$(_context) {
101
- while (1) switch (_context.prev = _context.next) {
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) {
102
127
  case 0:
103
- _context.next = 2;
128
+ _context2.next = 2;
104
129
  return form.trigger(fields);
105
130
  case 2:
106
- return _context.abrupt("return", _context.sent);
131
+ return _context2.abrupt("return", _context2.sent);
107
132
  case 3:
108
133
  case "end":
109
- return _context.stop();
134
+ return _context2.stop();
110
135
  }
111
- }, _callee);
136
+ }, _callee2);
112
137
  }));
113
138
  function validate(_x) {
114
139
  return _validate.apply(this, arguments);
@@ -132,7 +157,7 @@ var Form = function Form(_ref) {
132
157
  }, 50);
133
158
  }
134
159
  };
135
- }, [_onSubmit, form, form.formState, defaultValues]);
160
+ }, [_onSubmit, form, form.formState, _defaultValues]);
136
161
  var onInvalid = useCallback(function (_, e) {
137
162
  var el = e.target;
138
163
  console.log("Invalid:", _, e);
@@ -145,7 +170,7 @@ var Form = function Form(_ref) {
145
170
  children: /*#__PURE__*/jsxs("form", _objectSpread(_objectSpread({
146
171
  ref: ref,
147
172
  onReset: function onReset() {
148
- return handleReset(defaultValues);
173
+ return handleReset(_defaultValues);
149
174
  },
150
175
  onSubmit: function onSubmit(e) {
151
176
  e.stopPropagation();
@@ -6,7 +6,7 @@ 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"];
@@ -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 multiple = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
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 = 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
- state.list = Array.from(state.files.values()).map(function (file) {
80
- return !file.progress && !file.error && {
81
- key: file.key,
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 (isString(initialList)) {
82
+ if (action.type === "init") {
83
+ state.files = new Map();
84
+ if (isString(action.initialList)) {
96
85
  var key = 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 (isObject(initialList)) {
94
+ if (isObject(action.initialList)) {
106
95
  var _key = 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 (isArray(initialList)) {
112
- initialList.forEach(function (file) {
100
+ if (isArray(action.initialList)) {
101
+ action.initialList.forEach(function (file) {
113
102
  var key = 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
- return state;
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
+ useEffect(function () {
134
+ dispatch({
135
+ type: "init",
136
+ initialList: initialList
137
+ });
138
+ }, [initialList]);
126
139
  var doUpload = useCallback( /*#__PURE__*/function () {
127
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(key, file) {
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 _ref.apply(this, arguments);
201
+ return _ref2.apply(this, arguments);
189
202
  };
190
203
  }(), []);
191
204
  var upload = 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,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { addTranslationBundle } from '@react-fabric/core';
4
- import ar from './ar.json.js';
5
- import en from './en.json.js';
4
+ import ar from './ar/form.json.js';
5
+ import en from './en/form.json.js';
6
6
 
7
7
  /*
8
8
  * React Fabric
@@ -12,7 +12,7 @@ import { useFileUploader } from '../hooks/useFileUploader.js';
12
12
  import { HiddenInput } from './Hidden.js';
13
13
  import { jsxs, jsx } from '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 _list$;
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( /*#__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, false),
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 = useState(""),
@@ -65,7 +71,7 @@ var AvatarInput = function AvatarInput(_ref) {
65
71
  base64 = _useState2[0],
66
72
  setBase64 = _useState2[1];
67
73
  useEffect(function () {
68
- if (list !== null && list !== void 0 && list.length) {
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, list, defaultValue]);
91
+ }, [files, defaultValue]);
86
92
  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__*/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__*/jsxs("div", {
94
100
  className: classNames("inline-block leading-none relative outline overflow-hidden", rounded && "rounded-full", !rounded && "rounded"),
95
101
  children: [/*#__PURE__*/jsx(Avatar, {
@@ -114,8 +120,7 @@ var AvatarInput = function AvatarInput(_ref) {
114
120
  })]
115
121
  })]
116
122
  }), /*#__PURE__*/jsx(HiddenInput, _objectSpread({
117
- hiddenValue: list === null || list === void 0 || (_list$ = list[0]) === null || _list$ === void 0 ? void 0 : _list$.path,
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__*/jsxs("div", {
121
126
  className: "px-2 py-1 flex-1 overflow-hidden",
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { useEffect, Fragment } from 'react';
3
+ import { Fragment } from 'react';
4
4
  import { ErrorIcon } from '../internal/ErrorIcon.js';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -36,23 +36,14 @@ import { jsxs, jsx } from 'react/jsx-runtime';
36
36
  * @returns {JSX.Element} The rendered hidden input field and error icon.
37
37
  */
38
38
  var HiddenInput = function HiddenInput(_ref) {
39
- var hiddenValue = _ref.hiddenValue,
40
- defaultValue = _ref.defaultValue,
41
- onChange = _ref.onChange,
42
- invalid = _ref.invalid,
39
+ var invalid = _ref.invalid,
43
40
  error = _ref.error,
44
41
  _ref$value = _ref.value,
45
42
  value = _ref$value === void 0 ? "" : _ref$value,
46
43
  name = _ref.name;
47
- useEffect(function () {
48
- setTimeout(function () {
49
- onChange === null || onChange === void 0 || onChange(hiddenValue !== null && hiddenValue !== void 0 ? hiddenValue : defaultValue);
50
- }, 50);
51
- }, [hiddenValue, defaultValue]);
52
44
  return /*#__PURE__*/jsxs(Fragment, {
53
45
  children: [/*#__PURE__*/jsx("input", {
54
46
  type: "hidden",
55
- onChange: onChange,
56
47
  value: value,
57
48
  name: name
58
49
  }), /*#__PURE__*/jsx(ErrorIcon, {
@@ -7,7 +7,7 @@ import { cloneElement } from 'react';
7
7
  import { FieldWrapper } from '../internal/FieldWrapper.js';
8
8
  import { jsx } from 'react/jsx-runtime';
9
9
 
10
- var _excluded = ["children", "name", "className", "optionWidth", "onChange"];
10
+ var _excluded = ["children", "name", "className", "optionWidth", "value", "onChange"];
11
11
  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; }
12
12
  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; }
13
13
  /**
@@ -23,6 +23,7 @@ var RadioGroup = function RadioGroup(_ref) {
23
23
  name = _ref.name,
24
24
  className = _ref.className,
25
25
  optionWidth = _ref.optionWidth,
26
+ value = _ref.value,
26
27
  onChange = _ref.onChange,
27
28
  rest = _objectWithoutProperties(_ref, _excluded);
28
29
  return /*#__PURE__*/jsx(FieldWrapper, _objectSpread(_objectSpread({}, rest), {}, {
@@ -31,6 +32,7 @@ var RadioGroup = function RadioGroup(_ref) {
31
32
  children: cloneChildren(children, function (child) {
32
33
  return /*#__PURE__*/cloneElement(child, {
33
34
  name: name,
35
+ checked: child.props.value === value,
34
36
  onChange: onChange,
35
37
  width: optionWidth
36
38
  });
@@ -38,7 +38,7 @@ var DualList = function DualList(_ref) {
38
38
  _ref$labelProperty = _ref.labelProperty,
39
39
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
40
40
  _ref$valueProperty = _ref.valueProperty,
41
- valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
41
+ valueProperty = _ref$valueProperty === void 0 ? "value" : _ref$valueProperty,
42
42
  renderer = _ref.renderer,
43
43
  onChange = _ref.onChange,
44
44
  name = _ref.name,
@@ -29,8 +29,10 @@ var List = function List(_ref) {
29
29
  options = _ref.options,
30
30
  height = _ref.height,
31
31
  groupProperty = _ref.groupProperty,
32
- labelProperty = _ref.labelProperty,
33
- valueProperty = _ref.valueProperty,
32
+ _ref$labelProperty = _ref.labelProperty,
33
+ labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
34
+ _ref$valueProperty = _ref.valueProperty,
35
+ valueProperty = _ref$valueProperty === void 0 ? "value" : _ref$valueProperty,
34
36
  infoProperty = _ref.infoProperty,
35
37
  sortProperty = _ref.sortProperty,
36
38
  multiple = _ref.multiple,
@@ -34,7 +34,7 @@ var Select = function Select(_ref) {
34
34
  _ref$labelProperty = _ref.labelProperty,
35
35
  labelProperty = _ref$labelProperty === void 0 ? "label" : _ref$labelProperty,
36
36
  _ref$valueProperty = _ref.valueProperty,
37
- valueProperty = _ref$valueProperty === void 0 ? "id" : _ref$valueProperty,
37
+ valueProperty = _ref$valueProperty === void 0 ? "value" : _ref$valueProperty,
38
38
  sortProperty = _ref.sortProperty,
39
39
  infoProperty = _ref.infoProperty,
40
40
  multiple = _ref.multiple,
@@ -1,10 +1,11 @@
1
1
  import { type UploadHandler } from "../hooks/useFileUploader";
2
2
  import { type FileSchema, type ValueType } from "../types/schema";
3
- export declare const FileField: ({ uploadHandler, inline, label, accept, value, fileUrl, multiple, invalid, error, ...rest }: Partial<FileSchema & ValueType> & {
3
+ export declare const FileField: ({ uploadHandler, inline, label, accept, value, fileUrl, onChange, multiple, invalid, error, ...rest }: Partial<FileSchema & ValueType> & {
4
4
  value?: AnyObject;
5
5
  inline?: boolean;
6
6
  invalid?: boolean;
7
7
  error?: AnyObject;
8
+ onChange?: (value: any) => void;
8
9
  fileUrl?: (path: string) => string;
9
10
  uploadHandler: UploadHandler;
10
11
  }) => import("react/jsx-runtime").JSX.Element;
@@ -23,7 +23,11 @@ export interface FormProps<K extends KeyValue = KeyValue> {
23
23
  /**
24
24
  * default data values
25
25
  */
26
- defaultValues?: K;
26
+ defaultValues?: K | Promise<K>;
27
+ /**
28
+ * reset values on defaultValues change (workaround for using fetch result)
29
+ */
30
+ resetOnChange?: boolean;
27
31
  /**
28
32
  * change callback
29
33
  */
@@ -61,7 +65,7 @@ export interface FormProps<K extends KeyValue = KeyValue> {
61
65
  * @see {@link https://react-hook-form.com/docs/useform} for more details on the properties.
62
66
  * @see {@link https://github.com/jquense/yup} for more details on the Yup validation schema.
63
67
  */
64
- export declare const Form: <K extends KeyValue>({ formRef, resolver, children, defaultValues, onSubmit, onChange, ...rest }: PropsWithChildren<FormProps<K>>) => import("react/jsx-runtime").JSX.Element;
68
+ export declare const Form: <K extends KeyValue>({ formRef, resolver, children, resetOnChange, defaultValues, onSubmit, onChange, ...rest }: PropsWithChildren<FormProps<K>>) => import("react/jsx-runtime").JSX.Element;
65
69
  export declare const useForm: <K extends KeyValue = KeyValue>() => {
66
70
  values: import("react-hook-form").DeepPartialSkipArrayKey<K> & K;
67
71
  formState: FormState<K>;
@@ -28,12 +28,14 @@ interface FileInfo {
28
28
  * const { upload, remove, retry, state } = useFileUploader(uploader, initialList, multiple);
29
29
  * ```
30
30
  */
31
- export declare const useFileUploader: (uploader: UploadHandler, initialList?: string | FileInfo | FileInfo[], multiple?: boolean) => {
31
+ export declare const useFileUploader: (uploader: UploadHandler, initialList?: string | FileInfo | FileInfo[], { multiple, onChange, }?: {
32
+ multiple?: boolean;
33
+ onChange?: (files: FileInfo[] | FileInfo | null) => void;
34
+ }) => {
32
35
  upload: (files: FileList | null) => void;
33
36
  remove: (key: string) => void;
34
37
  retry: (key: string) => void;
35
38
  pending: number;
36
- list: FileInfo[];
37
39
  files: FileInfo[];
38
40
  };
39
41
  export {};
@@ -48,4 +48,4 @@ export interface Props extends RefProp {
48
48
  * @param {Props} props - The properties for the AvatarInput component.
49
49
  * @returns {JSX.Element} - The rendered AvatarInput component.
50
50
  */
51
- export declare const AvatarInput: ({ size, avatarName, avatarClassName, value, rounded, defaultValue, fallbackIcon, variant, fileUrl, uploadHandler, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
51
+ export declare const AvatarInput: ({ size, avatarName, avatarClassName, value, rounded, defaultValue, fallbackIcon, variant, fileUrl, uploadHandler, onChange, ...rest }: Props) => import("react/jsx-runtime").JSX.Element;
@@ -4,17 +4,9 @@ interface Props {
4
4
  */
5
5
  name?: string;
6
6
  /**
7
- * hidden value will fire change for form update
7
+ * hidden input value
8
8
  */
9
- hiddenValue?: AnyObject;
10
- /**
11
- * default avatar image
12
- */
13
- defaultValue?: string;
14
- /**
15
- * form onChange handler
16
- */
17
- onChange?: (value: AnyObject) => void;
9
+ value?: AnyObject;
18
10
  }
19
11
  /**
20
12
  * Hidden input component to handle hidden values in forms.
@@ -24,5 +16,5 @@ interface Props {
24
16
  * @param {Object} props - Component properties.
25
17
  * @returns {JSX.Element} The rendered hidden input field and error icon.
26
18
  */
27
- export declare const HiddenInput: ({ hiddenValue, defaultValue, onChange, invalid, error, value, name, }: Props) => import("react/jsx-runtime").JSX.Element;
19
+ export declare const HiddenInput: ({ invalid, error, value, name, }: Props) => import("react/jsx-runtime").JSX.Element;
28
20
  export {};
@@ -37,6 +37,10 @@ export interface RadioGroupProps extends ChildrenProp<typeof Radio>, CssProp {
37
37
  * vertical orientation
38
38
  */
39
39
  vertical?: boolean;
40
+ /**
41
+ * value
42
+ */
43
+ value?: string | number;
40
44
  /**
41
45
  * change handler
42
46
  */
@@ -50,4 +54,4 @@ export interface RadioGroupProps extends ChildrenProp<typeof Radio>, CssProp {
50
54
  * @param {RadioGroupProps} props - The properties for the RadioGroup component.
51
55
  * @returns {JSX.Element} The rendered RadioGroup component.
52
56
  */
53
- export declare const RadioGroup: ({ children, name, className, optionWidth, onChange, ...rest }: RadioGroupProps) => import("react/jsx-runtime").JSX.Element;
57
+ export declare const RadioGroup: ({ children, name, className, optionWidth, value, onChange, ...rest }: RadioGroupProps) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-fabric/form",
3
- "version": "1.0.0-beta.61",
3
+ "version": "1.0.0-beta.62",
4
4
  "description": "RUF: Form package",
5
5
  "author": "Adarsh Pastakia <adarshpastakia@outlook.com>",
6
6
  "license": "MIT",
@@ -41,9 +41,9 @@
41
41
  "@dnd-kit/utilities": "~3.2.2",
42
42
  "@floating-ui/react": "~0.27.16",
43
43
  "@hookform/resolvers": "~5.2.2",
44
- "@react-fabric/core": "^1.0.0-beta.61",
45
- "@react-fabric/date": "^1.0.0-beta.61",
46
- "@react-fabric/utilities": "^1.0.0-beta.61",
44
+ "@react-fabric/core": "^1.0.0-beta.62",
45
+ "@react-fabric/date": "^1.0.0-beta.62",
46
+ "@react-fabric/utilities": "^1.0.0-beta.62",
47
47
  "classnames": "~2.5.1",
48
48
  "color": "~5.0.2",
49
49
  "react-color": "~2.19.3",
@@ -62,5 +62,5 @@
62
62
  "node": ">=18.12.0",
63
63
  "npm": ">=8.19.0"
64
64
  },
65
- "gitHead": "a0b0c571bf9c189fa3355bbc3b896ecc4b9d6a04"
65
+ "gitHead": "9dce2fd9bb753d67e3f8adbf50be257b4bc64242"
66
66
  }
@@ -37,6 +37,7 @@ export const FileField = ({
37
37
  accept,
38
38
  value,
39
39
  fileUrl,
40
+ onChange,
40
41
  multiple,
41
42
  invalid,
42
43
  error,
@@ -46,20 +47,21 @@ export const FileField = ({
46
47
  inline?: boolean;
47
48
  invalid?: boolean;
48
49
  error?: AnyObject;
50
+ onChange?: (value: any) => void;
49
51
  fileUrl?: (path: string) => string;
50
52
  uploadHandler: UploadHandler;
51
53
  }) => {
52
54
  const { t } = useTranslation();
53
- const { pending, files, list, upload, remove } = useFileUploader(
55
+ const { pending, files, upload, remove } = useFileUploader(
54
56
  async (data, config) => await uploadHandler?.(data, config),
55
57
  value,
56
- multiple,
58
+ { multiple, onChange },
57
59
  );
58
60
 
59
61
  return (
60
62
  <Fragment>
61
63
  <Field plain inline={inline} label={label}>
62
- <HiddenInput hiddenValue={multiple ? list : list?.[0]} {...rest} />
64
+ <HiddenInput value={multiple ? files : files?.[0]} {...rest} />
63
65
  </Field>
64
66
  <Tooltip
65
67
  color="danger-200"
@@ -149,7 +149,7 @@ export const SchemaArrayForm = ({
149
149
  />
150
150
  ))}
151
151
  </Content>
152
- {AddModal}
152
+ <AddModal />
153
153
  </Wrapper>
154
154
  );
155
155
  };
@@ -229,7 +229,7 @@ export const SchemaField = ({
229
229
  </div>
230
230
  <div className="flex flex-col gap-1 pb-4">
231
231
  <Controller name={`${field}.id`}>
232
- <HiddenInput hiddenValue={id} />
232
+ <HiddenInput value={id} />
233
233
  </Controller>
234
234
  <Controller name={`${field}.datatype`}>
235
235
  <Select
@@ -284,7 +284,7 @@ export const SchemaField = ({
284
284
  />
285
285
  )}
286
286
  </Field>
287
- {OptionModal}
287
+ <OptionModal />
288
288
  </Fragment>
289
289
  )}
290
290
  {type === DATA_TYPES.FILE && (