@mantine/form 4.2.9 → 5.0.0-alpha.10

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 (107) hide show
  1. package/cjs/filter-errors/filter-errors.js +1 -1
  2. package/cjs/filter-errors/filter-errors.js.map +1 -1
  3. package/cjs/get-input-on-change/get-input-on-change.js +6 -4
  4. package/cjs/get-input-on-change/get-input-on-change.js.map +1 -1
  5. package/cjs/index.js +0 -3
  6. package/cjs/index.js.map +1 -1
  7. package/cjs/paths/get-path.js +23 -0
  8. package/cjs/paths/get-path.js.map +1 -0
  9. package/cjs/paths/get-splitted-path.js +13 -0
  10. package/cjs/paths/get-splitted-path.js.map +1 -0
  11. package/cjs/paths/insert-path.js +19 -0
  12. package/cjs/paths/insert-path.js.map +1 -0
  13. package/cjs/paths/remove-path.js +17 -0
  14. package/cjs/paths/remove-path.js.map +1 -0
  15. package/cjs/paths/reorder-path.js +21 -0
  16. package/cjs/paths/reorder-path.js.map +1 -0
  17. package/cjs/paths/set-path.js +34 -0
  18. package/cjs/paths/set-path.js.map +1 -0
  19. package/cjs/resolvers/yup-resolver/yup-resolver.js +1 -1
  20. package/cjs/resolvers/yup-resolver/yup-resolver.js.map +1 -1
  21. package/cjs/use-form.js +84 -97
  22. package/cjs/use-form.js.map +1 -1
  23. package/cjs/validate/should-validate-on-change.js +19 -0
  24. package/cjs/validate/should-validate-on-change.js.map +1 -0
  25. package/cjs/validate/validate-field-value.js +17 -0
  26. package/cjs/validate/validate-field-value.js.map +1 -0
  27. package/cjs/validate/validate-values.js +40 -0
  28. package/cjs/validate/validate-values.js.map +1 -0
  29. package/esm/filter-errors/filter-errors.js +1 -1
  30. package/esm/filter-errors/filter-errors.js.map +1 -1
  31. package/esm/get-input-on-change/get-input-on-change.js +6 -4
  32. package/esm/get-input-on-change/get-input-on-change.js.map +1 -1
  33. package/esm/index.js +0 -1
  34. package/esm/index.js.map +1 -1
  35. package/esm/paths/get-path.js +19 -0
  36. package/esm/paths/get-path.js.map +1 -0
  37. package/esm/paths/get-splitted-path.js +9 -0
  38. package/esm/paths/get-splitted-path.js.map +1 -0
  39. package/esm/paths/insert-path.js +15 -0
  40. package/esm/paths/insert-path.js.map +1 -0
  41. package/esm/paths/remove-path.js +13 -0
  42. package/esm/paths/remove-path.js.map +1 -0
  43. package/esm/paths/reorder-path.js +17 -0
  44. package/esm/paths/reorder-path.js.map +1 -0
  45. package/esm/paths/set-path.js +26 -0
  46. package/esm/paths/set-path.js.map +1 -0
  47. package/esm/resolvers/yup-resolver/yup-resolver.js +1 -1
  48. package/esm/resolvers/yup-resolver/yup-resolver.js.map +1 -1
  49. package/esm/use-form.js +85 -98
  50. package/esm/use-form.js.map +1 -1
  51. package/esm/validate/should-validate-on-change.js +15 -0
  52. package/esm/validate/should-validate-on-change.js.map +1 -0
  53. package/esm/validate/validate-field-value.js +13 -0
  54. package/esm/validate/validate-field-value.js.map +1 -0
  55. package/esm/validate/validate-values.js +36 -0
  56. package/esm/validate/validate-values.js.map +1 -0
  57. package/lib/____get-input-on-change.internal.d.ts +2 -0
  58. package/lib/____get-input-on-change.internal.d.ts.map +1 -0
  59. package/lib/____use-form.internal.d.ts +37 -0
  60. package/lib/____use-form.internal.d.ts.map +1 -0
  61. package/lib/filter-errors/index.d.ts +2 -0
  62. package/lib/filter-errors/index.d.ts.map +1 -0
  63. package/lib/get-input-on-change/get-input-on-change.d.ts +1 -1
  64. package/lib/get-input-on-change/get-input-on-change.d.ts.map +1 -1
  65. package/lib/get-input-on-change/index.d.ts +2 -0
  66. package/lib/get-input-on-change/index.d.ts.map +1 -0
  67. package/lib/index.d.ts +1 -3
  68. package/lib/index.d.ts.map +1 -1
  69. package/lib/paths/get-path.d.ts +2 -0
  70. package/lib/paths/get-path.d.ts.map +1 -0
  71. package/lib/paths/get-splitted-path.d.ts +2 -0
  72. package/lib/paths/get-splitted-path.d.ts.map +1 -0
  73. package/lib/paths/index.d.ts +6 -0
  74. package/lib/paths/index.d.ts.map +1 -0
  75. package/lib/paths/insert-path.d.ts +2 -0
  76. package/lib/paths/insert-path.d.ts.map +1 -0
  77. package/lib/paths/remove-path.d.ts +2 -0
  78. package/lib/paths/remove-path.d.ts.map +1 -0
  79. package/lib/paths/reorder-path.d.ts +3 -0
  80. package/lib/paths/reorder-path.d.ts.map +1 -0
  81. package/lib/paths/set-path.d.ts +2 -0
  82. package/lib/paths/set-path.d.ts.map +1 -0
  83. package/lib/resolvers/test-resolver.d.ts +1 -0
  84. package/lib/resolvers/test-resolver.d.ts.map +1 -1
  85. package/lib/stories/_base.d.ts +6 -0
  86. package/lib/stories/_base.d.ts.map +1 -0
  87. package/lib/types.d.ts +62 -22
  88. package/lib/types.d.ts.map +1 -1
  89. package/lib/use-form.d.ts +2 -41
  90. package/lib/use-form.d.ts.map +1 -1
  91. package/lib/validate/index.d.ts +4 -0
  92. package/lib/validate/index.d.ts.map +1 -0
  93. package/lib/validate/should-validate-on-change.d.ts +2 -0
  94. package/lib/validate/should-validate-on-change.d.ts.map +1 -0
  95. package/lib/validate/validate-field-value.d.ts +3 -0
  96. package/lib/validate/validate-field-value.d.ts.map +1 -0
  97. package/lib/validate/validate-values.d.ts +6 -0
  98. package/lib/validate/validate-values.d.ts.map +1 -0
  99. package/package.json +4 -2
  100. package/esm/form-list/form-list.js +0 -16
  101. package/esm/form-list/form-list.js.map +0 -1
  102. package/esm/get-error-path/get-error-path.js +0 -6
  103. package/esm/get-error-path/get-error-path.js.map +0 -1
  104. package/esm/validate-values/validate-list-values.js +0 -20
  105. package/esm/validate-values/validate-list-values.js.map +0 -1
  106. package/esm/validate-values/validate-values.js +0 -53
  107. package/esm/validate-values/validate-values.js.map +0 -1
@@ -8,7 +8,7 @@ function filterErrors(errors) {
8
8
  }
9
9
  return Object.keys(errors).reduce((acc, key) => {
10
10
  const errorValue = errors[key];
11
- if (errorValue !== void 0 && errorValue !== null) {
11
+ if (errorValue !== void 0 && errorValue !== null && errorValue !== false) {
12
12
  acc[key] = errorValue;
13
13
  }
14
14
  return acc;
@@ -1 +1 @@
1
- {"version":3,"file":"filter-errors.js","sources":["../../src/filter-errors/filter-errors.ts"],"sourcesContent":["import type { FormErrors } from '../types';\n\nexport function filterErrors(errors: FormErrors): FormErrors {\n if (errors === null || typeof errors !== 'object') {\n return {};\n }\n\n return Object.keys(errors).reduce<FormErrors>((acc, key) => {\n const errorValue = errors[key];\n\n if (errorValue !== undefined && errorValue !== null) {\n acc[key] = errorValue;\n }\n\n return acc;\n }, {});\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,YAAY,CAAC,MAAM,EAAE;AACrC,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrD,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAClD,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACnC,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,EAAE;AACtD,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;;;;"}
1
+ {"version":3,"file":"filter-errors.js","sources":["../../src/filter-errors/filter-errors.ts"],"sourcesContent":["import type { FormErrors } from '../types';\n\nexport function filterErrors(errors: FormErrors): FormErrors {\n if (errors === null || typeof errors !== 'object') {\n return {};\n }\n\n return Object.keys(errors).reduce<FormErrors>((acc, key) => {\n const errorValue = errors[key];\n\n if (errorValue !== undefined && errorValue !== null && errorValue !== false) {\n acc[key] = errorValue;\n }\n\n return acc;\n }, {});\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,YAAY,CAAC,MAAM,EAAE;AACrC,EAAE,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACrD,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;AAClD,IAAI,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACnC,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,EAAE;AAC9E,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;;;;"}
@@ -10,10 +10,12 @@ function getInputOnChange(setValue) {
10
10
  setValue(val);
11
11
  } else if (typeof val === "object" && "nativeEvent" in val) {
12
12
  const { currentTarget } = val;
13
- if (currentTarget.type === "checkbox") {
14
- setValue(currentTarget.checked);
15
- } else {
16
- setValue(currentTarget.value);
13
+ if (currentTarget instanceof HTMLInputElement) {
14
+ if (currentTarget.type === "checkbox") {
15
+ setValue(currentTarget.checked);
16
+ } else {
17
+ setValue(currentTarget.value);
18
+ }
17
19
  }
18
20
  } else {
19
21
  setValue(val);
@@ -1 +1 @@
1
- {"version":3,"file":"get-input-on-change.js","sources":["../../src/get-input-on-change/get-input-on-change.ts"],"sourcesContent":["export function getInputOnChange<T>(\n setValue: (value: null | undefined | T | ((current: T) => T)) => void\n) {\n return (val: null | undefined | T | React.ChangeEvent<any> | ((current: T) => T)) => {\n if (!val) {\n setValue(val as T);\n } else if (typeof val === 'function') {\n setValue(val);\n } else if (typeof val === 'object' && 'nativeEvent' in val) {\n const { currentTarget } = val;\n\n if (currentTarget.type === 'checkbox') {\n setValue(currentTarget.checked);\n } else {\n setValue(currentTarget.value);\n }\n } else {\n setValue(val);\n }\n };\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,gBAAgB,CAAC,QAAQ,EAAE;AAC3C,EAAE,OAAO,CAAC,GAAG,KAAK;AAClB,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;AAC1C,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,aAAa,IAAI,GAAG,EAAE;AAChE,MAAM,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;AACpC,MAAM,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7C,QAAQ,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACxC,OAAO,MAAM;AACb,QAAQ,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtC,OAAO;AACP,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"get-input-on-change.js","sources":["../../src/get-input-on-change/get-input-on-change.ts"],"sourcesContent":["export function getInputOnChange<Value>(\n setValue: (value: Value | ((current: Value) => Value)) => void\n) {\n return (val: Value | React.ChangeEvent<unknown> | ((current: Value) => Value)) => {\n if (!val) {\n setValue(val as Value);\n } else if (typeof val === 'function') {\n setValue(val);\n } else if (typeof val === 'object' && 'nativeEvent' in val) {\n const { currentTarget } = val;\n\n if (currentTarget instanceof HTMLInputElement) {\n if (currentTarget.type === 'checkbox') {\n setValue(currentTarget.checked as any);\n } else {\n setValue(currentTarget.value as any);\n }\n }\n } else {\n setValue(val);\n }\n };\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,gBAAgB,CAAC,QAAQ,EAAE;AAC3C,EAAE,OAAO,CAAC,GAAG,KAAK;AAClB,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;AAC1C,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,aAAa,IAAI,GAAG,EAAE;AAChE,MAAM,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC;AACpC,MAAM,IAAI,aAAa,YAAY,gBAAgB,EAAE;AACrD,QAAQ,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,UAAU,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC1C,SAAS,MAAM;AACf,UAAU,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACxC,SAAS;AACT,OAAO;AACP,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;AACpB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
package/cjs/index.js CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var formList = require('./form-list/form-list.js');
6
5
  var useForm = require('./use-form.js');
7
6
  var zodResolver = require('./resolvers/zod-resolver/zod-resolver.js');
8
7
  var yupResolver = require('./resolvers/yup-resolver/yup-resolver.js');
@@ -10,8 +9,6 @@ var joiResolver = require('./resolvers/joi-resolver/joi-resolver.js');
10
9
 
11
10
 
12
11
 
13
- exports.formList = formList.formList;
14
- exports.isFormList = formList.isFormList;
15
12
  exports.useForm = useForm.useForm;
16
13
  exports.zodResolver = zodResolver.zodResolver;
17
14
  exports.yupResolver = yupResolver.yupResolver;
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var getSplittedPath = require('./get-splitted-path.js');
6
+
7
+ function getPath(path, values) {
8
+ const splittedPath = getSplittedPath.getSplittedPath(path);
9
+ if (splittedPath.length === 0) {
10
+ return void 0;
11
+ }
12
+ let value = values[splittedPath[0]];
13
+ for (let i = 1; i < splittedPath.length; i += 1) {
14
+ if (value === void 0) {
15
+ break;
16
+ }
17
+ value = value[splittedPath[i]];
18
+ }
19
+ return value;
20
+ }
21
+
22
+ exports.getPath = getPath;
23
+ //# sourceMappingURL=get-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-path.js","sources":["../../src/paths/get-path.ts"],"sourcesContent":["import { getSplittedPath } from './get-splitted-path';\n\nexport function getPath(path: unknown, values: unknown): unknown {\n const splittedPath = getSplittedPath(path);\n\n if (splittedPath.length === 0) {\n return undefined;\n }\n\n let value = values[splittedPath[0]];\n for (let i = 1; i < splittedPath.length; i += 1) {\n if (value === undefined) {\n break;\n }\n\n value = value[splittedPath[i]];\n }\n\n return value;\n}\n"],"names":["getSplittedPath"],"mappings":";;;;;;AACO,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;AACtC,EAAE,MAAM,YAAY,GAAGA,+BAAe,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACnD,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE;AAC1B,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function getSplittedPath(path) {
6
+ if (typeof path !== "string") {
7
+ return [];
8
+ }
9
+ return path.split(".");
10
+ }
11
+
12
+ exports.getSplittedPath = getSplittedPath;
13
+ //# sourceMappingURL=get-splitted-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-splitted-path.js","sources":["../../src/paths/get-splitted-path.ts"],"sourcesContent":["export function getSplittedPath(path: unknown) {\n if (typeof path !== 'string') {\n return [];\n }\n\n return path.split('.');\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,eAAe,CAAC,IAAI,EAAE;AACtC,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,OAAO,EAAE,CAAC;AACd,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB;;;;"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var getPath = require('./get-path.js');
6
+ var setPath = require('./set-path.js');
7
+
8
+ function insertPath(path, value, index, values) {
9
+ const currentValue = getPath.getPath(path, values);
10
+ if (!Array.isArray(currentValue)) {
11
+ return values;
12
+ }
13
+ const cloned = [...currentValue];
14
+ cloned.splice(typeof index === "number" ? index : cloned.length, 0, value);
15
+ return setPath.setPath(path, cloned, values);
16
+ }
17
+
18
+ exports.insertPath = insertPath;
19
+ //# sourceMappingURL=insert-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-path.js","sources":["../../src/paths/insert-path.ts"],"sourcesContent":["import { getPath } from './get-path';\nimport { setPath } from './set-path';\n\nexport function insertPath<T>(path: unknown, value: unknown, index: number, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n const cloned = [...currentValue];\n cloned.splice(typeof index === 'number' ? index : cloned.length, 0, value);\n\n return setPath(path, cloned, values);\n}\n"],"names":["getPath","setPath"],"mappings":";;;;;;;AAEO,SAAS,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;AACvD,EAAE,MAAM,YAAY,GAAGA,eAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AACnC,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7E,EAAE,OAAOC,eAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC;;;;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var getPath = require('./get-path.js');
6
+ var setPath = require('./set-path.js');
7
+
8
+ function removePath(path, index, values) {
9
+ const currentValue = getPath.getPath(path, values);
10
+ if (!Array.isArray(currentValue)) {
11
+ return values;
12
+ }
13
+ return setPath.setPath(path, currentValue.filter((_, itemIndex) => itemIndex !== index), values);
14
+ }
15
+
16
+ exports.removePath = removePath;
17
+ //# sourceMappingURL=remove-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-path.js","sources":["../../src/paths/remove-path.ts"],"sourcesContent":["import { getPath } from './get-path';\nimport { setPath } from './set-path';\n\nexport function removePath<T>(path: unknown, index: number, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n return setPath(\n path,\n currentValue.filter((_, itemIndex) => itemIndex !== index),\n values\n );\n}\n"],"names":["getPath","setPath"],"mappings":";;;;;;;AAEO,SAAS,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAChD,EAAE,MAAM,YAAY,GAAGA,eAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,OAAOC,eAAO,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3F;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var getPath = require('./get-path.js');
6
+ var setPath = require('./set-path.js');
7
+
8
+ function reorderPath(path, { from, to }, values) {
9
+ const currentValue = getPath.getPath(path, values);
10
+ if (!Array.isArray(currentValue)) {
11
+ return values;
12
+ }
13
+ const cloned = [...currentValue];
14
+ const item = currentValue[from];
15
+ cloned.splice(from, 1);
16
+ cloned.splice(to, 0, item);
17
+ return setPath.setPath(path, cloned, values);
18
+ }
19
+
20
+ exports.reorderPath = reorderPath;
21
+ //# sourceMappingURL=reorder-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reorder-path.js","sources":["../../src/paths/reorder-path.ts"],"sourcesContent":["import { getPath } from './get-path';\nimport { setPath } from './set-path';\nimport { ReorderPayload } from '../types';\n\nexport function reorderPath<T>(path: unknown, { from, to }: ReorderPayload, values: T) {\n const currentValue = getPath(path, values);\n\n if (!Array.isArray(currentValue)) {\n return values;\n }\n\n const cloned = [...currentValue];\n const item = currentValue[from];\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n\n return setPath(path, cloned, values);\n}\n"],"names":["getPath","setPath"],"mappings":";;;;;;;AAEO,SAAS,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;AACxD,EAAE,MAAM,YAAY,GAAGA,eAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7C,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AACnC,EAAE,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7B,EAAE,OAAOC,eAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC;;;;"}
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var clone = require('lodash.clonedeep');
6
+ var getSplittedPath = require('./get-splitted-path.js');
7
+
8
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e['default'] : e; }
9
+
10
+ var clone__default = /*#__PURE__*/_interopDefaultLegacy(clone);
11
+
12
+ function setPath(path, value, values) {
13
+ const splittedPath = getSplittedPath.getSplittedPath(path);
14
+ if (splittedPath.length === 0) {
15
+ return values;
16
+ }
17
+ const cloned = clone__default(values);
18
+ if (splittedPath.length === 1) {
19
+ cloned[splittedPath[0]] = value;
20
+ return cloned;
21
+ }
22
+ let val = cloned[splittedPath[0]];
23
+ for (let i = 1; i < splittedPath.length - 1; i += 1) {
24
+ if (val === void 0) {
25
+ return cloned;
26
+ }
27
+ val = val[splittedPath[i]];
28
+ }
29
+ val[splittedPath[splittedPath.length - 1]] = value;
30
+ return cloned;
31
+ }
32
+
33
+ exports.setPath = setPath;
34
+ //# sourceMappingURL=set-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-path.js","sources":["../../src/paths/set-path.ts"],"sourcesContent":["import clone from 'lodash.clonedeep';\nimport { getSplittedPath } from './get-splitted-path';\n\nexport function setPath<T>(path: unknown, value: unknown, values: T) {\n const splittedPath = getSplittedPath(path);\n\n if (splittedPath.length === 0) {\n return values;\n }\n\n const cloned = clone(values);\n\n if (splittedPath.length === 1) {\n cloned[splittedPath[0]] = value;\n return cloned;\n }\n\n let val = cloned[splittedPath[0]];\n\n for (let i = 1; i < splittedPath.length - 1; i += 1) {\n if (val === undefined) {\n return cloned;\n }\n\n val = val[splittedPath[i]];\n }\n\n val[splittedPath[splittedPath.length - 1]] = value;\n\n return cloned;\n}\n"],"names":["getSplittedPath","clone"],"mappings":";;;;;;;;;;;AAEO,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AAC7C,EAAE,MAAM,YAAY,GAAGA,+BAAe,CAAC,IAAI,CAAC,CAAC;AAC7C,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,MAAM,MAAM,GAAGC,cAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,EAAE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACpC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACvD,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE;AACxB,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,IAAI,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,GAAG;AACH,EAAE,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AACrD,EAAE,OAAO,MAAM,CAAC;AAChB;;;;"}
@@ -12,7 +12,7 @@ function yupResolver(schema) {
12
12
  const yupError = _yupError;
13
13
  const results = {};
14
14
  yupError.inner.forEach((error) => {
15
- results[error.path.replace("[", ".").replace("]", "")] = error.message;
15
+ results[error.path.replaceAll("[", ".").replaceAll("]", "")] = error.message;
16
16
  });
17
17
  return results;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"yup-resolver.js","sources":["../../../src/resolvers/yup-resolver/yup-resolver.ts"],"sourcesContent":["import type { FormErrors } from '../../types';\n\ninterface YupError {\n path: string;\n message: string;\n}\n\ninterface YupValidationResult {\n inner: YupError[];\n}\n\ninterface YupSchema {\n validateSync(values: Record<string, any>, options: { abortEarly: boolean }): void;\n}\n\nexport function yupResolver(schema: any) {\n const _schema: YupSchema = schema;\n\n return (values: Record<string, any>): FormErrors => {\n try {\n _schema.validateSync(values, { abortEarly: false });\n return {};\n } catch (_yupError) {\n const yupError: YupValidationResult = _yupError;\n const results = {};\n\n yupError.inner.forEach((error) => {\n results[error.path.replace('[', '.').replace(']', '')] = error.message;\n });\n\n return results;\n }\n };\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,WAAW,CAAC,MAAM,EAAE;AACpC,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;AACzB,EAAE,OAAO,CAAC,MAAM,KAAK;AACrB,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC,OAAO,SAAS,EAAE;AACxB,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AACjC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACxC,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AAC/E,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"yup-resolver.js","sources":["../../../src/resolvers/yup-resolver/yup-resolver.ts"],"sourcesContent":["import type { FormErrors } from '../../types';\n\ninterface YupError {\n path: string;\n message: string;\n}\n\ninterface YupValidationResult {\n inner: YupError[];\n}\n\ninterface YupSchema {\n validateSync(values: Record<string, any>, options: { abortEarly: boolean }): void;\n}\n\nexport function yupResolver(schema: any) {\n const _schema: YupSchema = schema;\n\n return (values: Record<string, any>): FormErrors => {\n try {\n _schema.validateSync(values, { abortEarly: false });\n return {};\n } catch (_yupError) {\n const yupError: YupValidationResult = _yupError;\n const results = {};\n\n yupError.inner.forEach((error) => {\n results[error.path.replaceAll('[', '.').replaceAll(']', '')] = error.message;\n });\n\n return results;\n }\n };\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,WAAW,CAAC,MAAM,EAAE;AACpC,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC;AACzB,EAAE,OAAO,CAAC,MAAM,KAAK;AACrB,IAAI,IAAI;AACR,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK,CAAC,OAAO,SAAS,EAAE;AACxB,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AACjC,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACxC,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;AACrF,OAAO,CAAC,CAAC;AACT,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
package/cjs/use-form.js CHANGED
@@ -3,11 +3,16 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var react = require('react');
6
- var formList = require('./form-list/form-list.js');
7
- var validateValues = require('./validate-values/validate-values.js');
8
6
  var filterErrors = require('./filter-errors/filter-errors.js');
7
+ var shouldValidateOnChange = require('./validate/should-validate-on-change.js');
8
+ var setPath = require('./paths/set-path.js');
9
+ var validateFieldValue = require('./validate/validate-field-value.js');
10
+ var reorderPath = require('./paths/reorder-path.js');
11
+ var removePath = require('./paths/remove-path.js');
12
+ var insertPath = require('./paths/insert-path.js');
13
+ var validateValues = require('./validate/validate-values.js');
14
+ var getPath = require('./paths/get-path.js');
9
15
  var getInputOnChange = require('./get-input-on-change/get-input-on-change.js');
10
- var getErrorPath = require('./get-error-path/get-error-path.js');
11
16
 
12
17
  var __defProp = Object.defineProperty;
13
18
  var __defProps = Object.defineProperties;
@@ -29,117 +34,99 @@ var __spreadValues = (a, b) => {
29
34
  };
30
35
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
31
36
  function useForm({
32
- initialValues,
33
- initialErrors,
34
- validate: rules,
35
- schema
36
- }) {
37
- const [errors, setErrors] = react.useState(filterErrors.filterErrors(initialErrors));
38
- const [values, setValues] = react.useState(initialValues);
39
- const clearErrors = () => setErrors({});
40
- const setFieldError = (field, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [field]: error }));
41
- const clearFieldError = (field) => setErrors((current) => {
37
+ initialValues = {},
38
+ initialErrors = {},
39
+ clearInputErrorOnChange = true,
40
+ validateInputOnChange = false,
41
+ validate: rules
42
+ } = {}) {
43
+ const [values, _setValues] = react.useState(initialValues);
44
+ const [errors, _setErrors] = react.useState(filterErrors.filterErrors(initialErrors));
45
+ const setErrors = react.useCallback((errs) => _setErrors((current) => filterErrors.filterErrors(typeof errs === "function" ? errs(current) : errs)), []);
46
+ const clearErrors = react.useCallback(() => _setErrors({}), []);
47
+ const reset = react.useCallback(() => {
48
+ _setValues(initialValues);
49
+ clearErrors();
50
+ }, []);
51
+ const setFieldError = react.useCallback((path, error) => setErrors((current) => __spreadProps(__spreadValues({}, current), { [path]: error })), []);
52
+ const clearFieldError = react.useCallback((path) => setErrors((current) => {
53
+ if (typeof path !== "string") {
54
+ return current;
55
+ }
42
56
  const clone = __spreadValues({}, current);
43
- delete clone[field];
57
+ delete clone[path];
44
58
  return clone;
45
- });
46
- const setFieldValue = (field, value, errorPath) => {
47
- setValues((currentValues) => __spreadProps(__spreadValues({}, currentValues), { [field]: value }));
48
- clearFieldError(errorPath || field);
49
- };
50
- const setListItem = (field, index, value, errorPath) => {
51
- const list = values[field];
52
- if (formList.isFormList(list) && list[index] !== void 0) {
53
- const cloned = [...list];
54
- cloned[index] = value;
55
- setFieldValue(field, formList.formList(cloned), errorPath);
56
- }
57
- };
58
- const removeListItem = (field, indices) => {
59
- const list = values[field];
60
- if (formList.isFormList(list)) {
61
- setFieldValue(field, formList.formList(list.filter((_, index) => Array.isArray(indices) ? !indices.includes(index) : indices !== index)));
62
- }
63
- };
64
- const addListItem = (field, payload) => {
65
- const list = values[field];
66
- if (formList.isFormList(list)) {
67
- setFieldValue(field, formList.formList([...list, payload]));
68
- }
69
- };
70
- const reorderListItem = (field, { from, to }) => {
71
- const list = values[field];
72
- if (formList.isFormList(list) && list[from] !== void 0 && list[to] !== void 0) {
73
- const cloned = [...list];
74
- const item = list[from];
75
- cloned.splice(from, 1);
76
- cloned.splice(to, 0, item);
77
- setFieldValue(field, formList.formList(cloned));
78
- }
79
- };
80
- const validate = () => {
81
- const results = validateValues.validateValues(schema || rules, values);
82
- setErrors(results.errors);
59
+ }), []);
60
+ const setFieldValue = react.useCallback((path, value) => {
61
+ const shouldValidate = shouldValidateOnChange.shouldValidateOnChange(path, validateInputOnChange);
62
+ _setValues((current) => {
63
+ const result = setPath.setPath(path, value, current);
64
+ if (shouldValidate) {
65
+ const validationResults = validateFieldValue.validateFieldValue(path, rules, result);
66
+ validationResults.hasError ? setFieldError(path, validationResults.error) : clearFieldError(path);
67
+ }
68
+ return result;
69
+ });
70
+ !shouldValidate && clearInputErrorOnChange && setFieldError(path, null);
71
+ }, []);
72
+ const setValues = react.useCallback((payload) => {
73
+ _setValues(payload);
74
+ clearInputErrorOnChange && clearErrors();
75
+ }, []);
76
+ const reorderListItem = react.useCallback((path, payload) => _setValues((current) => reorderPath.reorderPath(path, payload, current)), []);
77
+ const removeListItem = react.useCallback((path, index) => _setValues((current) => removePath.removePath(path, index, current)), []);
78
+ const insertListItem = react.useCallback((path, item, index) => _setValues((current) => insertPath.insertPath(path, item, index, current)), []);
79
+ const validate = react.useCallback(() => {
80
+ const results = validateValues.validateValues(rules, values);
81
+ _setErrors(results.errors);
83
82
  return results;
84
- };
85
- const validateField = (field) => {
86
- const results = validateValues.validateFieldValue(field, schema || rules, values);
87
- results.hasError ? setFieldError(field, results.error) : clearFieldError(field);
83
+ }, [values]);
84
+ const validateField = react.useCallback((path) => {
85
+ const results = validateFieldValue.validateFieldValue(path, rules, values);
86
+ results.hasError ? setFieldError(path, results.error) : clearFieldError(path);
88
87
  return results;
88
+ }, [values]);
89
+ const getInputProps = (path, { type = "input", withError = type === "input" } = {}) => {
90
+ const onChange = getInputOnChange.getInputOnChange((value) => setFieldValue(path, value));
91
+ const withOptionalError = (payload) => {
92
+ if (withError) {
93
+ payload.error = errors[path];
94
+ }
95
+ return payload;
96
+ };
97
+ return type === "checkbox" ? withOptionalError({ checked: getPath.getPath(path, values), onChange }) : withOptionalError({ value: getPath.getPath(path, values), onChange });
89
98
  };
90
- const onSubmit = (handleSubmit) => (event) => {
99
+ const onSubmit = (handleSubmit, handleValidationFailure) => (event) => {
91
100
  event.preventDefault();
92
101
  const results = validate();
93
- !results.hasErrors && handleSubmit(values, event);
94
- };
95
- const reset = () => {
96
- setValues(initialValues);
97
- clearErrors();
98
- };
99
- const getInputProps = (field, { type, withError = true } = {}) => {
100
- const value = values[field];
101
- const onChange = getInputOnChange.getInputOnChange((val) => setFieldValue(field, val));
102
- const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
103
- if (withError && errors[field]) {
104
- payload.error = errors[field];
102
+ if (results.hasErrors) {
103
+ handleValidationFailure == null ? void 0 : handleValidationFailure(results.errors, values, event);
104
+ } else {
105
+ handleSubmit(values, event);
105
106
  }
106
- return payload;
107
- };
108
- const getListInputProps = (field, index, listField, { type, withError = true } = {}) => {
109
- const list = values[field];
110
- if (formList.isFormList(list) && list[index] && listField in list[index]) {
111
- const listValue = list[index];
112
- const value = listValue[listField];
113
- const listItemErrorPath = getErrorPath.getErrorPath([field, index, listField]);
114
- const onChange = getInputOnChange.getInputOnChange((val) => setListItem(field, index, __spreadProps(__spreadValues({}, listValue), { [listField]: val }), listItemErrorPath));
115
- const payload = type === "checkbox" ? { checked: value, onChange } : { value, onChange };
116
- const error = errors[getErrorPath.getErrorPath([field, index, listField])];
117
- if (withError && error) {
118
- payload.error = error;
119
- }
120
- return payload;
121
- }
122
- return {};
123
107
  };
108
+ const onReset = react.useCallback((event) => {
109
+ event.preventDefault();
110
+ reset();
111
+ }, []);
124
112
  return {
125
113
  values,
126
- setValues,
127
- setFieldValue,
128
114
  errors,
115
+ setValues,
129
116
  setErrors,
130
- clearErrors,
131
- clearFieldError,
117
+ setFieldValue,
132
118
  setFieldError,
133
- setListItem,
134
- removeListItem,
135
- addListItem,
136
- reorderListItem,
119
+ clearFieldError,
120
+ clearErrors,
121
+ reset,
137
122
  validate,
138
123
  validateField,
139
- onSubmit,
140
- reset,
124
+ reorderListItem,
125
+ removeListItem,
126
+ insertListItem,
141
127
  getInputProps,
142
- getListInputProps
128
+ onSubmit,
129
+ onReset
143
130
  };
144
131
  }
145
132
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useState } from 'react';\nimport { formList, isFormList, FormList } from './form-list/form-list';\nimport { validateValues, validateFieldValue } from './validate-values/validate-values';\nimport { filterErrors } from './filter-errors/filter-errors';\nimport { getInputOnChange } from './get-input-on-change/get-input-on-change';\nimport { getErrorPath } from './get-error-path/get-error-path';\nimport type {\n FormErrors,\n FormRules,\n FormValidationResult,\n FormFieldValidationResult,\n GetInputProps,\n GetInputPropsFieldType,\n} from './types';\n\nexport interface UseFormInput<T> {\n initialValues: T;\n initialErrors?: FormErrors;\n validate?: FormRules<T>;\n schema?: (values: Record<string, any>) => FormErrors;\n}\n\nexport interface UseFormReturnType<T> {\n values: T;\n setValues: React.Dispatch<React.SetStateAction<T>>;\n setFieldValue: <K extends keyof T, V extends T[K]>(field: K, value: V) => void;\n errors: FormErrors;\n setErrors: React.Dispatch<React.SetStateAction<FormErrors>>;\n setFieldError: <K extends keyof T>(field: K, error: React.ReactNode) => void;\n clearFieldError: <K extends keyof T>(field: K) => void;\n clearErrors(): void;\n setListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V extends FormList<infer U> ? U : never\n ) => void;\n addListItem: <K extends keyof T, V extends T[K]>(\n field: K,\n payload: V extends FormList<infer U> ? U : never\n ) => void;\n removeListItem: <K extends keyof T>(field: K, indices: number[] | number) => void;\n reorderListItem: <K extends keyof T>(field: K, payload: { from: number; to: number }) => void;\n validate(): FormValidationResult;\n validateField: (field: string) => FormFieldValidationResult;\n onSubmit(\n handleSubmit: (values: T, event: React.FormEvent) => void\n ): (event?: React.FormEvent) => void;\n reset(): void;\n getInputProps: <K extends keyof T, L extends GetInputPropsFieldType = 'input'>(\n field: K,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n\n getListInputProps: <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: U extends FormList<infer V> ? keyof V : never,\n options?: { type?: L; withError?: boolean }\n ) => GetInputProps<L>;\n}\n\nexport function useForm<T extends { [key: string]: any }>({\n initialValues,\n initialErrors,\n validate: rules,\n schema,\n}: UseFormInput<T>): UseFormReturnType<T> {\n const [errors, setErrors] = useState(filterErrors(initialErrors));\n const [values, setValues] = useState(initialValues);\n\n const clearErrors = () => setErrors({});\n const setFieldError = (field: keyof T, error: React.ReactNode) =>\n setErrors((current) => ({ ...current, [field]: error }));\n\n const clearFieldError = (field: keyof T) =>\n setErrors((current) => {\n const clone: any = { ...current };\n delete clone[field];\n return clone;\n });\n\n const setFieldValue = <K extends keyof T, V extends T[K]>(\n field: K,\n value: V,\n errorPath?: string\n ) => {\n setValues((currentValues) => ({ ...currentValues, [field]: value }));\n clearFieldError(errorPath || field);\n };\n\n const setListItem = <K extends keyof T, V extends T[K]>(\n field: K,\n index: number,\n value: V[K][number],\n errorPath?: string\n ) => {\n const list = values[field];\n if (isFormList(list) && list[index] !== undefined) {\n const cloned = [...list];\n cloned[index] = value;\n setFieldValue(field, formList(cloned) as any, errorPath);\n }\n };\n\n const removeListItem = <K extends keyof T>(field: K, indices: number[] | number) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(\n field,\n formList(\n list.filter((_: any, index: number) =>\n Array.isArray(indices) ? !indices.includes(index) : indices !== index\n )\n ) as any\n );\n }\n };\n\n const addListItem = <K extends keyof T, V extends T[K]>(field: K, payload: V[number]) => {\n const list = values[field];\n\n if (isFormList(list)) {\n setFieldValue(field, formList([...list, payload]) as any);\n }\n };\n\n const reorderListItem = <K extends keyof T>(\n field: K,\n { from, to }: { from: number; to: number }\n ) => {\n const list = values[field];\n\n if (isFormList(list) && list[from] !== undefined && list[to] !== undefined) {\n const cloned = [...list];\n const item = list[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n setFieldValue(field, formList(cloned) as any);\n }\n };\n\n const validate = () => {\n const results = validateValues(schema || rules, values);\n setErrors(results.errors);\n return results;\n };\n\n const validateField = (field: string) => {\n const results = validateFieldValue(field, schema || rules, values);\n results.hasError ? setFieldError(field, results.error) : clearFieldError(field);\n return results;\n };\n\n const onSubmit =\n (handleSubmit: (values: T, event: React.FormEvent) => void) => (event: React.FormEvent) => {\n event.preventDefault();\n const results = validate();\n !results.hasErrors && handleSubmit(values, event);\n };\n\n const reset = () => {\n setValues(initialValues);\n clearErrors();\n };\n\n const getInputProps = <\n K extends keyof T,\n U extends T[K],\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const value = values[field];\n const onChange = getInputOnChange<U>((val: U) => setFieldValue(field, val)) as any;\n\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n\n if (withError && errors[field as any]) {\n payload.error = errors[field as any];\n }\n\n return payload as any;\n };\n\n const getListInputProps = <\n K extends keyof T,\n U extends T[K][number],\n LK extends keyof U,\n L extends GetInputPropsFieldType = 'input'\n >(\n field: K,\n index: number,\n listField: LK,\n { type, withError = true }: { type?: L; withError?: boolean } = {}\n ): GetInputProps<L> => {\n const list = values[field];\n\n if (isFormList(list) && list[index] && listField in list[index]) {\n const listValue = list[index];\n const value = listValue[listField];\n const listItemErrorPath = getErrorPath([field, index, listField]);\n const onChange = getInputOnChange<U[LK]>((val: U[LK]) =>\n setListItem(field, index, { ...listValue, [listField]: val }, listItemErrorPath)\n ) as any;\n const payload: any = type === 'checkbox' ? { checked: value, onChange } : { value, onChange };\n const error = errors[getErrorPath([field, index, listField])];\n\n if (withError && error) {\n payload.error = error;\n }\n\n return payload;\n }\n\n return {} as any;\n };\n\n return {\n values,\n setValues,\n setFieldValue,\n errors,\n setErrors,\n clearErrors,\n clearFieldError,\n setFieldError,\n setListItem,\n removeListItem,\n addListItem,\n reorderListItem,\n validate,\n validateField,\n onSubmit,\n reset,\n getInputProps,\n getListInputProps,\n };\n}\n"],"names":["useState","filterErrors","isFormList","formList","validateValues","validateFieldValue","getInputOnChange","getErrorPath"],"mappings":"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"}
1
+ {"version":3,"file":"use-form.js","sources":["../src/use-form.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { getInputOnChange } from './get-input-on-change';\nimport { setPath, reorderPath, insertPath, getPath, removePath } from './paths';\nimport { filterErrors } from './filter-errors';\nimport { validateValues, validateFieldValue, shouldValidateOnChange } from './validate';\nimport {\n UseFormReturnType,\n UseFormInput,\n SetErrors,\n ClearErrors,\n Reset,\n SetFieldError,\n SetFieldValue,\n SetValues,\n ReorderListItem,\n RemoveListItem,\n InsertListItem,\n ClearFieldError,\n Validate,\n ValidateField,\n GetInputProps,\n OnSubmit,\n OnReset,\n} from './types';\n\nexport function useForm<Values = Record<string, unknown>>({\n initialValues = {} as Values,\n initialErrors = {},\n clearInputErrorOnChange = true,\n validateInputOnChange = false,\n validate: rules,\n}: UseFormInput<Values> = {}): UseFormReturnType<Values> {\n const [values, _setValues] = useState(initialValues);\n const [errors, _setErrors] = useState(filterErrors(initialErrors));\n\n const setErrors: SetErrors = useCallback(\n (errs) =>\n _setErrors((current) => filterErrors(typeof errs === 'function' ? errs(current) : errs)),\n []\n );\n\n const clearErrors: ClearErrors = useCallback(() => _setErrors({}), []);\n const reset: Reset = useCallback(() => {\n _setValues(initialValues);\n clearErrors();\n }, []);\n\n const setFieldError: SetFieldError<Values> = useCallback(\n (path, error) => setErrors((current) => ({ ...current, [path]: error })),\n []\n );\n\n const clearFieldError: ClearFieldError = useCallback(\n (path) =>\n setErrors((current) => {\n if (typeof path !== 'string') {\n return current;\n }\n\n const clone = { ...current };\n delete clone[path];\n return clone;\n }),\n []\n );\n\n const setFieldValue: SetFieldValue<Values> = useCallback((path, value) => {\n const shouldValidate = shouldValidateOnChange(path, validateInputOnChange);\n _setValues((current) => {\n const result = setPath(path, value, current);\n if (shouldValidate) {\n const validationResults = validateFieldValue(path, rules, result);\n validationResults.hasError\n ? setFieldError(path, validationResults.error)\n : clearFieldError(path);\n }\n return result;\n });\n\n !shouldValidate && clearInputErrorOnChange && setFieldError(path, null);\n }, []);\n\n const setValues: SetValues<Values> = useCallback((payload) => {\n _setValues(payload);\n clearInputErrorOnChange && clearErrors();\n }, []);\n\n const reorderListItem: ReorderListItem<Values> = useCallback(\n (path, payload) => _setValues((current) => reorderPath(path, payload, current)),\n []\n );\n\n const removeListItem: RemoveListItem<Values> = useCallback(\n (path, index) => _setValues((current) => removePath(path, index, current)),\n []\n );\n\n const insertListItem: InsertListItem<Values> = useCallback(\n (path, item, index) => _setValues((current) => insertPath(path, item, index, current)),\n []\n );\n\n const validate: Validate = useCallback(() => {\n const results = validateValues(rules, values);\n _setErrors(results.errors);\n return results;\n }, [values]);\n\n const validateField: ValidateField<Values> = useCallback(\n (path) => {\n const results = validateFieldValue(path, rules, values);\n results.hasError ? setFieldError(path, results.error) : clearFieldError(path);\n return results;\n },\n [values]\n );\n\n const getInputProps: GetInputProps<Values> = (\n path,\n { type = 'input', withError = type === 'input' } = {}\n ) => {\n const onChange = getInputOnChange((value) => setFieldValue(path, value as any));\n const withOptionalError = (payload: Record<string, unknown>) => {\n if (withError) {\n // eslint-disable-next-line no-param-reassign\n payload.error = errors[path];\n }\n return payload;\n };\n\n return type === 'checkbox'\n ? withOptionalError({ checked: getPath(path, values), onChange })\n : withOptionalError({ value: getPath(path, values), onChange });\n };\n\n const onSubmit: OnSubmit<Values> = (handleSubmit, handleValidationFailure) => (event) => {\n event.preventDefault();\n const results = validate();\n\n if (results.hasErrors) {\n handleValidationFailure?.(results.errors, values, event);\n } else {\n handleSubmit(values, event);\n }\n };\n\n const onReset: OnReset = useCallback((event) => {\n event.preventDefault();\n reset();\n }, []);\n\n return {\n values,\n errors,\n setValues,\n setErrors,\n setFieldValue,\n setFieldError,\n clearFieldError,\n clearErrors,\n reset,\n validate,\n validateField,\n reorderListItem,\n removeListItem,\n insertListItem,\n getInputProps,\n onSubmit,\n onReset,\n };\n}\n"],"names":["useState","filterErrors","useCallback","shouldValidateOnChange","setPath","validateFieldValue","reorderPath","removePath","insertPath","validateValues","getInputOnChange","getPath"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function shouldValidateOnChange(path, validateInputOnChange) {
6
+ if (!validateInputOnChange) {
7
+ return false;
8
+ }
9
+ if (typeof validateInputOnChange === "boolean") {
10
+ return validateInputOnChange;
11
+ }
12
+ if (Array.isArray(validateInputOnChange)) {
13
+ return validateInputOnChange.includes(path);
14
+ }
15
+ return false;
16
+ }
17
+
18
+ exports.shouldValidateOnChange = shouldValidateOnChange;
19
+ //# sourceMappingURL=should-validate-on-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"should-validate-on-change.js","sources":["../../src/validate/should-validate-on-change.ts"],"sourcesContent":["export function shouldValidateOnChange(path: unknown, validateInputOnChange: boolean | unknown[]) {\n if (!validateInputOnChange) {\n return false;\n }\n\n if (typeof validateInputOnChange === 'boolean') {\n return validateInputOnChange;\n }\n\n if (Array.isArray(validateInputOnChange)) {\n return validateInputOnChange.includes(path);\n }\n\n return false;\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,EAAE;AACpE,EAAE,IAAI,CAAC,qBAAqB,EAAE;AAC9B,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,IAAI,OAAO,qBAAqB,KAAK,SAAS,EAAE;AAClD,IAAI,OAAO,qBAAqB,CAAC;AACjC,GAAG;AACH,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;AAC5C,IAAI,OAAO,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChD,GAAG;AACH,EAAE,OAAO,KAAK,CAAC;AACf;;;;"}
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var validateValues = require('./validate-values.js');
6
+
7
+ function validateFieldValue(path, rules, values) {
8
+ if (typeof path !== "string") {
9
+ return { hasError: false, error: null };
10
+ }
11
+ const results = validateValues.validateValues(rules, values);
12
+ const hasError = path in results.errors;
13
+ return { hasError, error: hasError ? results.errors[path] : null };
14
+ }
15
+
16
+ exports.validateFieldValue = validateFieldValue;
17
+ //# sourceMappingURL=validate-field-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-field-value.js","sources":["../../src/validate/validate-field-value.ts"],"sourcesContent":["import { FormValidateInput, FormFieldValidationResult } from '../types';\nimport { validateValues } from './validate-values';\n\nexport function validateFieldValue<T>(\n path: unknown,\n rules: FormValidateInput<T>,\n values: T\n): FormFieldValidationResult {\n if (typeof path !== 'string') {\n return { hasError: false, error: null };\n }\n\n const results = validateValues(rules, values);\n const hasError = path in results.errors;\n return { hasError, error: hasError ? results.errors[path] : null };\n}\n"],"names":["validateValues"],"mappings":";;;;;;AACO,SAAS,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;AACxD,EAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC5C,GAAG;AACH,EAAE,MAAM,OAAO,GAAGA,6BAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,EAAE,MAAM,QAAQ,GAAG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;AAC1C,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;AACrE;;;;"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var filterErrors = require('../filter-errors/filter-errors.js');
6
+ var getPath = require('../paths/get-path.js');
7
+
8
+ function getValidationResults(errors) {
9
+ const filteredErrors = filterErrors.filterErrors(errors);
10
+ return { hasErrors: Object.keys(filteredErrors).length > 0, errors: filteredErrors };
11
+ }
12
+ function validateRulesRecord(rules, values, path = "", errors = {}) {
13
+ if (typeof rules !== "object" || rules === null) {
14
+ return errors;
15
+ }
16
+ return Object.keys(rules).reduce((acc, ruleKey) => {
17
+ const rule = rules[ruleKey];
18
+ const rulePath = `${path === "" ? "" : `${path}.`}${ruleKey}`;
19
+ const value = getPath.getPath(rulePath, values);
20
+ if (typeof rule === "function") {
21
+ acc[rulePath] = rule(value, values);
22
+ }
23
+ if (typeof rule === "object" && Array.isArray(value)) {
24
+ value.forEach((_item, index) => validateRulesRecord(rule, values, `${rulePath}.${index}`, acc));
25
+ }
26
+ if (typeof rule === "object" && typeof value === "object" && value !== null) {
27
+ validateRulesRecord(rule, values, rulePath, acc);
28
+ }
29
+ return acc;
30
+ }, errors);
31
+ }
32
+ function validateValues(validate, values) {
33
+ if (typeof validate === "function") {
34
+ return getValidationResults(validate(values));
35
+ }
36
+ return getValidationResults(validateRulesRecord(validate, values));
37
+ }
38
+
39
+ exports.validateValues = validateValues;
40
+ //# sourceMappingURL=validate-values.js.map