@algolia/satellite 1.0.0 → 1.1.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.
Files changed (134) hide show
  1. package/dist/cjs/AutoComplete/AutoComplete.d.ts +1 -1
  2. package/dist/cjs/AutoComplete/AutoComplete.js +49 -26
  3. package/dist/cjs/AutoComplete/AutoComplete.tailwind.js +9 -1
  4. package/dist/cjs/AutoComplete/types.d.ts +1 -0
  5. package/dist/cjs/Checkbox/Checkbox.d.ts +1 -1
  6. package/dist/cjs/Checkbox/Checkbox.js +21 -13
  7. package/dist/cjs/Checkbox/Checkbox.tailwind.js +8 -2
  8. package/dist/cjs/DatePicker/DatePicker/DatePicker.d.ts +4 -2
  9. package/dist/cjs/DatePicker/DatePicker/DatePicker.js +18 -7
  10. package/dist/cjs/DatePicker/components/Display.d.ts +3 -3
  11. package/dist/cjs/DatePicker/components/Display.js +16 -5
  12. package/dist/cjs/Dropzone/Dropzone.d.ts +4 -2
  13. package/dist/cjs/Dropzone/Dropzone.js +23 -12
  14. package/dist/cjs/Field/Field.d.ts +1 -0
  15. package/dist/cjs/Field/Field.js +63 -11
  16. package/dist/cjs/Field/FieldContext.d.ts +3 -0
  17. package/dist/cjs/Field/useField.d.ts +4 -1
  18. package/dist/cjs/Field/useField.js +17 -1
  19. package/dist/cjs/Form/Form.d.ts +16 -0
  20. package/dist/cjs/Form/Form.js +140 -0
  21. package/dist/cjs/Form/FormContext.d.ts +13 -0
  22. package/dist/cjs/Form/FormContext.js +8 -0
  23. package/dist/cjs/Form/index.d.ts +3 -0
  24. package/dist/cjs/Form/index.js +27 -0
  25. package/dist/cjs/Form/stories/AsynchronousValidation.js +396 -0
  26. package/dist/cjs/Form/stories/Complex.js +928 -0
  27. package/dist/cjs/Form/stories/DependentFieldsValidation.js +249 -0
  28. package/dist/cjs/Form/stories/DirtyFields.js +339 -0
  29. package/dist/cjs/Form/stories/DynamicFieldsValidation.js +425 -0
  30. package/dist/cjs/Form/stories/FieldArrays.js +549 -0
  31. package/dist/cjs/Form/stories/ValidationStrategies.js +455 -0
  32. package/dist/cjs/Form/stories/utils/useFormikAutoFocusOnError.js +22 -0
  33. package/dist/cjs/Form/useForm.d.ts +1 -0
  34. package/dist/cjs/Form/useForm.js +11 -0
  35. package/dist/cjs/Input/Input.js +22 -9
  36. package/dist/cjs/Input/Input.tailwind.js +7 -2
  37. package/dist/cjs/Pagination/DotPagination/DotPagination.d.ts +1 -1
  38. package/dist/cjs/RadioGroup/RadioButton.d.ts +1 -1
  39. package/dist/cjs/RadioGroup/RadioButton.js +16 -3
  40. package/dist/cjs/RadioGroup/RadioButton.tailwind.js +23 -0
  41. package/dist/cjs/RadioGroup/RadioGroup.d.ts +7 -5
  42. package/dist/cjs/RadioGroup/RadioGroup.js +78 -16
  43. package/dist/cjs/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
  44. package/dist/cjs/RangeSlider/RangeSlider.d.ts +2 -3
  45. package/dist/cjs/RangeSlider/RangeSlider.js +27 -10
  46. package/dist/cjs/Satellite/locale.d.ts +2 -0
  47. package/dist/cjs/Select/Select.js +39 -6
  48. package/dist/cjs/Select/Select.tailwind.js +19 -0
  49. package/dist/cjs/Stepper/Step.js +2 -2
  50. package/dist/cjs/Switch/Switch.js +2 -2
  51. package/dist/cjs/Switch/SwitchOption.js +3 -3
  52. package/dist/cjs/Tables/DataTable/DataTable.d.ts +1 -1
  53. package/dist/cjs/Tag/Tag.d.ts +1 -1
  54. package/dist/cjs/TextArea/TextArea.d.ts +1 -0
  55. package/dist/cjs/TextArea/TextArea.js +47 -8
  56. package/dist/cjs/TextArea/TextArea.tailwind.js +41 -4
  57. package/dist/cjs/Toggle/Toggle.d.ts +1 -1
  58. package/dist/cjs/Toggle/Toggle.js +23 -6
  59. package/dist/cjs/Toggle/Toggle.tailwind.js +9 -0
  60. package/dist/cjs/Tooltip/Tooltip.d.ts +1 -1
  61. package/dist/cjs/index.d.ts +1 -0
  62. package/dist/cjs/index.js +12 -0
  63. package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
  64. package/dist/cjs/utils/mergeRefs.d.ts +2 -0
  65. package/dist/cjs/utils/mergeRefs.js +17 -0
  66. package/dist/esm/AutoComplete/AutoComplete.d.ts +1 -1
  67. package/dist/esm/AutoComplete/AutoComplete.js +52 -27
  68. package/dist/esm/AutoComplete/AutoComplete.tailwind.js +9 -1
  69. package/dist/esm/AutoComplete/types.d.ts +1 -0
  70. package/dist/esm/Checkbox/Checkbox.d.ts +1 -1
  71. package/dist/esm/Checkbox/Checkbox.js +21 -13
  72. package/dist/esm/Checkbox/Checkbox.tailwind.js +8 -2
  73. package/dist/esm/DatePicker/DatePicker/DatePicker.d.ts +4 -2
  74. package/dist/esm/DatePicker/DatePicker/DatePicker.js +19 -8
  75. package/dist/esm/DatePicker/components/Display.d.ts +3 -3
  76. package/dist/esm/DatePicker/components/Display.js +15 -5
  77. package/dist/esm/Dropzone/Dropzone.d.ts +4 -2
  78. package/dist/esm/Dropzone/Dropzone.js +24 -13
  79. package/dist/esm/Field/Field.d.ts +1 -0
  80. package/dist/esm/Field/Field.js +64 -12
  81. package/dist/esm/Field/FieldContext.d.ts +3 -0
  82. package/dist/esm/Field/useField.d.ts +4 -1
  83. package/dist/esm/Field/useField.js +17 -2
  84. package/dist/esm/Form/Form.d.ts +16 -0
  85. package/dist/esm/Form/Form.js +135 -0
  86. package/dist/esm/Form/FormContext.d.ts +13 -0
  87. package/dist/esm/Form/FormContext.js +2 -0
  88. package/dist/esm/Form/index.d.ts +3 -0
  89. package/dist/esm/Form/index.js +3 -0
  90. package/dist/esm/Form/stories/AsynchronousValidation.js +387 -0
  91. package/dist/esm/Form/stories/Complex.js +919 -0
  92. package/dist/esm/Form/stories/DependentFieldsValidation.js +240 -0
  93. package/dist/esm/Form/stories/DirtyFields.js +330 -0
  94. package/dist/esm/Form/stories/DynamicFieldsValidation.js +416 -0
  95. package/dist/esm/Form/stories/FieldArrays.js +544 -0
  96. package/dist/esm/Form/stories/ValidationStrategies.js +446 -0
  97. package/dist/esm/Form/stories/utils/useFormikAutoFocusOnError.js +16 -0
  98. package/dist/esm/Form/useForm.d.ts +1 -0
  99. package/dist/esm/Form/useForm.js +5 -0
  100. package/dist/esm/Input/Input.js +22 -9
  101. package/dist/esm/Input/Input.tailwind.js +7 -2
  102. package/dist/esm/Pagination/DotPagination/DotPagination.d.ts +1 -1
  103. package/dist/esm/RadioGroup/RadioButton.d.ts +1 -1
  104. package/dist/esm/RadioGroup/RadioButton.js +16 -3
  105. package/dist/esm/RadioGroup/RadioButton.tailwind.js +23 -0
  106. package/dist/esm/RadioGroup/RadioGroup.d.ts +7 -5
  107. package/dist/esm/RadioGroup/RadioGroup.js +77 -15
  108. package/dist/esm/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
  109. package/dist/esm/RangeSlider/RangeSlider.d.ts +2 -3
  110. package/dist/esm/RangeSlider/RangeSlider.js +27 -10
  111. package/dist/esm/Satellite/locale.d.ts +2 -0
  112. package/dist/esm/Select/Select.js +41 -7
  113. package/dist/esm/Select/Select.tailwind.js +19 -0
  114. package/dist/esm/Stepper/Step.js +2 -2
  115. package/dist/esm/Switch/Switch.js +1 -1
  116. package/dist/esm/Switch/SwitchOption.js +2 -2
  117. package/dist/esm/Tables/DataTable/DataTable.d.ts +1 -1
  118. package/dist/esm/Tag/Tag.d.ts +1 -1
  119. package/dist/esm/TextArea/TextArea.d.ts +1 -0
  120. package/dist/esm/TextArea/TextArea.js +49 -9
  121. package/dist/esm/TextArea/TextArea.tailwind.js +41 -4
  122. package/dist/esm/Toggle/Toggle.d.ts +1 -1
  123. package/dist/esm/Toggle/Toggle.js +23 -6
  124. package/dist/esm/Toggle/Toggle.tailwind.js +9 -0
  125. package/dist/esm/Tooltip/Tooltip.d.ts +1 -1
  126. package/dist/esm/index.d.ts +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
  129. package/dist/esm/utils/mergeRefs.d.ts +2 -0
  130. package/dist/esm/utils/mergeRefs.js +11 -0
  131. package/dist/satellite.min.css +1 -1
  132. package/package.json +13 -7
  133. /package/dist/cjs/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
  134. /package/dist/esm/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.RHFDynamicFieldsValidationComponent = exports.FormikDynamicFieldsValidationComponent = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _zod = require("@hookform/resolvers/zod");
13
+ var _clsx = _interopRequireDefault(require("clsx"));
14
+ var _formik = require("formik");
15
+ var _capitalize = _interopRequireDefault(require("lodash/capitalize"));
16
+ var _react = require("react");
17
+ var _reactHookForm = require("react-hook-form");
18
+ var yup = _interopRequireWildcard(require("yup"));
19
+ var _zod2 = require("zod");
20
+ var _Field = require("../../Field");
21
+ var _Input = require("../../Input");
22
+ var _Select = require("../../Select");
23
+ var _satellitePrefixer = _interopRequireDefault(require("../../styles/helpers/satellitePrefixer"));
24
+ var _Form = require("../Form");
25
+ var _useFormikAutoFocusOnError = require("./utils/useFormikAutoFocusOnError");
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26, _templateObject27, _templateObject28;
28
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
29
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
30
+ 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; }
31
+ 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) { (0, _defineProperty2["default"])(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; }
32
+ var professions = ["please select", "doctor", "teacher", "other"];
33
+ var initialFormData = {
34
+ name: "",
35
+ email: "",
36
+ profession: "please select",
37
+ // Doctor field
38
+ hospitalName: "",
39
+ // Teacher field
40
+ schoolName: "",
41
+ // Other field
42
+ otherProfession: ""
43
+ };
44
+ var zodBaseSchema = _zod2.z.object({
45
+ name: _zod2.z.string().min(1, {
46
+ message: "You must specify a name"
47
+ }).min(3, "Name must be at least 3 characters long"),
48
+ email: _zod2.z.string().min(1, {
49
+ message: "You must specify an email"
50
+ }).email("Invalid email")
51
+ });
52
+ var zodSchema = _zod2.z.intersection(zodBaseSchema, _zod2.z.discriminatedUnion("profession", [_zod2.z.object({
53
+ profession: _zod2.z.literal("doctor"),
54
+ hospitalName: _zod2.z.string().min(1, {
55
+ message: "You must specify an hospital name"
56
+ })
57
+ }), _zod2.z.object({
58
+ profession: _zod2.z.literal("teacher"),
59
+ schoolName: _zod2.z.string().min(1, {
60
+ message: "You must specify a school name"
61
+ })
62
+ }), _zod2.z.object({
63
+ profession: _zod2.z.literal("other"),
64
+ otherProfession: _zod2.z.string().min(1, {
65
+ message: "You must specify a profession"
66
+ })
67
+ })], {
68
+ errorMap: function errorMap() {
69
+ return {
70
+ message: "You must specify a profession"
71
+ };
72
+ }
73
+ }));
74
+ var RHFDynamicFieldsValidationComponent = exports.RHFDynamicFieldsValidationComponent = function RHFDynamicFieldsValidationComponent() {
75
+ var _useState = (0, _react.useState)(initialFormData),
76
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
77
+ formData = _useState2[0],
78
+ setFormData = _useState2[1];
79
+ var _useForm = (0, _reactHookForm.useForm)({
80
+ defaultValues: initialFormData,
81
+ reValidateMode: "onChange",
82
+ resolver: (0, _zod.zodResolver)(zodSchema)
83
+ }),
84
+ control = _useForm.control,
85
+ handleSubmit = _useForm.handleSubmit,
86
+ getFieldStateFromReactHookForm = _useForm.getFieldState,
87
+ formState = _useForm.formState,
88
+ watch = _useForm.watch,
89
+ reset = _useForm.reset;
90
+ var profession = watch("profession", "please select");
91
+ var getFieldState = function getFieldState(fieldName) {
92
+ var _fieldState$error;
93
+ var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
94
+ if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
95
+ return {
96
+ status: "invalid",
97
+ errors: [fieldState.error.message]
98
+ };
99
+ } else if (!fieldState.invalid && formState.isSubmitted) {
100
+ return {
101
+ status: "validated"
102
+ };
103
+ } else {
104
+ return {
105
+ status: "default"
106
+ };
107
+ }
108
+ };
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
110
+ className: (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["flex flex-col gap-8 w-3/5"]))),
111
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Form.ExperimentalForm, {
112
+ onSubmit: handleSubmit(function (data) {
113
+ return setFormData(data);
114
+ }),
115
+ onReset: function onReset() {
116
+ return setFormData(initialFormData);
117
+ },
118
+ className: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col items-start gap-4 min-w-72"]))),
119
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormErrorMessage, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
120
+ name: "name",
121
+ control: control,
122
+ render: function render(_ref) {
123
+ var field = _ref.field;
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
125
+ label: "Name",
126
+ labelFor: "name",
127
+ description: "Please enter your name",
128
+ state: getFieldState("name"),
129
+ className: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
130
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
131
+ id: "name",
132
+ placeholder: "John Doe",
133
+ required: true
134
+ }, field))
135
+ });
136
+ }
137
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
138
+ name: "email",
139
+ control: control,
140
+ render: function render(_ref2) {
141
+ var field = _ref2.field;
142
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
143
+ label: "Email",
144
+ labelFor: "email",
145
+ description: "Please enter your email",
146
+ state: getFieldState("email"),
147
+ className: (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
148
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
149
+ id: "email",
150
+ placeholder: "contact@example.com",
151
+ required: true
152
+ }, field))
153
+ });
154
+ }
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
156
+ name: "profession",
157
+ control: control,
158
+ render: function render(_ref3) {
159
+ var field = _ref3.field;
160
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
161
+ label: "Profession",
162
+ labelFor: "profession",
163
+ description: "Please specify your profession",
164
+ state: getFieldState("profession"),
165
+ className: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.Select, _objectSpread(_objectSpread({
167
+ id: "profession",
168
+ required: true
169
+ }, field), {}, {
170
+ children: professions.map(function (profession) {
171
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", {
172
+ value: profession,
173
+ children: (0, _capitalize["default"])(profession)
174
+ }, profession);
175
+ })
176
+ }))
177
+ });
178
+ }
179
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
180
+ name: "hospitalName",
181
+ control: control,
182
+ render: function render(_ref4) {
183
+ var field = _ref4.field;
184
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
185
+ label: "Hospital Name",
186
+ labelFor: "hospitalName",
187
+ description: "Please enter an hospital name",
188
+ state: getFieldState("hospitalName"),
189
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), profession !== "doctor" && (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
190
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
191
+ id: "hospitalName",
192
+ placeholder: "Name",
193
+ required: true
194
+ }, field))
195
+ });
196
+ }
197
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
198
+ name: "schoolName",
199
+ control: control,
200
+ render: function render(_ref5) {
201
+ var field = _ref5.field;
202
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
203
+ label: "School Name",
204
+ labelFor: "schoolName",
205
+ description: "Please enter a school name",
206
+ state: getFieldState("schoolName"),
207
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), profession !== "teacher" && (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
208
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
209
+ id: "schoolName",
210
+ placeholder: "Name",
211
+ required: true
212
+ }, field))
213
+ });
214
+ }
215
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
216
+ name: "otherProfession",
217
+ control: control,
218
+ render: function render(_ref6) {
219
+ var field = _ref6.field;
220
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
221
+ label: "Other Profession",
222
+ labelFor: "otherProfession",
223
+ description: "Please enter an other profession",
224
+ state: getFieldState("otherProfession"),
225
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), profession !== "other" && (0, _satellitePrefixer["default"])(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
226
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
227
+ id: "otherProfession",
228
+ placeholder: "Profession",
229
+ required: true
230
+ }, field))
231
+ });
232
+ }
233
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
234
+ className: (0, _satellitePrefixer["default"])(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["flex gap-2"]))),
235
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormSubmit, {
236
+ variant: "primary",
237
+ "aria-label": "Save the form",
238
+ children: "Save"
239
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormReset, {
240
+ "aria-label": "Reset the form",
241
+ onClick: function onClick() {
242
+ return reset();
243
+ },
244
+ children: "Reset"
245
+ })]
246
+ })]
247
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("hr", {
248
+ className: (0, _satellitePrefixer["default"])(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["text-grey-500"])))
249
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("code", {
250
+ className: (0, _satellitePrefixer["default"])(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["whitespace-pre"]))),
251
+ children: JSON.stringify(formData, null, 2)
252
+ })]
253
+ });
254
+ };
255
+ var yupSchema = yup.object({
256
+ name: yup.string().required("You must specify a name").min(3, "Name must be at least 3 characters long"),
257
+ email: yup.string().required("You must specify an email").email("Invalid email"),
258
+ profession: yup.string().oneOf(professions.slice(1), "You must specify a profession").required(),
259
+ hospitalName: yup.string().when("profession", {
260
+ is: "doctor",
261
+ then: function then(schema) {
262
+ return schema.required("You must specify an hospital name");
263
+ },
264
+ otherwise: undefined
265
+ }),
266
+ schoolName: yup.string().when("profession", {
267
+ is: "teacher",
268
+ then: function then(schema) {
269
+ return schema.required("You must specify a school name");
270
+ },
271
+ otherwise: undefined
272
+ }),
273
+ otherProfession: yup.string().when("profession", {
274
+ is: "other",
275
+ then: function then(schema) {
276
+ return schema.required("You must specify a profession");
277
+ },
278
+ otherwise: undefined
279
+ })
280
+ });
281
+ var FormikDynamicFieldsValidationComponent = exports.FormikDynamicFieldsValidationComponent = function FormikDynamicFieldsValidationComponent() {
282
+ var _useState3 = (0, _react.useState)(initialFormData),
283
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
284
+ formData = _useState4[0],
285
+ setFormData = _useState4[1];
286
+ var _useState5 = (0, _react.useState)(false),
287
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
288
+ revalidationEnabled = _useState6[0],
289
+ setRevalidationEnabled = _useState6[1];
290
+ var formik = (0, _formik.useFormik)({
291
+ initialValues: initialFormData,
292
+ validateOnChange: revalidationEnabled,
293
+ validateOnBlur: revalidationEnabled,
294
+ validationSchema: yupSchema,
295
+ onSubmit: function onSubmit(values) {
296
+ return setFormData(values);
297
+ },
298
+ onReset: function onReset() {
299
+ return setFormData(initialFormData);
300
+ }
301
+ });
302
+ var getFieldState = function getFieldState(fieldName) {
303
+ var fieldMeta = formik.getFieldMeta(fieldName);
304
+ if (fieldMeta.error) {
305
+ return {
306
+ status: "invalid",
307
+ errors: [fieldMeta.error]
308
+ };
309
+ } else if (formik.isSubmitting && fieldMeta.touched) {
310
+ return {
311
+ status: "validated"
312
+ };
313
+ } else {
314
+ return {
315
+ status: "default"
316
+ };
317
+ }
318
+ };
319
+ (0, _useFormikAutoFocusOnError.useFormikAutoFocusOnError)(formik);
320
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
321
+ className: (0, _satellitePrefixer["default"])(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col gap-8 w-3/5"]))),
322
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Form.ExperimentalForm, {
323
+ onSubmit: function onSubmit(e) {
324
+ setRevalidationEnabled(true);
325
+ formik.handleSubmit(e);
326
+ },
327
+ onReset: function onReset(e) {
328
+ setRevalidationEnabled(false);
329
+ formik.handleReset(e);
330
+ },
331
+ className: (0, _satellitePrefixer["default"])(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col items-start gap-4 min-w-72"]))),
332
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormErrorMessage, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
333
+ label: "Name",
334
+ labelFor: "name",
335
+ description: "Please enter your name",
336
+ state: getFieldState("name"),
337
+ className: (0, _satellitePrefixer["default"])(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
338
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
339
+ id: "name",
340
+ placeholder: "John Doe",
341
+ required: true
342
+ }, formik.getFieldProps("name")))
343
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
344
+ label: "Email",
345
+ labelFor: "email",
346
+ description: "Please enter your email",
347
+ state: getFieldState("email"),
348
+ className: (0, _satellitePrefixer["default"])(_templateObject18 || (_templateObject18 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
349
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
350
+ id: "email",
351
+ placeholder: "contact@example.com",
352
+ required: true
353
+ }, formik.getFieldProps("email")))
354
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
355
+ label: "Profession",
356
+ labelFor: "profession",
357
+ description: "Please specify your profession",
358
+ state: getFieldState("profession"),
359
+ className: (0, _satellitePrefixer["default"])(_templateObject19 || (_templateObject19 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
360
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.Select, _objectSpread(_objectSpread({
361
+ id: "profession",
362
+ required: true
363
+ }, formik.getFieldProps("profession")), {}, {
364
+ children: professions.map(function (profession) {
365
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", {
366
+ value: profession,
367
+ children: (0, _capitalize["default"])(profession)
368
+ }, profession);
369
+ })
370
+ }))
371
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
372
+ label: "Hospital Name",
373
+ labelFor: "hospitalName",
374
+ description: "Please enter an hospital name",
375
+ state: getFieldState("hospitalName"),
376
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject20 || (_templateObject20 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), formik.values.profession !== "doctor" && (0, _satellitePrefixer["default"])(_templateObject21 || (_templateObject21 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
377
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
378
+ id: "hospitalName",
379
+ placeholder: "Name",
380
+ required: true
381
+ }, formik.getFieldProps("hospitalName")))
382
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
383
+ label: "School Name",
384
+ labelFor: "schoolName",
385
+ description: "Please enter a school name",
386
+ state: getFieldState("schoolName"),
387
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject22 || (_templateObject22 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), formik.values.profession !== "teacher" && (0, _satellitePrefixer["default"])(_templateObject23 || (_templateObject23 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
388
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
389
+ id: "schoolName",
390
+ placeholder: "Name",
391
+ required: true
392
+ }, formik.getFieldProps("schoolName")))
393
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
394
+ label: "Other Profession",
395
+ labelFor: "otherProfession",
396
+ description: "Please enter an other profession",
397
+ state: getFieldState("otherProfession"),
398
+ className: (0, _clsx["default"])((0, _satellitePrefixer["default"])(_templateObject24 || (_templateObject24 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))), formik.values.profession !== "other" && (0, _satellitePrefixer["default"])(_templateObject25 || (_templateObject25 = (0, _taggedTemplateLiteral2["default"])(["hidden"])))),
399
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Input.Input, _objectSpread({
400
+ id: "otherProfession",
401
+ placeholder: "Profession",
402
+ required: true
403
+ }, formik.getFieldProps("otherProfession")))
404
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
405
+ className: (0, _satellitePrefixer["default"])(_templateObject26 || (_templateObject26 = (0, _taggedTemplateLiteral2["default"])(["flex gap-2"]))),
406
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormSubmit, {
407
+ variant: "primary",
408
+ "aria-label": "Save the form",
409
+ children: "Save"
410
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormReset, {
411
+ "aria-label": "Reset the form",
412
+ onClick: function onClick() {
413
+ return formik.resetForm();
414
+ },
415
+ children: "Reset"
416
+ })]
417
+ })]
418
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("hr", {
419
+ className: (0, _satellitePrefixer["default"])(_templateObject27 || (_templateObject27 = (0, _taggedTemplateLiteral2["default"])(["text-grey-500"])))
420
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("code", {
421
+ className: (0, _satellitePrefixer["default"])(_templateObject28 || (_templateObject28 = (0, _taggedTemplateLiteral2["default"])(["whitespace-pre"]))),
422
+ children: JSON.stringify(formData, null, 2)
423
+ })]
424
+ });
425
+ };