@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,549 @@
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.RHFFieldsArraysComponent = exports.FormikFieldArraysComponent = void 0;
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+ var _zod = require("@hookform/resolvers/zod");
13
+ var _formik = require("formik");
14
+ var _react = require("react");
15
+ var _reactHookForm = require("react-hook-form");
16
+ var yup = _interopRequireWildcard(require("yup"));
17
+ var _zod2 = require("zod");
18
+ var _AutoComplete = require("../../AutoComplete");
19
+ var _Button = require("../../Button");
20
+ var _Field = require("../../Field");
21
+ var _Icons = require("../../Icons");
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 facets = ["size", "price", "gender", "color", "brand"];
33
+ var autocompleteFacets = facets.map(function (facet) {
34
+ return {
35
+ label: facet,
36
+ value: facet
37
+ };
38
+ });
39
+ var operators = ["is", "is not", "contains", "not contains"];
40
+ var facetValues = {
41
+ size: ["XS", "S", "M", "L", "XL", "XXL"],
42
+ price: ["0-50", "50-100", "100-150", "150-200", "200-250", "250-300"],
43
+ gender: ["Male", "Female", "Unisex"],
44
+ color: ["Red", "Green", "Blue", "Yellow", "Black", "White"],
45
+ brand: ["Nike", "Adidas", "Puma", "Reebok", "Under Armour"]
46
+ };
47
+ var getAutocompleteFacetValues = function getAutocompleteFacetValues(facet) {
48
+ return facet in facetValues ? facetValues[facet].map(function (value) {
49
+ return {
50
+ label: value,
51
+ value: value
52
+ };
53
+ }) : [];
54
+ };
55
+ var initialFormData = {
56
+ filterGroups: [[{
57
+ facet: undefined,
58
+ operator: "is",
59
+ value: undefined
60
+ }]]
61
+ };
62
+ var zodSchema = _zod2.z.object({
63
+ filterGroups: _zod2.z.array(_zod2.z.array(_zod2.z.object({
64
+ facet: _zod2.z.object({
65
+ label: _zod2.z.string(),
66
+ value: _zod2.z.string()
67
+ }, {
68
+ errorMap: function errorMap() {
69
+ return {
70
+ message: "You must specify a facet"
71
+ };
72
+ }
73
+ }),
74
+ operator: _zod2.z["enum"](operators),
75
+ value: _zod2.z.object({
76
+ label: _zod2.z.string(),
77
+ value: _zod2.z.string()
78
+ }, {
79
+ errorMap: function errorMap() {
80
+ return {
81
+ message: "You must specify a value"
82
+ };
83
+ }
84
+ })
85
+ }).transform(function (obj) {
86
+ return _objectSpread(_objectSpread({}, obj), {}, {
87
+ facet: obj.facet.value,
88
+ value: obj.value.value
89
+ });
90
+ })))
91
+ });
92
+ var RHFFieldsArraysComponent = exports.RHFFieldsArraysComponent = function RHFFieldsArraysComponent() {
93
+ var _useState = (0, _react.useState)(initialFormData),
94
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
95
+ formData = _useState2[0],
96
+ setFormData = _useState2[1];
97
+ var api = (0, _reactHookForm.useForm)({
98
+ defaultValues: initialFormData,
99
+ reValidateMode: "onChange",
100
+ resolver: (0, _zod.zodResolver)(zodSchema)
101
+ });
102
+ var control = api.control,
103
+ handleSubmit = api.handleSubmit,
104
+ reset = api.reset;
105
+ var _useFieldArray = (0, _reactHookForm.useFieldArray)({
106
+ name: "filterGroups",
107
+ control: control
108
+ }),
109
+ fields = _useFieldArray.fields,
110
+ append = _useFieldArray.append,
111
+ remove = _useFieldArray.remove;
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
113
+ className: (0, _satellitePrefixer["default"])(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["flex flex-col gap-8 w-full"]))),
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactHookForm.FormProvider, _objectSpread(_objectSpread({}, api), {}, {
115
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Form.ExperimentalForm, {
116
+ onSubmit: handleSubmit(function (data) {
117
+ return setFormData(data);
118
+ }),
119
+ onReset: function onReset() {
120
+ return setFormData(initialFormData);
121
+ },
122
+ className: (0, _satellitePrefixer["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col items-start gap-4 min-w-72"]))),
123
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormErrorMessage, {}), fields.map(function (field, index) {
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
125
+ className: (0, _satellitePrefixer["default"])(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["w-full flex flex-col gap-2"]))),
126
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
127
+ className: (0, _satellitePrefixer["default"])(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["w-full flex items-center justify-between"]))),
128
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
129
+ children: index === 0 ? "Only display items that match this group" : "And"
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.IconButton, {
131
+ title: "Remove group",
132
+ variant: "subtle",
133
+ icon: _Icons.MinusIcon,
134
+ disabled: fields.length === 1,
135
+ onClick: function onClick() {
136
+ return remove(index);
137
+ }
138
+ })]
139
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(RHFFilter, {
140
+ parentIndex: index
141
+ })]
142
+ }, field.id);
143
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
144
+ variant: "subtle",
145
+ startIcon: _Icons.PlusIcon,
146
+ onClick: function onClick() {
147
+ return (
148
+ // It accepts `object` and object[]`, so we need to append an array of array
149
+ append([[{
150
+ facet: undefined,
151
+ operator: "is",
152
+ value: undefined
153
+ }]])
154
+ );
155
+ },
156
+ children: "And"
157
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
158
+ className: (0, _satellitePrefixer["default"])(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["flex gap-2"]))),
159
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormSubmit, {
160
+ variant: "primary",
161
+ "aria-label": "Apply changes",
162
+ children: "Apply"
163
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormReset, {
164
+ "aria-label": "Reset the form",
165
+ onClick: function onClick() {
166
+ return reset();
167
+ },
168
+ children: "Reset"
169
+ })]
170
+ })]
171
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("hr", {
172
+ className: (0, _satellitePrefixer["default"])(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["text-grey-500"])))
173
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("code", {
174
+ className: (0, _satellitePrefixer["default"])(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["whitespace-pre"]))),
175
+ children: JSON.stringify(formData, null, 2)
176
+ })]
177
+ }))
178
+ });
179
+ };
180
+ var RHFFilter = function RHFFilter(_ref) {
181
+ var parentIndex = _ref.parentIndex;
182
+ var _useFormContext = (0, _reactHookForm.useFormContext)(),
183
+ control = _useFormContext.control,
184
+ formState = _useFormContext.formState,
185
+ getFieldStateFromReactHookForm = _useFormContext.getFieldState;
186
+ var _useFieldArray2 = (0, _reactHookForm.useFieldArray)({
187
+ name: "filterGroups.".concat(parentIndex),
188
+ control: control
189
+ }),
190
+ fields = _useFieldArray2.fields,
191
+ append = _useFieldArray2.append,
192
+ remove = _useFieldArray2.remove;
193
+ var filterGroup = (0, _reactHookForm.useWatch)({
194
+ name: "filterGroups.".concat(parentIndex)
195
+ });
196
+ var getFieldState = function getFieldState(fieldName) {
197
+ var _fieldState$error;
198
+ var fieldState = getFieldStateFromReactHookForm(fieldName, formState);
199
+ if ((_fieldState$error = fieldState.error) !== null && _fieldState$error !== void 0 && _fieldState$error.message) {
200
+ return {
201
+ status: "invalid",
202
+ errors: [fieldState.error.message]
203
+ };
204
+ } else if (!fieldState.invalid && formState.isSubmitted) {
205
+ return {
206
+ status: "validated"
207
+ };
208
+ } else {
209
+ return {
210
+ status: "default"
211
+ };
212
+ }
213
+ };
214
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
215
+ className: (0, _satellitePrefixer["default"])(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["w-full flex flex-col items-start gap-4 bg-grey-100 border border-grey-200 rounded p-4"]))),
216
+ children: [fields.map(function (field, index) {
217
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
218
+ className: (0, _satellitePrefixer["default"])(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["w-full flex items-stretch gap-2"]))),
219
+ children: [index > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
220
+ className: (0, _satellitePrefixer["default"])(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["mt-8"]))),
221
+ children: "Or"
222
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
223
+ name: "filterGroups.".concat(parentIndex, ".").concat(index, ".facet"),
224
+ control: control,
225
+ render: function render(_ref2) {
226
+ var field = _ref2.field;
227
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
228
+ label: "Facet",
229
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".facet"),
230
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".facet")),
231
+ className: (0, _satellitePrefixer["default"])(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
232
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AutoComplete.AutoComplete, _objectSpread({
233
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".facet"),
234
+ options: autocompleteFacets,
235
+ placeholder: "Size",
236
+ required: true,
237
+ creatable: true
238
+ }, field))
239
+ });
240
+ }
241
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
242
+ name: "filterGroups.".concat(parentIndex, ".").concat(index, ".operator"),
243
+ control: control,
244
+ render: function render(_ref3) {
245
+ var field = _ref3.field;
246
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
247
+ label: "Operator",
248
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".operator"),
249
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".operator")),
250
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.Select, _objectSpread(_objectSpread({
251
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".operator"),
252
+ className: (0, _satellitePrefixer["default"])(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["w-min"]))),
253
+ required: true
254
+ }, field), {}, {
255
+ children: operators.map(function (operator) {
256
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", {
257
+ value: operator,
258
+ children: operator
259
+ }, operator);
260
+ })
261
+ }))
262
+ });
263
+ }
264
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactHookForm.Controller, {
265
+ name: "filterGroups.".concat(parentIndex, ".").concat(index, ".value"),
266
+ control: control,
267
+ render: function render(_ref4) {
268
+ var _filterGroup$index;
269
+ var field = _ref4.field;
270
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
271
+ label: "Value",
272
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".value"),
273
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".value")),
274
+ className: (0, _satellitePrefixer["default"])(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
275
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AutoComplete.AutoComplete, _objectSpread({
276
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".value"),
277
+ options: getAutocompleteFacetValues((_filterGroup$index = filterGroup[index]) === null || _filterGroup$index === void 0 || (_filterGroup$index = _filterGroup$index.facet) === null || _filterGroup$index === void 0 ? void 0 : _filterGroup$index.label),
278
+ placeholder: "M",
279
+ required: true,
280
+ creatable: true
281
+ }, field))
282
+ });
283
+ }
284
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.IconButton, {
285
+ title: "Remove filter",
286
+ variant: "subtle",
287
+ icon: _Icons.MinusIcon,
288
+ className: (0, _satellitePrefixer["default"])(_templateObject14 || (_templateObject14 = (0, _taggedTemplateLiteral2["default"])(["mt-8 shrink-0"]))),
289
+ disabled: fields.length === 1,
290
+ onClick: function onClick() {
291
+ return remove(index);
292
+ }
293
+ })]
294
+ }, field.id);
295
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
296
+ variant: "subtle",
297
+ startIcon: _Icons.PlusIcon,
298
+ onClick: function onClick() {
299
+ return append({
300
+ facet: undefined,
301
+ operator: "is",
302
+ value: undefined
303
+ });
304
+ },
305
+ children: "Or"
306
+ })]
307
+ });
308
+ };
309
+ var yupSchema = yup.object({
310
+ filterGroups: yup.array(yup.array(yup.object({
311
+ facet: yup.object({
312
+ label: yup.string(),
313
+ value: yup.string()
314
+ })["default"](undefined).required("You must specify a facet"),
315
+ operator: yup.string().oneOf(operators).required(),
316
+ value: yup.object({
317
+ label: yup.string(),
318
+ value: yup.string()
319
+ })["default"](undefined).required("You must specify a value")
320
+ })))
321
+ });
322
+ var FormikFieldArraysComponent = exports.FormikFieldArraysComponent = function FormikFieldArraysComponent() {
323
+ var _useState3 = (0, _react.useState)(initialFormData),
324
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
325
+ formData = _useState4[0],
326
+ setFormData = _useState4[1];
327
+ var _useState5 = (0, _react.useState)(false),
328
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
329
+ revalidationEnabled = _useState6[0],
330
+ setRevalidationEnabled = _useState6[1];
331
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
332
+ className: (0, _satellitePrefixer["default"])(_templateObject15 || (_templateObject15 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col gap-8 w-full"]))),
333
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.Formik, {
334
+ initialValues: initialFormData,
335
+ validateOnChange: revalidationEnabled,
336
+ validateOnBlur: revalidationEnabled,
337
+ validationSchema: yupSchema,
338
+ onSubmit: function onSubmit(values) {
339
+ // We need to transform the values here because transforms in Yup are run before validations
340
+ var transformedValues = _objectSpread(_objectSpread({}, values), {}, {
341
+ filterGroups: values.filterGroups.map(function (group) {
342
+ return group.map(function (item) {
343
+ var _item$facet, _item$value;
344
+ return _objectSpread(_objectSpread({}, item), {}, {
345
+ facet: (_item$facet = item.facet) === null || _item$facet === void 0 ? void 0 : _item$facet.label,
346
+ value: (_item$value = item.value) === null || _item$value === void 0 ? void 0 : _item$value.label
347
+ });
348
+ });
349
+ })
350
+ });
351
+ setFormData(transformedValues);
352
+ },
353
+ onReset: function onReset() {
354
+ return setFormData(initialFormData);
355
+ },
356
+ render: function render(_ref5) {
357
+ var handleSubmit = _ref5.handleSubmit,
358
+ handleReset = _ref5.handleReset,
359
+ values = _ref5.values,
360
+ resetForm = _ref5.resetForm;
361
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Form.ExperimentalForm, {
362
+ onSubmit: function onSubmit(e) {
363
+ setRevalidationEnabled(true);
364
+ handleSubmit(e);
365
+ },
366
+ onReset: function onReset(e) {
367
+ setRevalidationEnabled(false);
368
+ handleReset(e);
369
+ },
370
+ className: (0, _satellitePrefixer["default"])(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteral2["default"])(["flex flex-col items-start gap-4 min-w-72"]))),
371
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormErrorMessage, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.FieldArray, {
372
+ name: "filterGroups",
373
+ render: function render(_ref6) {
374
+ var push = _ref6.push,
375
+ remove = _ref6.remove;
376
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
377
+ children: [values.filterGroups.map(function (_, index) {
378
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
379
+ className: (0, _satellitePrefixer["default"])(_templateObject17 || (_templateObject17 = (0, _taggedTemplateLiteral2["default"])(["w-full flex flex-col gap-2"]))),
380
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
381
+ className: (0, _satellitePrefixer["default"])(_templateObject18 || (_templateObject18 = (0, _taggedTemplateLiteral2["default"])(["w-full flex items-center justify-between"]))),
382
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
383
+ children: index === 0 ? "Only display items that match this group" : "And"
384
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.IconButton, {
385
+ title: "Remove group",
386
+ variant: "subtle",
387
+ icon: _Icons.MinusIcon,
388
+ disabled: values.filterGroups.length === 1,
389
+ onClick: function onClick() {
390
+ return remove(index);
391
+ }
392
+ })]
393
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(FormikFilter, {
394
+ parentIndex: index
395
+ })]
396
+ }, index);
397
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
398
+ variant: "subtle",
399
+ startIcon: _Icons.PlusIcon,
400
+ onClick: function onClick() {
401
+ return push([{
402
+ facet: undefined,
403
+ operator: "is",
404
+ value: undefined
405
+ }]);
406
+ },
407
+ children: "And"
408
+ })]
409
+ });
410
+ }
411
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
412
+ className: (0, _satellitePrefixer["default"])(_templateObject19 || (_templateObject19 = (0, _taggedTemplateLiteral2["default"])(["flex gap-2"]))),
413
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormSubmit, {
414
+ variant: "primary",
415
+ "aria-label": "Apply changes",
416
+ children: "Apply"
417
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Form.ExperimentalFormReset, {
418
+ "aria-label": "Reset the form",
419
+ onClick: function onClick() {
420
+ return resetForm();
421
+ },
422
+ children: "Reset"
423
+ })]
424
+ })]
425
+ });
426
+ }
427
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("hr", {
428
+ className: (0, _satellitePrefixer["default"])(_templateObject20 || (_templateObject20 = (0, _taggedTemplateLiteral2["default"])(["text-grey-500"])))
429
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("code", {
430
+ className: (0, _satellitePrefixer["default"])(_templateObject21 || (_templateObject21 = (0, _taggedTemplateLiteral2["default"])(["whitespace-pre"]))),
431
+ children: JSON.stringify(formData, null, 2)
432
+ })]
433
+ });
434
+ };
435
+ var FormikFilter = function FormikFilter(_ref7) {
436
+ var parentIndex = _ref7.parentIndex;
437
+ var formik = (0, _formik.useFormikContext)();
438
+ var getFieldState = function getFieldState(fieldName) {
439
+ var fieldMeta = formik.getFieldMeta(fieldName);
440
+ if (fieldMeta.error) {
441
+ return {
442
+ status: "invalid",
443
+ errors: [fieldMeta.error]
444
+ };
445
+ } else if (formik.isSubmitting && fieldMeta.touched) {
446
+ return {
447
+ status: "validated"
448
+ };
449
+ } else {
450
+ return {
451
+ status: "default"
452
+ };
453
+ }
454
+ };
455
+ (0, _useFormikAutoFocusOnError.useFormikAutoFocusOnError)(formik);
456
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_formik.FieldArray, {
457
+ name: "filterGroups.".concat(parentIndex),
458
+ render: function render(_ref8) {
459
+ var push = _ref8.push,
460
+ remove = _ref8.remove,
461
+ form = _ref8.form;
462
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
463
+ className: (0, _satellitePrefixer["default"])(_templateObject22 || (_templateObject22 = (0, _taggedTemplateLiteral2["default"])(["w-full flex flex-col items-start gap-4 bg-grey-100 border border-grey-200 rounded p-4"]))),
464
+ children: [formik.values.filterGroups[parentIndex].map(function (_, index) {
465
+ var _form$values$filterGr;
466
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
467
+ className: (0, _satellitePrefixer["default"])(_templateObject23 || (_templateObject23 = (0, _taggedTemplateLiteral2["default"])(["w-full flex items-stretch gap-2"]))),
468
+ children: [index > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
469
+ className: (0, _satellitePrefixer["default"])(_templateObject24 || (_templateObject24 = (0, _taggedTemplateLiteral2["default"])(["mt-8"]))),
470
+ children: "Or"
471
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
472
+ label: "Facet",
473
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".facet"),
474
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".facet")),
475
+ className: (0, _satellitePrefixer["default"])(_templateObject25 || (_templateObject25 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
476
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AutoComplete.AutoComplete, _objectSpread(_objectSpread({
477
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".facet"),
478
+ options: autocompleteFacets,
479
+ placeholder: "Size",
480
+ required: true,
481
+ creatable: true
482
+ }, form.getFieldProps("filterGroups.".concat(parentIndex, ".").concat(index, ".facet"))), {}, {
483
+ multiple: false // We need to override it because otherwise `getFieldProps` would spread `multiple`
484
+ ,
485
+ onChange: function onChange(value) {
486
+ return form.setFieldValue("filterGroups.".concat(parentIndex, ".").concat(index, ".facet"), value);
487
+ }
488
+ }))
489
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
490
+ label: "Operator",
491
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".operator"),
492
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".operator")),
493
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.Select, _objectSpread(_objectSpread({
494
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".operator"),
495
+ className: (0, _satellitePrefixer["default"])(_templateObject26 || (_templateObject26 = (0, _taggedTemplateLiteral2["default"])(["w-min"]))),
496
+ required: true
497
+ }, form.getFieldProps("filterGroups.".concat(parentIndex, ".").concat(index, ".operator"))), {}, {
498
+ children: operators.map(function (operator) {
499
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("option", {
500
+ value: operator,
501
+ children: operator
502
+ }, operator);
503
+ })
504
+ }))
505
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Field.Field, {
506
+ label: "Value",
507
+ labelFor: "filterGroups.".concat(parentIndex, ".").concat(index, ".value"),
508
+ state: getFieldState("filterGroups.".concat(parentIndex, ".").concat(index, ".value")),
509
+ className: (0, _satellitePrefixer["default"])(_templateObject27 || (_templateObject27 = (0, _taggedTemplateLiteral2["default"])(["w-full"]))),
510
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AutoComplete.AutoComplete, _objectSpread(_objectSpread({
511
+ id: "filterGroups.".concat(parentIndex, ".").concat(index, ".value"),
512
+ options: getAutocompleteFacetValues((_form$values$filterGr = form.values.filterGroups[parentIndex][index]) === null || _form$values$filterGr === void 0 || (_form$values$filterGr = _form$values$filterGr.facet) === null || _form$values$filterGr === void 0 ? void 0 : _form$values$filterGr.label),
513
+ placeholder: "M",
514
+ required: true,
515
+ creatable: true
516
+ }, form.getFieldProps("filterGroups.".concat(parentIndex, ".").concat(index, ".value"))), {}, {
517
+ multiple: false // We need to override it because otherwise `getFieldProps` would spread `multiple`
518
+ ,
519
+ onChange: function onChange(value) {
520
+ return form.setFieldValue("filterGroups.".concat(parentIndex, ".").concat(index, ".value"), value);
521
+ }
522
+ }))
523
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.IconButton, {
524
+ title: "Remove filter",
525
+ variant: "subtle",
526
+ icon: _Icons.MinusIcon,
527
+ className: (0, _satellitePrefixer["default"])(_templateObject28 || (_templateObject28 = (0, _taggedTemplateLiteral2["default"])(["mt-8 shrink-0"]))),
528
+ disabled: form.values.filterGroups[parentIndex].length === 1,
529
+ onClick: function onClick() {
530
+ return remove(index);
531
+ }
532
+ })]
533
+ }, index);
534
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
535
+ variant: "subtle",
536
+ startIcon: _Icons.PlusIcon,
537
+ onClick: function onClick() {
538
+ return push({
539
+ facet: undefined,
540
+ operator: "is",
541
+ value: undefined
542
+ });
543
+ },
544
+ children: "Or"
545
+ })]
546
+ });
547
+ }
548
+ });
549
+ };