@aatulwork/customform-renderer 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,159 +1,14 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React$1 from 'react';
3
-
4
- /**
5
- * Core types for Custom Form Renderer
6
- */
7
- interface OptionItem {
8
- label: string;
9
- value: string | number;
10
- icon?: string;
11
- group?: string;
12
- }
13
- type FieldType = 'text' | 'email' | 'number' | 'select' | 'checkbox' | 'radio' | 'datepicker' | 'file' | 'ckeditor' | 'toggle' | 'color' | 'formReference' | 'apiReference';
14
- interface FieldValidation {
15
- min?: number;
16
- max?: number;
17
- pattern?: string;
18
- maxFileSize?: number;
19
- allowedFileTypes?: string[];
20
- }
21
- interface FormField {
22
- type: FieldType;
23
- label: string;
24
- name: string;
25
- required?: boolean;
26
- placeholder?: string;
27
- allowFilter?: boolean;
28
- options?: OptionItem[] | string[];
29
- validation?: FieldValidation;
30
- referenceFormName?: string;
31
- referenceFieldName?: string;
32
- apiEndpoint?: string;
33
- referenceModel?: string;
34
- apiLabelField?: string;
35
- apiValueField?: string;
36
- allowMultiple?: boolean;
37
- datePickerMode?: 'date' | 'datetime' | 'time';
38
- /** @deprecated Use datePickerMode instead */
39
- displayTime?: boolean;
40
- }
41
- interface FormSection {
42
- id: string;
43
- title: string;
44
- description?: string;
45
- fields: FormField[];
46
- }
47
- interface FormSchema {
48
- _id?: string;
49
- id?: string;
50
- title: string;
51
- name: string;
52
- module?: string | null;
53
- formType?: 'system' | 'custom';
54
- collectionName?: string;
55
- sections?: FormSection[];
56
- fields?: FormField[];
57
- settings?: {
58
- sectionDisplayMode?: 'panel' | 'stepper';
59
- fieldsPerRow?: number;
60
- [key: string]: any;
61
- };
62
- createdAt?: string;
63
- updatedAt?: string;
64
- }
65
- interface FormRendererProps {
66
- formSchema: FormSchema;
67
- onSubmit?: (data: Record<string, any>) => void | Promise<void>;
68
- onCancel?: () => void;
69
- isLoading?: boolean;
70
- onSuccess?: () => void;
71
- initialValues?: Record<string, any>;
72
- hideTitle?: boolean;
73
- allowResetOnValuesChange?: boolean;
74
- mode?: 'edit' | 'view';
75
- services?: FormServices;
76
- colors?: FormColors;
77
- }
78
- interface FormServices {
79
- fileUpload?: FileUploadService;
80
- formReference?: FormReferenceService;
81
- apiReference?: ApiReferenceService;
82
- dateFormatter?: DateFormatterService;
83
- SelectComponent?: React.ComponentType<any>;
84
- FileDisplayComponent?: React.ComponentType<{
85
- fieldValue: any;
86
- }>;
87
- CKEditorDisplayComponent?: React.ComponentType<{
88
- content: string;
89
- maxLength?: number;
90
- showViewButton?: boolean;
91
- }>;
92
- fileBaseUrl?: string;
93
- ckEditorLicenseKey?: string;
94
- ckEditorScriptPath?: string;
95
- }
96
- interface FileUploadService {
97
- uploadFiles: (formName: string, fieldName: string, files: File[]) => Promise<UploadedFile[]>;
98
- }
99
- interface UploadedFile {
100
- _id?: string;
101
- fileName: string;
102
- originalName?: string;
103
- fileUrl: string;
104
- size?: number;
105
- mimeType?: string;
106
- [key: string]: any;
107
- }
108
- interface FormReferenceService {
109
- fetchOptions: (formName: string, fieldName: string) => Promise<OptionItem[]>;
110
- }
111
- interface ApiReferenceService {
112
- fetchOptions: (endpoint: string, labelField: string, valueField?: string) => Promise<OptionItem[]>;
113
- }
114
- interface DateFormatterService {
115
- format: (value: any, options?: {
116
- datePickerMode?: 'date' | 'datetime' | 'time';
117
- }) => string;
118
- }
119
- interface FormColors {
120
- primary?: string;
121
- secondary?: string;
122
- error?: string;
123
- success?: string;
124
- warning?: string;
125
- info?: string;
126
- textPrimary?: string;
127
- textSecondary?: string;
128
- divider?: string;
129
- background?: string;
130
- backgroundPaper?: string;
131
- }
132
- interface FieldRendererProps {
133
- field: FormField;
134
- control: any;
135
- defaultValue: any;
136
- rules: any;
137
- errors: any;
138
- setValue: any;
139
- formSchema?: FormSchema;
140
- uploadingFiles?: Record<string, boolean>;
141
- setUploadingFiles?: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;
142
- setError?: (name: string, error: {
143
- type: string;
144
- message: string;
145
- }) => void;
146
- clearErrors?: (name?: string) => void;
147
- services?: FormServices;
148
- colors?: FormColors;
149
- }
2
+ import { F as FormRendererProps, a as FieldRendererProps, b as FormSchema, c as FormServices, d as FormColors, e as FormField, A as ApiReferenceService, D as DateFormatterService, f as FileUploadService, g as FormReferenceService } from './fields-BM8DDh8m.js';
3
+ export { h as ApiReferenceField, C as CKEditorField, i as CheckboxField, j as ColorField, k as DateTimePickerField, l as FieldType, m as FieldValidation, n as FileField, o as FormReferenceField, p as FormSection, O as OptionItem, R as RadioField, S as SelectField, T as TextField, q as ToggleField, U as UploadedFile } from './fields-BM8DDh8m.js';
4
+ import React from 'react';
150
5
 
151
6
  declare const FormRenderer: ({ formSchema, onSubmit, onCancel, isLoading, onSuccess, initialValues, hideTitle, allowResetOnValuesChange, mode, services, colors, }: FormRendererProps) => react_jsx_runtime.JSX.Element;
152
7
 
153
8
  interface FieldRendererComponentProps extends Omit<FieldRendererProps, 'defaultValue' | 'rules'> {
154
9
  formSchema: any;
155
10
  uploadingFiles: Record<string, boolean>;
156
- setUploadingFiles: React$1.Dispatch<React$1.SetStateAction<Record<string, boolean>>>;
11
+ setUploadingFiles: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;
157
12
  setError: (name: string, error: {
158
13
  type: string;
159
14
  message: string;
@@ -178,41 +33,6 @@ interface FieldViewProps {
178
33
  }
179
34
  declare const FieldView: ({ field, value, services }: FieldViewProps) => react_jsx_runtime.JSX.Element;
180
35
 
181
- declare const TextField: ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
182
-
183
- declare const SelectField: ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
184
-
185
- declare const CheckboxField: ({ field, control, defaultValue, rules }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
186
-
187
- declare const RadioField: ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
188
-
189
- declare const ToggleField: ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
190
-
191
- declare const ColorField: ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
192
-
193
- declare const DateTimePickerField: ({ field, control, defaultValue, rules, errors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
194
-
195
- declare global {
196
- interface Window {
197
- ClassicEditor: any;
198
- }
199
- }
200
- declare const CKEditorField: ({ field, control, defaultValue, rules, errors, setValue, formSchema, services, colors }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
201
-
202
- interface FileFieldProps extends FieldRendererProps {
203
- uploadingFiles?: Record<string, boolean>;
204
- setUploadingFiles?: React$1.Dispatch<React$1.SetStateAction<Record<string, boolean>>>;
205
- setError?: (name: string, error: {
206
- type: string;
207
- message: string;
208
- }) => void;
209
- clearErrors?: (name?: string) => void;
210
- }
211
- declare const FileField: ({ field, control, defaultValue, rules, errors, formSchema, uploadingFiles, setUploadingFiles, setError, clearErrors, services, colors, }: FileFieldProps) => react_jsx_runtime.JSX.Element;
212
-
213
- declare const FormReferenceField: ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
214
- declare const ApiReferenceField: ({ field, control, defaultValue, rules, errors, services }: FieldRendererProps) => react_jsx_runtime.JSX.Element;
215
-
216
36
  interface SimpleSelectOption {
217
37
  value: string | number;
218
38
  label: string;
@@ -231,8 +51,12 @@ interface SimpleSelectProps {
231
51
  disabled?: boolean;
232
52
  multiple?: boolean;
233
53
  isLoading?: boolean;
54
+ filterable?: boolean;
55
+ filterPlaceholder?: string;
56
+ refreshable?: boolean;
57
+ onRefresh?: () => void;
234
58
  }
235
- declare const SimpleSelect: React$1.FC<SimpleSelectProps>;
59
+ declare const SimpleSelect: React.FC<SimpleSelectProps>;
236
60
 
237
61
  /**
238
62
  * Get all fields from form schema (sections or legacy fields)
@@ -365,4 +189,4 @@ declare const defaultApiReferenceService: ApiReferenceService;
365
189
  */
366
190
  declare const defaultDateFormatterService: DateFormatterService;
367
191
 
368
- export { ApiReferenceField, type ApiReferenceService, CKEditorField, CheckboxField, ColorField, type DateFormatterService, DateTimePickerField, FieldRenderer, type FieldRendererProps, type FieldType, type FieldValidation, FieldView, FileField, type FileUploadService, type FormColors, type FormField, FormReferenceField, type FormReferenceService, FormRenderer, type FormRendererProps, type FormSchema, type FormSection, type FormServices, FormViewMode, type OptionItem, RadioField, SelectField, SimpleSelect, type SimpleSelectOption, type SimpleSelectProps, TextField, ToggleField, type UploadedFile, buildFieldRules, defaultApiReferenceService, defaultDateFormatterService, defaultFileUploadService, defaultFormReferenceService, formatFileSize, getAllFields, getDefaultValue, isCKEditorAvailable, loadCKEditor, normalizeInitialValues, normalizeOptions, transformFormValues, useCKEditor, validateFile, waitForCKEditor };
192
+ export { ApiReferenceService, DateFormatterService, FieldRenderer, FieldRendererProps, FieldView, FileUploadService, FormColors, FormField, FormReferenceService, FormRenderer, FormRendererProps, FormSchema, FormServices, FormViewMode, SimpleSelect, type SimpleSelectOption, type SimpleSelectProps, buildFieldRules, defaultApiReferenceService, defaultDateFormatterService, defaultFileUploadService, defaultFormReferenceService, formatFileSize, getAllFields, getDefaultValue, isCKEditorAvailable, loadCKEditor, normalizeInitialValues, normalizeOptions, transformFormValues, useCKEditor, validateFile, waitForCKEditor };
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ var DoubleArrowOutlinedIcon = require('@mui/icons-material/DoubleArrowOutlined')
8
8
  var ArrowForwardIcon = require('@mui/icons-material/ArrowForward');
9
9
  var ArrowBackIcon = require('@mui/icons-material/ArrowBack');
10
10
  var jsxRuntime = require('react/jsx-runtime');
11
+ var RefreshIcon = require('@mui/icons-material/Refresh');
11
12
  var ckeditor5React = require('@ckeditor/ckeditor5-react');
12
13
  var dayjs2 = require('dayjs');
13
14
  var CloseIcon = require('@mui/icons-material/Close');
@@ -25,6 +26,7 @@ var ExpandMoreIcon__default = /*#__PURE__*/_interopDefault(ExpandMoreIcon);
25
26
  var DoubleArrowOutlinedIcon__default = /*#__PURE__*/_interopDefault(DoubleArrowOutlinedIcon);
26
27
  var ArrowForwardIcon__default = /*#__PURE__*/_interopDefault(ArrowForwardIcon);
27
28
  var ArrowBackIcon__default = /*#__PURE__*/_interopDefault(ArrowBackIcon);
29
+ var RefreshIcon__default = /*#__PURE__*/_interopDefault(RefreshIcon);
28
30
  var dayjs2__default = /*#__PURE__*/_interopDefault(dayjs2);
29
31
  var CloseIcon__default = /*#__PURE__*/_interopDefault(CloseIcon);
30
32
  var CloudUploadIcon__default = /*#__PURE__*/_interopDefault(CloudUploadIcon);
@@ -284,23 +286,57 @@ var SimpleSelect = ({
284
286
  error = false,
285
287
  disabled = false,
286
288
  multiple = false,
287
- isLoading = false
289
+ isLoading = false,
290
+ filterable = true,
291
+ filterPlaceholder = "Filter...",
292
+ refreshable = false,
293
+ onRefresh
288
294
  }) => {
295
+ const [filterText, setFilterText] = react.useState("");
289
296
  const handleChange = (event) => {
290
297
  const val = event.target.value;
298
+ if (val === "__refresh__") {
299
+ onRefresh?.();
300
+ return;
301
+ }
291
302
  onChange(val);
292
303
  };
304
+ const filteredOptions = filterable && filterText ? options.filter(
305
+ (opt) => String(opt.label).toLowerCase().includes(filterText.toLowerCase())
306
+ ) : options;
307
+ const handleFilterChange = (e) => {
308
+ setFilterText(e.target.value);
309
+ };
310
+ const handleClose = () => {
311
+ setFilterText("");
312
+ };
293
313
  return /* @__PURE__ */ jsxRuntime.jsxs(material.FormControl, { fullWidth, size, required, error, disabled, children: [
294
314
  /* @__PURE__ */ jsxRuntime.jsx(material.InputLabel, { children: label }),
295
- /* @__PURE__ */ jsxRuntime.jsx(
315
+ /* @__PURE__ */ jsxRuntime.jsxs(
296
316
  material.Select,
297
317
  {
298
318
  value: value ?? (multiple ? [] : ""),
299
319
  onChange: handleChange,
320
+ onClose: handleClose,
300
321
  input: /* @__PURE__ */ jsxRuntime.jsx(material.OutlinedInput, { label }),
322
+ MenuProps: {
323
+ autoFocus: false
324
+ },
301
325
  multiple,
302
326
  disabled: disabled || isLoading,
303
- endAdornment: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 20 }) : void 0,
327
+ endAdornment: isLoading ? /* @__PURE__ */ jsxRuntime.jsx(material.CircularProgress, { size: 20 }) : refreshable && onRefresh ? /* @__PURE__ */ jsxRuntime.jsx(material.InputAdornment, { position: "end", sx: { mr: 2 }, children: /* @__PURE__ */ jsxRuntime.jsx(
328
+ material.IconButton,
329
+ {
330
+ size: "small",
331
+ onClick: (e) => {
332
+ e.stopPropagation();
333
+ onRefresh();
334
+ },
335
+ disabled,
336
+ "aria-label": "Refresh options",
337
+ children: /* @__PURE__ */ jsxRuntime.jsx(RefreshIcon__default.default, { fontSize: "small" })
338
+ }
339
+ ) }) : void 0,
304
340
  renderValue: (selected) => {
305
341
  if (multiple) {
306
342
  const selectedValues = selected;
@@ -322,13 +358,36 @@ var SimpleSelect = ({
322
358
  const option = options.find((opt) => opt.value === selected);
323
359
  return option?.label || selected || /* @__PURE__ */ jsxRuntime.jsx("em", { children: placeholder || "Select..." });
324
360
  },
325
- children: options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(material.MenuItem, { value: option.value, children: option.label }, option.value))
361
+ children: [
362
+ filterable && /* @__PURE__ */ jsxRuntime.jsx(
363
+ material.ListSubheader,
364
+ {
365
+ sx: { py: 1 },
366
+ onMouseDown: (e) => e.stopPropagation(),
367
+ onClick: (e) => e.stopPropagation(),
368
+ children: /* @__PURE__ */ jsxRuntime.jsx(
369
+ material.TextField,
370
+ {
371
+ size: "small",
372
+ fullWidth: true,
373
+ placeholder: filterPlaceholder,
374
+ value: filterText,
375
+ onChange: handleFilterChange,
376
+ variant: "outlined",
377
+ sx: { mt: -0.5 },
378
+ autoFocus: true
379
+ }
380
+ )
381
+ }
382
+ ),
383
+ filteredOptions.map((option) => /* @__PURE__ */ jsxRuntime.jsx(material.MenuItem, { value: option.value, children: option.label }, option.value))
384
+ ]
326
385
  }
327
386
  ),
328
387
  helperText && /* @__PURE__ */ jsxRuntime.jsx(material.FormHelperText, { children: helperText })
329
388
  ] });
330
389
  };
331
- var SelectField = ({ field, control, defaultValue, rules, errors, services }) => {
390
+ var SelectField = ({ field, control, defaultValue, rules, errors }) => {
332
391
  const isMultiple = field.allowMultiple || false;
333
392
  const normalizedOptions = normalizeOptions(field.options);
334
393
  const selectOptions = react.useMemo(() => {
@@ -337,7 +396,6 @@ var SelectField = ({ field, control, defaultValue, rules, errors, services }) =>
337
396
  label: opt.label
338
397
  }));
339
398
  }, [normalizedOptions]);
340
- const SelectComponent = services?.SelectComponent || SimpleSelect;
341
399
  return /* @__PURE__ */ jsxRuntime.jsx(
342
400
  reactHookForm.Controller,
343
401
  {
@@ -347,7 +405,7 @@ var SelectField = ({ field, control, defaultValue, rules, errors, services }) =>
347
405
  rules,
348
406
  render: ({ field: formField }) => {
349
407
  return /* @__PURE__ */ jsxRuntime.jsx(
350
- SelectComponent,
408
+ SimpleSelect,
351
409
  {
352
410
  label: field.label,
353
411
  value: formField.value,
@@ -1077,7 +1135,7 @@ var FormReferenceField = ({ field, control, defaultValue, rules, errors, service
1077
1135
  const [options, setOptions] = react.useState([]);
1078
1136
  const [isLoading, setIsLoading] = react.useState(false);
1079
1137
  const formReferenceService = services?.formReference || defaultFormReferenceService;
1080
- react.useEffect(() => {
1138
+ const fetchOptions = react.useCallback(() => {
1081
1139
  if (!field.referenceFormName || !field.referenceFieldName) return;
1082
1140
  setIsLoading(true);
1083
1141
  formReferenceService.fetchOptions(field.referenceFormName, field.referenceFieldName).then((opts) => {
@@ -1089,6 +1147,9 @@ var FormReferenceField = ({ field, control, defaultValue, rules, errors, service
1089
1147
  setIsLoading(false);
1090
1148
  });
1091
1149
  }, [field.referenceFormName, field.referenceFieldName, formReferenceService]);
1150
+ react.useEffect(() => {
1151
+ fetchOptions();
1152
+ }, [fetchOptions]);
1092
1153
  const selectOptions = react.useMemo(() => {
1093
1154
  return options.map((opt) => ({
1094
1155
  value: String(opt.value),
@@ -1098,7 +1159,6 @@ var FormReferenceField = ({ field, control, defaultValue, rules, errors, service
1098
1159
  const fieldDefaultValue = defaultValue ?? getDefaultValue(field);
1099
1160
  const fieldRules = rules ?? buildFieldRules(field);
1100
1161
  const isDisabled = !field.referenceFormName || !field.referenceFieldName;
1101
- const SelectComponent = services?.SelectComponent || SimpleSelect;
1102
1162
  return /* @__PURE__ */ jsxRuntime.jsx(
1103
1163
  reactHookForm.Controller,
1104
1164
  {
@@ -1108,7 +1168,7 @@ var FormReferenceField = ({ field, control, defaultValue, rules, errors, service
1108
1168
  rules: fieldRules,
1109
1169
  render: ({ field: formField }) => {
1110
1170
  return /* @__PURE__ */ jsxRuntime.jsx(
1111
- SelectComponent,
1171
+ SimpleSelect,
1112
1172
  {
1113
1173
  label: field.label,
1114
1174
  value: formField.value,
@@ -1124,7 +1184,9 @@ var FormReferenceField = ({ field, control, defaultValue, rules, errors, service
1124
1184
  error: !!errors[field.name],
1125
1185
  disabled: isDisabled || isLoading,
1126
1186
  multiple: isMultiple,
1127
- isLoading
1187
+ isLoading,
1188
+ refreshable: true,
1189
+ onRefresh: fetchOptions
1128
1190
  }
1129
1191
  );
1130
1192
  }
@@ -1137,7 +1199,7 @@ var ApiReferenceField = ({ field, control, defaultValue, rules, errors, services
1137
1199
  const [options, setOptions] = react.useState([]);
1138
1200
  const [isLoading, setIsLoading] = react.useState(false);
1139
1201
  const apiReferenceService = services?.apiReference || defaultApiReferenceService;
1140
- react.useEffect(() => {
1202
+ const fetchOptions = react.useCallback(() => {
1141
1203
  if (!field.apiEndpoint || !field.apiLabelField) return;
1142
1204
  setIsLoading(true);
1143
1205
  apiReferenceService.fetchOptions(field.apiEndpoint, field.apiLabelField, field.apiValueField || "_id").then((opts) => {
@@ -1149,6 +1211,9 @@ var ApiReferenceField = ({ field, control, defaultValue, rules, errors, services
1149
1211
  setIsLoading(false);
1150
1212
  });
1151
1213
  }, [field.apiEndpoint, field.apiLabelField, field.apiValueField, apiReferenceService]);
1214
+ react.useEffect(() => {
1215
+ fetchOptions();
1216
+ }, [fetchOptions]);
1152
1217
  const selectOptions = react.useMemo(() => {
1153
1218
  return options.map((opt) => ({
1154
1219
  value: String(opt.value),
@@ -1158,7 +1223,6 @@ var ApiReferenceField = ({ field, control, defaultValue, rules, errors, services
1158
1223
  const fieldDefaultValue = defaultValue ?? getDefaultValue(field);
1159
1224
  const fieldRules = rules ?? buildFieldRules(field);
1160
1225
  const isDisabled = !field.apiEndpoint || !field.apiLabelField;
1161
- const SelectComponent = services?.SelectComponent || SimpleSelect;
1162
1226
  return /* @__PURE__ */ jsxRuntime.jsx(
1163
1227
  reactHookForm.Controller,
1164
1228
  {
@@ -1168,7 +1232,7 @@ var ApiReferenceField = ({ field, control, defaultValue, rules, errors, services
1168
1232
  rules: fieldRules,
1169
1233
  render: ({ field: formField }) => {
1170
1234
  return /* @__PURE__ */ jsxRuntime.jsx(
1171
- SelectComponent,
1235
+ SimpleSelect,
1172
1236
  {
1173
1237
  label: field.label,
1174
1238
  value: formField.value,
@@ -1184,7 +1248,9 @@ var ApiReferenceField = ({ field, control, defaultValue, rules, errors, services
1184
1248
  error: !!errors[field.name],
1185
1249
  disabled: isDisabled || isLoading,
1186
1250
  multiple: isMultiple,
1187
- isLoading
1251
+ isLoading,
1252
+ refreshable: true,
1253
+ onRefresh: fetchOptions
1188
1254
  }
1189
1255
  );
1190
1256
  }
@@ -1565,11 +1631,9 @@ var FormRenderer = ({
1565
1631
  control,
1566
1632
  handleSubmit,
1567
1633
  reset,
1568
- resetField,
1569
1634
  clearErrors,
1570
1635
  setValue,
1571
1636
  setError,
1572
- getValues,
1573
1637
  formState: { errors }
1574
1638
  } = reactHookForm.useForm({
1575
1639
  defaultValues: initialValues || {}
@@ -1624,17 +1688,6 @@ var FormRenderer = ({
1624
1688
  try {
1625
1689
  await onSubmit(transformedData);
1626
1690
  const resetValues = initialValues || {};
1627
- const allFields = getAllFields(formSchema);
1628
- clearErrors();
1629
- allFields.forEach((field) => {
1630
- const fieldValue = resetValues[field.name] ?? (field.type === "checkbox" ? false : "");
1631
- resetField(field.name, {
1632
- defaultValue: fieldValue,
1633
- keepError: false,
1634
- keepDirty: false,
1635
- keepTouched: false
1636
- });
1637
- });
1638
1691
  reset(resetValues, {
1639
1692
  keepErrors: false,
1640
1693
  keepDirty: false,
@@ -1642,6 +1695,9 @@ var FormRenderer = ({
1642
1695
  keepIsSubmitted: false,
1643
1696
  keepSubmitCount: false
1644
1697
  });
1698
+ setTimeout(() => {
1699
+ clearErrors();
1700
+ }, 0);
1645
1701
  if (onSuccess) onSuccess();
1646
1702
  } catch (error) {
1647
1703
  console.error("Form submission error:", error);