@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.
- package/dist/cjs/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/cjs/AutoComplete/AutoComplete.js +49 -26
- package/dist/cjs/AutoComplete/AutoComplete.tailwind.js +9 -1
- package/dist/cjs/AutoComplete/types.d.ts +1 -0
- package/dist/cjs/Checkbox/Checkbox.d.ts +1 -1
- package/dist/cjs/Checkbox/Checkbox.js +21 -13
- package/dist/cjs/Checkbox/Checkbox.tailwind.js +8 -2
- package/dist/cjs/DatePicker/DatePicker/DatePicker.d.ts +4 -2
- package/dist/cjs/DatePicker/DatePicker/DatePicker.js +18 -7
- package/dist/cjs/DatePicker/components/Display.d.ts +3 -3
- package/dist/cjs/DatePicker/components/Display.js +16 -5
- package/dist/cjs/Dropzone/Dropzone.d.ts +4 -2
- package/dist/cjs/Dropzone/Dropzone.js +23 -12
- package/dist/cjs/Field/Field.d.ts +1 -0
- package/dist/cjs/Field/Field.js +63 -11
- package/dist/cjs/Field/FieldContext.d.ts +3 -0
- package/dist/cjs/Field/useField.d.ts +4 -1
- package/dist/cjs/Field/useField.js +17 -1
- package/dist/cjs/Form/Form.d.ts +16 -0
- package/dist/cjs/Form/Form.js +140 -0
- package/dist/cjs/Form/FormContext.d.ts +13 -0
- package/dist/cjs/Form/FormContext.js +8 -0
- package/dist/cjs/Form/index.d.ts +3 -0
- package/dist/cjs/Form/index.js +27 -0
- package/dist/cjs/Form/stories/AsynchronousValidation.js +396 -0
- package/dist/cjs/Form/stories/Complex.js +928 -0
- package/dist/cjs/Form/stories/DependentFieldsValidation.js +249 -0
- package/dist/cjs/Form/stories/DirtyFields.js +339 -0
- package/dist/cjs/Form/stories/DynamicFieldsValidation.js +425 -0
- package/dist/cjs/Form/stories/FieldArrays.js +549 -0
- package/dist/cjs/Form/stories/ValidationStrategies.js +455 -0
- package/dist/cjs/Form/stories/utils/useFormikAutoFocusOnError.js +22 -0
- package/dist/cjs/Form/useForm.d.ts +1 -0
- package/dist/cjs/Form/useForm.js +11 -0
- package/dist/cjs/Input/Input.js +22 -9
- package/dist/cjs/Input/Input.tailwind.js +7 -2
- package/dist/cjs/Pagination/DotPagination/DotPagination.d.ts +1 -1
- package/dist/cjs/RadioGroup/RadioButton.d.ts +1 -1
- package/dist/cjs/RadioGroup/RadioButton.js +16 -3
- package/dist/cjs/RadioGroup/RadioButton.tailwind.js +23 -0
- package/dist/cjs/RadioGroup/RadioGroup.d.ts +7 -5
- package/dist/cjs/RadioGroup/RadioGroup.js +78 -16
- package/dist/cjs/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
- package/dist/cjs/RangeSlider/RangeSlider.d.ts +2 -3
- package/dist/cjs/RangeSlider/RangeSlider.js +27 -10
- package/dist/cjs/Satellite/locale.d.ts +2 -0
- package/dist/cjs/Select/Select.js +39 -6
- package/dist/cjs/Select/Select.tailwind.js +19 -0
- package/dist/cjs/Stepper/Step.js +2 -2
- package/dist/cjs/Switch/Switch.js +2 -2
- package/dist/cjs/Switch/SwitchOption.js +3 -3
- package/dist/cjs/Tables/DataTable/DataTable.d.ts +1 -1
- package/dist/cjs/Tag/Tag.d.ts +1 -1
- package/dist/cjs/TextArea/TextArea.d.ts +1 -0
- package/dist/cjs/TextArea/TextArea.js +47 -8
- package/dist/cjs/TextArea/TextArea.tailwind.js +41 -4
- package/dist/cjs/Toggle/Toggle.d.ts +1 -1
- package/dist/cjs/Toggle/Toggle.js +23 -6
- package/dist/cjs/Toggle/Toggle.tailwind.js +9 -0
- package/dist/cjs/Tooltip/Tooltip.d.ts +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/cjs/utils/mergeRefs.d.ts +2 -0
- package/dist/cjs/utils/mergeRefs.js +17 -0
- package/dist/esm/AutoComplete/AutoComplete.d.ts +1 -1
- package/dist/esm/AutoComplete/AutoComplete.js +52 -27
- package/dist/esm/AutoComplete/AutoComplete.tailwind.js +9 -1
- package/dist/esm/AutoComplete/types.d.ts +1 -0
- package/dist/esm/Checkbox/Checkbox.d.ts +1 -1
- package/dist/esm/Checkbox/Checkbox.js +21 -13
- package/dist/esm/Checkbox/Checkbox.tailwind.js +8 -2
- package/dist/esm/DatePicker/DatePicker/DatePicker.d.ts +4 -2
- package/dist/esm/DatePicker/DatePicker/DatePicker.js +19 -8
- package/dist/esm/DatePicker/components/Display.d.ts +3 -3
- package/dist/esm/DatePicker/components/Display.js +15 -5
- package/dist/esm/Dropzone/Dropzone.d.ts +4 -2
- package/dist/esm/Dropzone/Dropzone.js +24 -13
- package/dist/esm/Field/Field.d.ts +1 -0
- package/dist/esm/Field/Field.js +64 -12
- package/dist/esm/Field/FieldContext.d.ts +3 -0
- package/dist/esm/Field/useField.d.ts +4 -1
- package/dist/esm/Field/useField.js +17 -2
- package/dist/esm/Form/Form.d.ts +16 -0
- package/dist/esm/Form/Form.js +135 -0
- package/dist/esm/Form/FormContext.d.ts +13 -0
- package/dist/esm/Form/FormContext.js +2 -0
- package/dist/esm/Form/index.d.ts +3 -0
- package/dist/esm/Form/index.js +3 -0
- package/dist/esm/Form/stories/AsynchronousValidation.js +387 -0
- package/dist/esm/Form/stories/Complex.js +919 -0
- package/dist/esm/Form/stories/DependentFieldsValidation.js +240 -0
- package/dist/esm/Form/stories/DirtyFields.js +330 -0
- package/dist/esm/Form/stories/DynamicFieldsValidation.js +416 -0
- package/dist/esm/Form/stories/FieldArrays.js +544 -0
- package/dist/esm/Form/stories/ValidationStrategies.js +446 -0
- package/dist/esm/Form/stories/utils/useFormikAutoFocusOnError.js +16 -0
- package/dist/esm/Form/useForm.d.ts +1 -0
- package/dist/esm/Form/useForm.js +5 -0
- package/dist/esm/Input/Input.js +22 -9
- package/dist/esm/Input/Input.tailwind.js +7 -2
- package/dist/esm/Pagination/DotPagination/DotPagination.d.ts +1 -1
- package/dist/esm/RadioGroup/RadioButton.d.ts +1 -1
- package/dist/esm/RadioGroup/RadioButton.js +16 -3
- package/dist/esm/RadioGroup/RadioButton.tailwind.js +23 -0
- package/dist/esm/RadioGroup/RadioGroup.d.ts +7 -5
- package/dist/esm/RadioGroup/RadioGroup.js +77 -15
- package/dist/esm/RadioGroup/{RadiogroupContext.d.ts → RadioGroupContext.d.ts} +8 -1
- package/dist/esm/RangeSlider/RangeSlider.d.ts +2 -3
- package/dist/esm/RangeSlider/RangeSlider.js +27 -10
- package/dist/esm/Satellite/locale.d.ts +2 -0
- package/dist/esm/Select/Select.js +41 -7
- package/dist/esm/Select/Select.tailwind.js +19 -0
- package/dist/esm/Stepper/Step.js +2 -2
- package/dist/esm/Switch/Switch.js +1 -1
- package/dist/esm/Switch/SwitchOption.js +2 -2
- package/dist/esm/Tables/DataTable/DataTable.d.ts +1 -1
- package/dist/esm/Tag/Tag.d.ts +1 -1
- package/dist/esm/TextArea/TextArea.d.ts +1 -0
- package/dist/esm/TextArea/TextArea.js +49 -9
- package/dist/esm/TextArea/TextArea.tailwind.js +41 -4
- package/dist/esm/Toggle/Toggle.d.ts +1 -1
- package/dist/esm/Toggle/Toggle.js +23 -6
- package/dist/esm/Toggle/Toggle.tailwind.js +9 -0
- package/dist/esm/Tooltip/Tooltip.d.ts +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
- package/dist/esm/utils/mergeRefs.d.ts +2 -0
- package/dist/esm/utils/mergeRefs.js +11 -0
- package/dist/satellite.min.css +1 -1
- package/package.json +13 -7
- /package/dist/cjs/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
- /package/dist/esm/RadioGroup/{RadiogroupContext.js → RadioGroupContext.js} +0 -0
@@ -0,0 +1,240 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
4
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14;
|
5
|
+
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; }
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
7
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
8
|
+
import { useFormik } from "formik";
|
9
|
+
import { useState } from "react";
|
10
|
+
import { Controller, useForm } from "react-hook-form";
|
11
|
+
import * as yup from "yup";
|
12
|
+
import { z } from "zod";
|
13
|
+
import { Field } from "../../Field";
|
14
|
+
import { Input } from "../../Input";
|
15
|
+
import stl from "../../styles/helpers/satellitePrefixer";
|
16
|
+
import { ExperimentalForm, ExperimentalFormErrorMessage, ExperimentalFormReset, ExperimentalFormSubmit } from "../Form";
|
17
|
+
import { useFormikAutoFocusOnError } from "./utils/useFormikAutoFocusOnError";
|
18
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
19
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
20
|
+
var initialFormData = {
|
21
|
+
password: "",
|
22
|
+
confirmPassword: ""
|
23
|
+
};
|
24
|
+
var zodSchema = z.object({
|
25
|
+
password: z.string().min(1, {
|
26
|
+
message: "You must specify a password"
|
27
|
+
}).min(5, "Password must be at least 5 characters long"),
|
28
|
+
confirmPassword: z.string().min(1, {
|
29
|
+
message: "You must confirm your password"
|
30
|
+
})
|
31
|
+
}).refine(function (schema) {
|
32
|
+
return schema.password === schema.confirmPassword;
|
33
|
+
}, {
|
34
|
+
message: "Passwords must match",
|
35
|
+
path: ["confirmPassword"]
|
36
|
+
});
|
37
|
+
export var RHFDependentFieldsValidationComponent = function RHFDependentFieldsValidationComponent() {
|
38
|
+
var _useState = useState(initialFormData),
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
40
|
+
formData = _useState2[0],
|
41
|
+
setFormData = _useState2[1];
|
42
|
+
var _useForm = useForm({
|
43
|
+
defaultValues: initialFormData,
|
44
|
+
reValidateMode: "onChange",
|
45
|
+
resolver: zodResolver(zodSchema)
|
46
|
+
}),
|
47
|
+
control = _useForm.control,
|
48
|
+
handleSubmit = _useForm.handleSubmit,
|
49
|
+
getFieldStateFromReactHookForm = _useForm.getFieldState,
|
50
|
+
formState = _useForm.formState,
|
51
|
+
reset = _useForm.reset;
|
52
|
+
var getFieldState = function getFieldState(fieldName) {
|
53
|
+
var _fieldState$error;
|
54
|
+
var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
|
55
|
+
if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
|
56
|
+
return {
|
57
|
+
status: "invalid",
|
58
|
+
errors: [fieldState.error.message]
|
59
|
+
};
|
60
|
+
} else if (!fieldState.invalid && formState.isSubmitted) {
|
61
|
+
return {
|
62
|
+
status: "validated"
|
63
|
+
};
|
64
|
+
} else {
|
65
|
+
return {
|
66
|
+
status: "default"
|
67
|
+
};
|
68
|
+
}
|
69
|
+
};
|
70
|
+
return /*#__PURE__*/_jsxs("div", {
|
71
|
+
className: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
|
72
|
+
children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
|
73
|
+
onSubmit: handleSubmit(function (data) {
|
74
|
+
return setFormData(data);
|
75
|
+
}),
|
76
|
+
onReset: function onReset() {
|
77
|
+
return setFormData(initialFormData);
|
78
|
+
},
|
79
|
+
className: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
|
80
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Controller, {
|
81
|
+
name: "password",
|
82
|
+
control: control,
|
83
|
+
render: function render(_ref) {
|
84
|
+
var field = _ref.field;
|
85
|
+
return /*#__PURE__*/_jsx(Field, {
|
86
|
+
label: "Password",
|
87
|
+
labelFor: "password",
|
88
|
+
description: "Please enter your password",
|
89
|
+
state: getFieldState("password"),
|
90
|
+
className: stl(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["w-full"]))),
|
91
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
92
|
+
id: "password",
|
93
|
+
placeholder: "Password",
|
94
|
+
type: "password",
|
95
|
+
required: true
|
96
|
+
}, field))
|
97
|
+
});
|
98
|
+
}
|
99
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
100
|
+
name: "confirmPassword",
|
101
|
+
control: control,
|
102
|
+
render: function render(_ref2) {
|
103
|
+
var field = _ref2.field;
|
104
|
+
return /*#__PURE__*/_jsx(Field, {
|
105
|
+
label: "Confirm Password",
|
106
|
+
labelFor: "confirmPassword",
|
107
|
+
description: "Please confirm your password",
|
108
|
+
state: getFieldState("confirmPassword"),
|
109
|
+
className: stl(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["w-full"]))),
|
110
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
111
|
+
id: "confirmPassword",
|
112
|
+
placeholder: "Confirm password",
|
113
|
+
type: "password",
|
114
|
+
required: true
|
115
|
+
}, field))
|
116
|
+
});
|
117
|
+
}
|
118
|
+
}), /*#__PURE__*/_jsxs("div", {
|
119
|
+
className: stl(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["flex gap-2"]))),
|
120
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
|
121
|
+
variant: "primary",
|
122
|
+
"aria-label": "Save the form",
|
123
|
+
children: "Save"
|
124
|
+
}), /*#__PURE__*/_jsx(ExperimentalFormReset, {
|
125
|
+
"aria-label": "Reset the form",
|
126
|
+
onClick: function onClick() {
|
127
|
+
return reset();
|
128
|
+
},
|
129
|
+
children: "Reset"
|
130
|
+
})]
|
131
|
+
})]
|
132
|
+
}), /*#__PURE__*/_jsx("hr", {
|
133
|
+
className: stl(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["text-grey-500"])))
|
134
|
+
}), /*#__PURE__*/_jsx("code", {
|
135
|
+
className: stl(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["whitespace-pre"]))),
|
136
|
+
children: JSON.stringify(formData, null, 2)
|
137
|
+
})]
|
138
|
+
});
|
139
|
+
};
|
140
|
+
var yupSchema = yup.object({
|
141
|
+
password: yup.string().min(5, "Password must be at least 5 characters long").required("You must specify a password"),
|
142
|
+
confirmPassword: yup.string().oneOf([yup.ref("password")], "Passwords must match").required("You must confirm your password")
|
143
|
+
});
|
144
|
+
export var FormikDependentFieldsValidationComponent = function FormikDependentFieldsValidationComponent() {
|
145
|
+
var _useState3 = useState(initialFormData),
|
146
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
147
|
+
formData = _useState4[0],
|
148
|
+
setFormData = _useState4[1];
|
149
|
+
var _useState5 = useState(false),
|
150
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
151
|
+
revalidationEnabled = _useState6[0],
|
152
|
+
setRevalidationEnabled = _useState6[1];
|
153
|
+
var formik = useFormik({
|
154
|
+
initialValues: initialFormData,
|
155
|
+
validateOnChange: revalidationEnabled,
|
156
|
+
validateOnBlur: revalidationEnabled,
|
157
|
+
validationSchema: yupSchema,
|
158
|
+
onSubmit: function onSubmit(values) {
|
159
|
+
return setFormData(values);
|
160
|
+
},
|
161
|
+
onReset: function onReset() {
|
162
|
+
return setFormData(initialFormData);
|
163
|
+
}
|
164
|
+
});
|
165
|
+
var getFieldState = function getFieldState(fieldName) {
|
166
|
+
var fieldMeta = formik.getFieldMeta(fieldName);
|
167
|
+
if (fieldMeta.error) {
|
168
|
+
return {
|
169
|
+
status: "invalid",
|
170
|
+
errors: [fieldMeta.error]
|
171
|
+
};
|
172
|
+
} else if (formik.isSubmitting && fieldMeta.touched) {
|
173
|
+
return {
|
174
|
+
status: "validated"
|
175
|
+
};
|
176
|
+
} else {
|
177
|
+
return {
|
178
|
+
status: "default"
|
179
|
+
};
|
180
|
+
}
|
181
|
+
};
|
182
|
+
useFormikAutoFocusOnError(formik);
|
183
|
+
return /*#__PURE__*/_jsxs("div", {
|
184
|
+
className: stl(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
|
185
|
+
children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
|
186
|
+
onSubmit: function onSubmit(e) {
|
187
|
+
setRevalidationEnabled(true);
|
188
|
+
formik.handleSubmit(e);
|
189
|
+
},
|
190
|
+
onReset: function onReset(e) {
|
191
|
+
setRevalidationEnabled(false);
|
192
|
+
formik.handleReset(e);
|
193
|
+
},
|
194
|
+
className: stl(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
|
195
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Field, {
|
196
|
+
label: "Password",
|
197
|
+
labelFor: "password",
|
198
|
+
description: "Please enter your password",
|
199
|
+
state: getFieldState("password"),
|
200
|
+
className: stl(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["w-full"]))),
|
201
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
202
|
+
id: "password",
|
203
|
+
placeholder: "Password",
|
204
|
+
type: "password",
|
205
|
+
required: true
|
206
|
+
}, formik.getFieldProps("password")))
|
207
|
+
}), /*#__PURE__*/_jsx(Field, {
|
208
|
+
label: "Confirm Password",
|
209
|
+
labelFor: "confirmPassword",
|
210
|
+
description: "Please confirm your password",
|
211
|
+
state: getFieldState("confirmPassword"),
|
212
|
+
className: stl(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["w-full"]))),
|
213
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
214
|
+
id: "confirmPassword",
|
215
|
+
placeholder: "Confirm password",
|
216
|
+
type: "password",
|
217
|
+
required: true
|
218
|
+
}, formik.getFieldProps("confirmPassword")))
|
219
|
+
}), /*#__PURE__*/_jsxs("div", {
|
220
|
+
className: stl(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["flex gap-2"]))),
|
221
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
|
222
|
+
variant: "primary",
|
223
|
+
"aria-label": "Save the form",
|
224
|
+
children: "Save"
|
225
|
+
}), /*#__PURE__*/_jsx(ExperimentalFormReset, {
|
226
|
+
"aria-label": "Reset the form",
|
227
|
+
onClick: function onClick() {
|
228
|
+
return formik.resetForm();
|
229
|
+
},
|
230
|
+
children: "Reset"
|
231
|
+
})]
|
232
|
+
})]
|
233
|
+
}), /*#__PURE__*/_jsx("hr", {
|
234
|
+
className: stl(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["text-grey-500"])))
|
235
|
+
}), /*#__PURE__*/_jsx("code", {
|
236
|
+
className: stl(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["whitespace-pre"]))),
|
237
|
+
children: JSON.stringify(formData, null, 2)
|
238
|
+
})]
|
239
|
+
});
|
240
|
+
};
|
@@ -0,0 +1,330 @@
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
4
|
+
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;
|
5
|
+
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; }
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
7
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
8
|
+
import cx from "clsx";
|
9
|
+
import { useFormik } from "formik";
|
10
|
+
import { useState } from "react";
|
11
|
+
import { Controller, useForm } from "react-hook-form";
|
12
|
+
import * as yup from "yup";
|
13
|
+
import { z } from "zod";
|
14
|
+
import { Alert } from "../../Banners";
|
15
|
+
import { Field } from "../../Field";
|
16
|
+
import { InfoIcon } from "../../Icons";
|
17
|
+
import { Input } from "../../Input";
|
18
|
+
import stl from "../../styles/helpers/satellitePrefixer";
|
19
|
+
import { ExperimentalForm, ExperimentalFormErrorMessage, ExperimentalFormReset, ExperimentalFormSubmit } from "../Form";
|
20
|
+
import { useFormikAutoFocusOnError } from "./utils/useFormikAutoFocusOnError";
|
21
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
22
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
23
|
+
var initialFormData = {
|
24
|
+
name: "John Doe",
|
25
|
+
email: "jdoe@example.com",
|
26
|
+
company: "Doe Company",
|
27
|
+
phoneNumber: "(800) 555-0175"
|
28
|
+
};
|
29
|
+
var zodSchema = z.object({
|
30
|
+
name: z.string().min(1, {
|
31
|
+
message: "You must specify a name"
|
32
|
+
}),
|
33
|
+
email: z.string().email({
|
34
|
+
message: "You must specify a valid email"
|
35
|
+
}),
|
36
|
+
company: z.string().min(1, {
|
37
|
+
message: "You must specify a company"
|
38
|
+
}),
|
39
|
+
phoneNumber: z.string().min(1, {
|
40
|
+
message: "You must specify a phone number"
|
41
|
+
})
|
42
|
+
});
|
43
|
+
export var RHFDirtyFieldsComponent = function RHFDirtyFieldsComponent() {
|
44
|
+
var _useState = useState(initialFormData),
|
45
|
+
_useState2 = _slicedToArray(_useState, 2),
|
46
|
+
formData = _useState2[0],
|
47
|
+
setFormData = _useState2[1];
|
48
|
+
var _useForm = useForm({
|
49
|
+
defaultValues: initialFormData,
|
50
|
+
reValidateMode: "onChange",
|
51
|
+
resolver: zodResolver(zodSchema)
|
52
|
+
}),
|
53
|
+
control = _useForm.control,
|
54
|
+
handleSubmit = _useForm.handleSubmit,
|
55
|
+
getFieldStateFromReactHookForm = _useForm.getFieldState,
|
56
|
+
formState = _useForm.formState,
|
57
|
+
reset = _useForm.reset;
|
58
|
+
var getFieldState = function getFieldState(fieldName) {
|
59
|
+
var _fieldState$error;
|
60
|
+
var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
|
61
|
+
if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
|
62
|
+
return {
|
63
|
+
status: "invalid",
|
64
|
+
errors: [fieldState.error.message]
|
65
|
+
};
|
66
|
+
} else if (!fieldState.invalid && formState.isSubmitted) {
|
67
|
+
return {
|
68
|
+
status: "validated"
|
69
|
+
};
|
70
|
+
} else {
|
71
|
+
return {
|
72
|
+
status: "default"
|
73
|
+
};
|
74
|
+
}
|
75
|
+
};
|
76
|
+
var isFieldDirty = function isFieldDirty(fieldName) {
|
77
|
+
return getFieldStateFromReactHookForm(fieldName, formState).isDirty;
|
78
|
+
};
|
79
|
+
var dirtyFieldsNb = Object.keys(formState.dirtyFields).length;
|
80
|
+
return /*#__PURE__*/_jsxs("div", {
|
81
|
+
className: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
|
82
|
+
children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
|
83
|
+
onSubmit: handleSubmit(function (data) {
|
84
|
+
return setFormData(data);
|
85
|
+
}),
|
86
|
+
onReset: function onReset() {
|
87
|
+
return setFormData(initialFormData);
|
88
|
+
},
|
89
|
+
className: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
|
90
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Controller, {
|
91
|
+
name: "name",
|
92
|
+
control: control,
|
93
|
+
render: function render(_ref) {
|
94
|
+
var field = _ref.field;
|
95
|
+
return /*#__PURE__*/_jsx(Field, {
|
96
|
+
label: "Name",
|
97
|
+
labelFor: "name",
|
98
|
+
description: "Please enter your name",
|
99
|
+
state: getFieldState("name"),
|
100
|
+
className: cx(stl(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("name") && stl(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
101
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
102
|
+
id: "name",
|
103
|
+
placeholder: "Name",
|
104
|
+
required: true
|
105
|
+
}, field))
|
106
|
+
});
|
107
|
+
}
|
108
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
109
|
+
name: "email",
|
110
|
+
control: control,
|
111
|
+
render: function render(_ref2) {
|
112
|
+
var field = _ref2.field;
|
113
|
+
return /*#__PURE__*/_jsx(Field, {
|
114
|
+
label: "Email",
|
115
|
+
labelFor: "email",
|
116
|
+
description: "Please enter your email",
|
117
|
+
state: getFieldState("email"),
|
118
|
+
className: cx(stl(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("email") && stl(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
119
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
120
|
+
id: "email",
|
121
|
+
placeholder: "Email",
|
122
|
+
required: true
|
123
|
+
}, field))
|
124
|
+
});
|
125
|
+
}
|
126
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
127
|
+
name: "company",
|
128
|
+
control: control,
|
129
|
+
render: function render(_ref3) {
|
130
|
+
var field = _ref3.field;
|
131
|
+
return /*#__PURE__*/_jsx(Field, {
|
132
|
+
label: "Company",
|
133
|
+
labelFor: "company",
|
134
|
+
description: "Please enter your company",
|
135
|
+
state: getFieldState("company"),
|
136
|
+
className: cx(stl(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("company") && stl(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
137
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
138
|
+
id: "company",
|
139
|
+
placeholder: "Company",
|
140
|
+
required: true
|
141
|
+
}, field))
|
142
|
+
});
|
143
|
+
}
|
144
|
+
}), /*#__PURE__*/_jsx(Controller, {
|
145
|
+
name: "phoneNumber",
|
146
|
+
control: control,
|
147
|
+
render: function render(_ref4) {
|
148
|
+
var field = _ref4.field;
|
149
|
+
return /*#__PURE__*/_jsx(Field, {
|
150
|
+
label: "Phone Number",
|
151
|
+
labelFor: "phoneNumber",
|
152
|
+
description: "Please enter your phone number",
|
153
|
+
state: getFieldState("phoneNumber"),
|
154
|
+
className: cx(stl(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("phoneNumber") && stl(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
155
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
156
|
+
id: "phoneNumber",
|
157
|
+
placeholder: "Phone number",
|
158
|
+
required: true
|
159
|
+
}, field))
|
160
|
+
});
|
161
|
+
}
|
162
|
+
}), /*#__PURE__*/_jsxs("div", {
|
163
|
+
className: stl(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["flex gap-2"]))),
|
164
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
|
165
|
+
variant: "primary",
|
166
|
+
"aria-label": "Save updated changes",
|
167
|
+
disabled: !formState.isDirty,
|
168
|
+
children: "Save changes"
|
169
|
+
}), /*#__PURE__*/_jsx(ExperimentalFormReset, {
|
170
|
+
"aria-label": "Reset the form",
|
171
|
+
disabled: !formState.isDirty,
|
172
|
+
onClick: function onClick() {
|
173
|
+
return reset();
|
174
|
+
},
|
175
|
+
children: "Reset"
|
176
|
+
})]
|
177
|
+
}), dirtyFieldsNb > 0 && /*#__PURE__*/_jsxs(Alert, {
|
178
|
+
variant: "accent",
|
179
|
+
icon: InfoIcon,
|
180
|
+
className: stl(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["w-full"]))),
|
181
|
+
children: [dirtyFieldsNb, " updated fields"]
|
182
|
+
})]
|
183
|
+
}), /*#__PURE__*/_jsx("hr", {
|
184
|
+
className: stl(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["text-grey-500"])))
|
185
|
+
}), /*#__PURE__*/_jsx("code", {
|
186
|
+
className: stl(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["whitespace-pre"]))),
|
187
|
+
children: JSON.stringify(formData, null, 2)
|
188
|
+
})]
|
189
|
+
});
|
190
|
+
};
|
191
|
+
var yupSchema = yup.object({
|
192
|
+
name: yup.string().required("You must specify a name"),
|
193
|
+
email: yup.string().email("You must specify a valid email"),
|
194
|
+
company: yup.string().required("You must specify a company"),
|
195
|
+
phoneNumber: yup.string().required("You must specify a phone number")
|
196
|
+
});
|
197
|
+
export var FormikDirtyFieldsComponent = function FormikDirtyFieldsComponent() {
|
198
|
+
var _useState3 = useState(initialFormData),
|
199
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
200
|
+
formData = _useState4[0],
|
201
|
+
setFormData = _useState4[1];
|
202
|
+
var _useState5 = useState(false),
|
203
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
204
|
+
revalidationEnabled = _useState6[0],
|
205
|
+
setRevalidationEnabled = _useState6[1];
|
206
|
+
var formik = useFormik({
|
207
|
+
initialValues: initialFormData,
|
208
|
+
validateOnChange: revalidationEnabled,
|
209
|
+
validateOnBlur: revalidationEnabled,
|
210
|
+
validationSchema: yupSchema,
|
211
|
+
onSubmit: function onSubmit(values) {
|
212
|
+
return setFormData(values);
|
213
|
+
},
|
214
|
+
onReset: function onReset() {
|
215
|
+
return setFormData(initialFormData);
|
216
|
+
}
|
217
|
+
});
|
218
|
+
var getFieldState = function getFieldState(fieldName) {
|
219
|
+
var fieldMeta = formik.getFieldMeta(fieldName);
|
220
|
+
if (fieldMeta.error) {
|
221
|
+
return {
|
222
|
+
status: "invalid",
|
223
|
+
errors: [fieldMeta.error]
|
224
|
+
};
|
225
|
+
} else if (formik.isSubmitting && fieldMeta.touched) {
|
226
|
+
return {
|
227
|
+
status: "validated"
|
228
|
+
};
|
229
|
+
} else {
|
230
|
+
return {
|
231
|
+
status: "default"
|
232
|
+
};
|
233
|
+
}
|
234
|
+
};
|
235
|
+
var isFieldDirty = function isFieldDirty(fieldName) {
|
236
|
+
var fieldMeta = formik.getFieldMeta(fieldName);
|
237
|
+
return fieldMeta.value !== fieldMeta.initialValue;
|
238
|
+
};
|
239
|
+
var dirtyFieldsNb = Object.keys(formik.values).reduce(function (acc, fieldName) {
|
240
|
+
if (isFieldDirty(fieldName)) {
|
241
|
+
acc++;
|
242
|
+
}
|
243
|
+
return acc;
|
244
|
+
}, 0);
|
245
|
+
useFormikAutoFocusOnError(formik);
|
246
|
+
return /*#__PURE__*/_jsxs("div", {
|
247
|
+
className: stl(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["flex flex-col gap-8 w-3/5"]))),
|
248
|
+
children: [/*#__PURE__*/_jsxs(ExperimentalForm, {
|
249
|
+
onSubmit: function onSubmit(e) {
|
250
|
+
setRevalidationEnabled(true);
|
251
|
+
formik.handleSubmit(e);
|
252
|
+
},
|
253
|
+
onReset: function onReset(e) {
|
254
|
+
setRevalidationEnabled(false);
|
255
|
+
formik.handleReset(e);
|
256
|
+
},
|
257
|
+
className: stl(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["flex flex-col items-start gap-4 min-w-72"]))),
|
258
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormErrorMessage, {}), /*#__PURE__*/_jsx(Field, {
|
259
|
+
label: "Name",
|
260
|
+
labelFor: "name",
|
261
|
+
description: "Please enter your name",
|
262
|
+
state: getFieldState("name"),
|
263
|
+
className: cx(stl(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("name") && stl(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
264
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
265
|
+
id: "name",
|
266
|
+
placeholder: "Name",
|
267
|
+
required: true
|
268
|
+
}, formik.getFieldProps("name")))
|
269
|
+
}), /*#__PURE__*/_jsx(Field, {
|
270
|
+
label: "Email",
|
271
|
+
labelFor: "email",
|
272
|
+
description: "Please enter your email",
|
273
|
+
state: getFieldState("email"),
|
274
|
+
className: cx(stl(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("email") && stl(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
275
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
276
|
+
id: "email",
|
277
|
+
placeholder: "Email",
|
278
|
+
required: true
|
279
|
+
}, formik.getFieldProps("email")))
|
280
|
+
}), /*#__PURE__*/_jsx(Field, {
|
281
|
+
label: "Company",
|
282
|
+
labelFor: "company",
|
283
|
+
description: "Please enter your company",
|
284
|
+
state: getFieldState("company"),
|
285
|
+
className: cx(stl(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("company") && stl(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
286
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
287
|
+
id: "company",
|
288
|
+
placeholder: "Company",
|
289
|
+
required: true
|
290
|
+
}, formik.getFieldProps("company")))
|
291
|
+
}), /*#__PURE__*/_jsx(Field, {
|
292
|
+
label: "Phone Number",
|
293
|
+
labelFor: "phoneNumber",
|
294
|
+
description: "Please enter your phone number",
|
295
|
+
state: getFieldState("phoneNumber"),
|
296
|
+
className: cx(stl(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["w-full"]))), isFieldDirty("phoneNumber") && stl(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["text-xenon-500"])))),
|
297
|
+
children: /*#__PURE__*/_jsx(Input, _objectSpread({
|
298
|
+
id: "phoneNumber",
|
299
|
+
placeholder: "Phone number",
|
300
|
+
required: true
|
301
|
+
}, formik.getFieldProps("phoneNumber")))
|
302
|
+
}), /*#__PURE__*/_jsxs("div", {
|
303
|
+
className: stl(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["flex gap-2"]))),
|
304
|
+
children: [/*#__PURE__*/_jsx(ExperimentalFormSubmit, {
|
305
|
+
variant: "primary",
|
306
|
+
"aria-label": "Save updated changes",
|
307
|
+
disabled: !formik.dirty,
|
308
|
+
children: "Save changes"
|
309
|
+
}), /*#__PURE__*/_jsx(ExperimentalFormReset, {
|
310
|
+
"aria-label": "Reset the form",
|
311
|
+
disabled: !formik.dirty,
|
312
|
+
onClick: function onClick() {
|
313
|
+
return formik.resetForm();
|
314
|
+
},
|
315
|
+
children: "Reset"
|
316
|
+
})]
|
317
|
+
}), dirtyFieldsNb > 0 && /*#__PURE__*/_jsxs(Alert, {
|
318
|
+
variant: "accent",
|
319
|
+
icon: InfoIcon,
|
320
|
+
className: stl(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["w-full"]))),
|
321
|
+
children: [dirtyFieldsNb, " updated fields"]
|
322
|
+
})]
|
323
|
+
}), /*#__PURE__*/_jsx("hr", {
|
324
|
+
className: stl(_templateObject27 || (_templateObject27 = _taggedTemplateLiteral(["text-grey-500"])))
|
325
|
+
}), /*#__PURE__*/_jsx("code", {
|
326
|
+
className: stl(_templateObject28 || (_templateObject28 = _taggedTemplateLiteral(["whitespace-pre"]))),
|
327
|
+
children: JSON.stringify(formData, null, 2)
|
328
|
+
})]
|
329
|
+
});
|
330
|
+
};
|