intelicoreact 0.1.18 → 0.1.21

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 (54) hide show
  1. package/dist/Atomic/FormElements/RadioInput/RadioInput.js +1 -1
  2. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +10 -16
  3. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.scss +37 -7
  4. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +5 -3
  5. package/dist/Atomic/FormElements/RangeList/RangeList.js +296 -0
  6. package/dist/Atomic/FormElements/RangeList/RangeList.scss +124 -0
  7. package/dist/Atomic/FormElements/RangeList/RangeList.stories.js +101 -0
  8. package/dist/Atomic/FormElements/RangeList/partial/AnyOuterClass.scss +31 -0
  9. package/dist/Atomic/FormElements/Switcher/Switcher.js +9 -7
  10. package/dist/Atomic/FormElements/Switcher/Switcher.scss +30 -6
  11. package/dist/Atomic/FormElements/Switcher/Switcher.stories.js +4 -1
  12. package/dist/Atomic/FormElements/Switcher/partial/AnyOuterClass.scss +6 -0
  13. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.scss +17 -9
  14. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +5 -3
  15. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.js +5 -5
  16. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.scss +20 -2
  17. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +4 -1
  18. package/dist/Atomic/FormElements/TextSwitcher/partial/AnyOuterClass.scss +4 -0
  19. package/dist/Atomic/FormElements/Textarea/Textarea.js +3 -13
  20. package/dist/Atomic/FormElements/Textarea/Textarea.scss +30 -28
  21. package/dist/Atomic/FormElements/Textarea/Textarea.stories.js +1 -4
  22. package/dist/Atomic/UI/Status/Status.scss +2 -0
  23. package/dist/Functions/useFormTools/form-drivers/ArrayWithObjects.js +69 -0
  24. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +166 -0
  25. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +89 -0
  26. package/dist/Functions/useFormTools/functions/General.js +158 -0
  27. package/dist/Functions/useFormTools/functions/RenderFields.js +113 -0
  28. package/dist/Functions/useFormTools/functions/usePrevious.js +19 -0
  29. package/dist/Functions/useFormTools/index.js +759 -0
  30. package/dist/Molecular/SwitcherHide/SwitcherHide.js +58 -0
  31. package/dist/Molecular/SwitcherHide/SwitcherHide.scss +31 -0
  32. package/dist/Molecular/SwitcherHide/SwitcherHide.stories.js +54 -0
  33. package/dist/Molecular/SwitcherHide/partial/AnyOuterClass.scss +6 -0
  34. package/dist/Molecular/SwitcherRadio/SwitcherRadio.js +69 -0
  35. package/dist/Molecular/SwitcherRadio/SwitcherRadio.scss +31 -0
  36. package/dist/Molecular/SwitcherRadio/SwitcherRadio.stories.js +96 -0
  37. package/dist/Molecular/SwitcherRadio/partial/AnyOuterClass.scss +6 -0
  38. package/dist/Molecular/SwitcherRange/SwitcherRange.js +72 -0
  39. package/dist/Molecular/SwitcherRange/SwitcherRange.scss +24 -0
  40. package/dist/Molecular/SwitcherRange/SwitcherRange.stories.js +59 -0
  41. package/dist/Molecular/SwitcherRangeList/SwitcherRangeList.js +16 -0
  42. package/dist/Molecular/SwitcherRangeList/SwitcherRangeList.scss +12 -0
  43. package/dist/Molecular/SwitcherRangeList/SwitcherRangeList.stories.js +19 -0
  44. package/dist/Molecular/SwitcherRangeList/partial/AnyOuterClass.scss +6 -0
  45. package/dist/Molecular/SwitcherTagsDropdown/SwitcherTagsDropdown.js +179 -0
  46. package/dist/Molecular/SwitcherTagsDropdown/SwitcherTagsDropdown.scss +48 -0
  47. package/dist/Molecular/SwitcherTagsDropdown/SwitcherTagsDropdown.stories.js +109 -0
  48. package/dist/Molecular/SwitcherTagsDropdown/partial/AnyOuterClass.scss +12 -0
  49. package/dist/Molecular/SwitcherTextarea/SwitcherTextarea.js +81 -0
  50. package/dist/Molecular/SwitcherTextarea/SwitcherTextarea.scss +23 -0
  51. package/dist/Molecular/SwitcherTextarea/SwitcherTextarea.stories.js +70 -0
  52. package/dist/Molecular/SwitcherTextarea/partial/AnyOuterClass.scss +20 -0
  53. package/package.json +1 -1
  54. package/dist/Functions/useFormTools.js +0 -429
@@ -0,0 +1,759 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = useFormTools;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ var _react = require("react");
19
+
20
+ var _General2 = _interopRequireDefault(require("./functions/General"));
21
+
22
+ var _ArrayWithObjects = _interopRequireDefault(require("./form-drivers/ArrayWithObjects"));
23
+
24
+ var _ObjectWithIterableObjects = _interopRequireDefault(require("./form-drivers/ObjectWithIterableObjects"));
25
+
26
+ var _ObjectWithNamedKeyObjects = _interopRequireDefault(require("./form-drivers/ObjectWithNamedKeyObjects"));
27
+
28
+ var _RenderFields = _interopRequireDefault(require("./functions/RenderFields"));
29
+
30
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
31
+
32
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
33
+
34
+ var DefaultFocusControllerProps = {
35
+ setAutoFocus: true,
36
+ onlyEmptyFieldAutoFocus: false
37
+ };
38
+
39
+ function useFormTools() {
40
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
41
+ form = _ref.form,
42
+ setForm = _ref.setForm,
43
+ FormType = _ref.FormType,
44
+ FormFields = _ref.FormFields,
45
+ _ref$FormDataDriverNa = _ref.FormDataDriverName,
46
+ FormDataDriverName = _ref$FormDataDriverNa === void 0 ? 'ArrayWithObjects' : _ref$FormDataDriverNa,
47
+ _ref$FormDataDriver = _ref.FormDataDriver,
48
+ FormDataDriver = _ref$FormDataDriver === void 0 ? null : _ref$FormDataDriver,
49
+ _ref$FocusControllerP = _ref.FocusControllerProps,
50
+ FocusControllerProps = _ref$FocusControllerP === void 0 ? DefaultFocusControllerProps : _ref$FocusControllerP;
51
+
52
+ FocusControllerProps = _objectSpread(_objectSpread({}, DefaultFocusControllerProps), FocusControllerProps);
53
+ var FormDataDrivers = {
54
+ ArrayWithObjects: {
55
+ handlers: _ArrayWithObjects.default,
56
+ default: true
57
+ },
58
+ ObjectWithIterableObjects: {
59
+ handlers: _ObjectWithIterableObjects.default
60
+ },
61
+ ObjectWithNamedKeyObjects: {
62
+ handlers: _ObjectWithNamedKeyObjects.default
63
+ }
64
+ };
65
+
66
+ var getFormDataDriver = function getFormDataDriver(name) {
67
+ var _FormDataDrivers$name, _Object$values$find;
68
+
69
+ return FormDataDriver || ((_FormDataDrivers$name = FormDataDrivers[name]) === null || _FormDataDrivers$name === void 0 ? void 0 : _FormDataDrivers$name.handlers) || ((_Object$values$find = Object.values(FormDataDrivers).find(function (df) {
70
+ return df.default === true;
71
+ })) === null || _Object$values$find === void 0 ? void 0 : _Object$values$find.handlers) || function () {
72
+ return {};
73
+ };
74
+ };
75
+
76
+ var getFormDataDriverInstance = function getFormDataDriverInstance(name) {
77
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
78
+ args[_key - 1] = arguments[_key];
79
+ }
80
+
81
+ return getFormDataDriver(name).apply(void 0, args);
82
+ };
83
+
84
+ var _General = (0, _General2.default)(),
85
+ getFieldClassName = _General.getFieldClassName,
86
+ updateFormField = _General.updateFormField;
87
+
88
+ var _getFormDataDriverIns = getFormDataDriverInstance(FormDataDriverName, {
89
+ form: form,
90
+ setForm: setForm,
91
+ FormFields: FormFields
92
+ }),
93
+ getFieldData = _getFormDataDriverIns.getFieldData,
94
+ getFormField = _getFormDataDriverIns.getFormField,
95
+ setFormFields = _getFormDataDriverIns.setFormFields,
96
+ setFormField = _getFormDataDriverIns.setFormField,
97
+ getFormFieldsAsArray = _getFormDataDriverIns.getFormFieldsAsArray,
98
+ getFormFieldsKeys = _getFormDataDriverIns.getFormFieldsKeys,
99
+ removeAllFormFields = _getFormDataDriverIns.removeAllFormFields; ///////////////////////////////////////////////////////////////
100
+ //--- OnChange Observer ---//--- START ---//
101
+
102
+
103
+ var _useState = (0, _react.useState)({}),
104
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
105
+ onChangeObservers = _useState2[0],
106
+ setOnChangeObservers = _useState2[1];
107
+
108
+ var addOnChangeObserver = function addOnChangeObserver(key, cb) {
109
+ var observerId = null;
110
+ setOnChangeObservers(function (state) {
111
+ //Set Default Value
112
+ if (!state[key]) state[key] = {};
113
+ observerId = state[key].length;
114
+ state[key][observerId] = cb;
115
+ return state;
116
+ });
117
+ return observerId;
118
+ };
119
+
120
+ var removeOnChangeObserver = function removeOnChangeObserver(key, id) {
121
+ setOnChangeObservers(function (state) {
122
+ //Set Default Value
123
+ if (!state[key]) return state;
124
+ state[key] = Object.keys(state).filter(function (cbId) {
125
+ return cbId !== id;
126
+ }).map(function (cbId) {
127
+ return state[key][cbId];
128
+ });
129
+ return state;
130
+ });
131
+ };
132
+
133
+ var onChangeObserver = function onChangeObserver(key, value) {
134
+ if (!onChangeObservers[key] || (0, _typeof2.default)(onChangeObservers[key]) !== 'object') return;
135
+ var Observers = onChangeObservers[key];
136
+ Object.values(Observers).map(function (cb) {
137
+ cb({
138
+ value: value,
139
+ form: form
140
+ });
141
+ return null;
142
+ });
143
+ };
144
+
145
+ var onFieldChange = function onFieldChange(key, value) {
146
+ // if (value === getFormField(key)?.value) return false;
147
+ onChangeObserver(key, value);
148
+ setFormField(function (field) {
149
+ return _objectSpread(_objectSpread({}, field), {}, {
150
+ error: '',
151
+ value: value
152
+ });
153
+ }, key); // eslint-disable-next-line no-use-before-define
154
+ // if (autoFocusedField === key) {
155
+ // setTimeout(() => {
156
+ // // eslint-disable-next-line no-use-before-define
157
+ // setFieldFocus({key, form});
158
+ // // eslint-disable-next-line no-use-before-define
159
+ // setAutoFocusedField(null);
160
+ // }, 1);
161
+ // }
162
+ }; //--- OnChange Observer ---//--- END ---//
163
+ ///////////////////////////////////////////////////////////////
164
+ ///////////////////////////////////////////////////////////////
165
+ //--- Form Submit Blocker ---//--- START ---//
166
+
167
+
168
+ var _useState3 = (0, _react.useState)([]),
169
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
170
+ formSubmitBlockers = _useState4[0],
171
+ setFormSubmitBlockers = _useState4[1];
172
+
173
+ var toggleFormSubmitBlock = function toggleFormSubmitBlock(key, value) {
174
+ setFormSubmitBlockers(function (state) {
175
+ return state.includes(key) || !value ? (0, _toConsumableArray2.default)(state.filter(function (k) {
176
+ return k !== key;
177
+ })) : [].concat((0, _toConsumableArray2.default)(state), [key]);
178
+ });
179
+ };
180
+
181
+ var clearFormSubmitBlockers = function clearFormSubmitBlockers() {
182
+ return setFormSubmitBlockers([]);
183
+ }; //--- Form Submit Blocker ---//--- END ---//
184
+ ///////////////////////////////////////////////////////////////
185
+ ///////////////////////////////////////////////////////////////
186
+ //--- Property Observer Blocker ---//--- START ---//
187
+ // const [propertyObservers, setPropertyObservers] = useState({});
188
+ // function addPropertyObserver () {
189
+ // };
190
+ //--- Property Observer Blocker ---//--- END ---//
191
+ ///////////////////////////////////////////////////////////////
192
+ ///////////////////////////////////////////////////////////////
193
+ //--- Render Fields Controller ---//--- START ---//
194
+
195
+
196
+ var _useState5 = (0, _react.useState)(false),
197
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
198
+ isFormFieldsAdded = _useState6[0],
199
+ setIsFormFieldsAdded = _useState6[1];
200
+
201
+ var _useState7 = (0, _react.useState)([]),
202
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
203
+ renderFormFields = _useState8[0],
204
+ setRenderFormFieldsState = _useState8[1];
205
+
206
+ var setRenderFormFields = function setRenderFormFields(data) {
207
+ setIsFormFieldsAdded(true); // eslint-disable-next-line no-use-before-define
208
+
209
+ removeRenderFields(renderFormFields); // eslint-disable-next-line no-use-before-define
210
+
211
+ resetIsInitFocused();
212
+ setRenderFormFieldsState(data);
213
+ };
214
+
215
+ var addRenderFields = function addRenderFields(fields) {
216
+ setRenderFormFieldsState(function (state) {
217
+ return [].concat((0, _toConsumableArray2.default)(state), (0, _toConsumableArray2.default)(fields));
218
+ });
219
+ };
220
+
221
+ var removeRenderFields = function removeRenderFields(fields) {
222
+ setRenderFormFieldsState(function (state) {
223
+ return state.filter(function (field) {
224
+ return !fields.includes(field);
225
+ });
226
+ });
227
+ };
228
+
229
+ var _useState9 = (0, _react.useState)(false),
230
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
231
+ isFormRendered = _useState10[0],
232
+ setIsFormRendered = _useState10[1]; //On Render Fields Change
233
+
234
+
235
+ (0, _react.useEffect)(function () {
236
+ if (isFormFieldsAdded) setIsFormRendered(false); //Add Form Fields
237
+
238
+ if (renderFormFields.length === 0) return null;
239
+ setFormFields(function (fields) {
240
+ return renderFormFields.reduce(function (result, key) {
241
+ var _field$className;
242
+
243
+ var fieldData = getFieldData(key);
244
+ var field = !getFormField(key) ? fieldData : getFormField(key); // eslint-disable-next-line no-use-before-define
245
+
246
+ if (!(field !== null && field !== void 0 && field.className) || (field === null || field === void 0 ? void 0 : (_field$className = field.className) === null || _field$className === void 0 ? void 0 : _field$className.indexOf(getFieldClassName(key, FormType))) === -1) {
247
+ // eslint-disable-next-line no-use-before-define
248
+ field.className = "".concat(field === null || field === void 0 ? void 0 : field.className, " ").concat(getFieldClassName(key, FormType));
249
+ }
250
+
251
+ if ((0, _typeof2.default)(fieldData === null || fieldData === void 0 ? void 0 : fieldData.label) === 'object') {
252
+ field.label = fieldData.label[FormType] || fieldData.label.default;
253
+ }
254
+
255
+ field.ref = /*#__PURE__*/(0, _react.createRef)();
256
+ field.isValueChangedByUser = false; //Is Field Value Changed By USER
257
+ // eslint-disable-next-line no-use-before-define
258
+
259
+ addOnFieldRenderedObserver(key, function () {
260
+ var _getFormField, _getFormField$ref, _getFormField$ref$cur;
261
+
262
+ var element = (_getFormField = getFormField(key)) === null || _getFormField === void 0 ? void 0 : (_getFormField$ref = _getFormField.ref) === null || _getFormField$ref === void 0 ? void 0 : (_getFormField$ref$cur = _getFormField$ref.current) === null || _getFormField$ref$cur === void 0 ? void 0 : _getFormField$ref$cur.querySelector((field === null || field === void 0 ? void 0 : field.focusSelector) || 'input');
263
+
264
+ var handler = function handler() {
265
+ return setFormField({
266
+ isValueChangedByUser: true
267
+ }, key);
268
+ };
269
+
270
+ element === null || element === void 0 ? void 0 : element.addEventListener('paste', handler, {
271
+ once: true
272
+ });
273
+ element === null || element === void 0 ? void 0 : element.addEventListener('keypress', handler, {
274
+ once: true
275
+ });
276
+ }, true);
277
+ return updateFormField(result, field, key);
278
+ }, fields);
279
+ });
280
+ }, [renderFormFields]);
281
+
282
+ var _useState11 = (0, _react.useState)([]),
283
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
284
+ onFormRenderObservers = _useState12[0],
285
+ setOnFormRenderObservers = _useState12[1];
286
+
287
+ var addOnFormRenderObserver = function addOnFormRenderObserver(cb) {
288
+ var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
289
+ _ref2$once = _ref2.once,
290
+ once = _ref2$once === void 0 ? false : _ref2$once;
291
+
292
+ setOnFormRenderObservers(function (state) {
293
+ return [].concat((0, _toConsumableArray2.default)(state), [{
294
+ cb: cb,
295
+ once: once,
296
+ isWorkedOut: false
297
+ }]);
298
+ });
299
+ };
300
+
301
+ var updateOnFormRenderObserver = function updateOnFormRenderObserver(key, data) {
302
+ setOnFormRenderObservers(function (state) {
303
+ var copy = (0, _toConsumableArray2.default)(state);
304
+ copy[key] = _objectSpread(_objectSpread({}, state[key]), data);
305
+ return copy;
306
+ });
307
+ };
308
+
309
+ var onFormRenderWorker = function onFormRenderWorker() {
310
+ onFormRenderObservers.map(function (_ref3, key) {
311
+ var cb = _ref3.cb,
312
+ once = _ref3.once,
313
+ isWorkedOut = _ref3.isWorkedOut;
314
+ if (once && isWorkedOut) return null;
315
+ cb(form);
316
+ updateOnFormRenderObserver(key, {
317
+ isWorkedOut: true
318
+ });
319
+ return null;
320
+ });
321
+ }; //On Form Rendered
322
+
323
+
324
+ (0, _react.useEffect)(function () {
325
+ if (isFormRendered || !onFormRenderObservers.length) return null;
326
+
327
+ if (getFormFieldsKeys(form).length === renderFormFields.length) {
328
+ setIsFormRendered(true);
329
+ onFormRenderWorker();
330
+ }
331
+ }, [form, renderFormFields]); //--- Render Fields Controller ---//--- END ---//
332
+ ///////////////////////////////////////////////////////////////
333
+ ///////////////////////////////////////////////////////////////
334
+ //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- START ---//
335
+
336
+ var hightliteErrorLabels = function hightliteErrorLabels() {
337
+ var fields = getFormFieldsAsArray();
338
+ var filtered = fields === null || fields === void 0 ? void 0 : fields.reduce(function (result, field) {
339
+ if (field !== null && field !== void 0 && field.errorLabelHightlite) {
340
+ // eslint-disable-next-line no-use-before-define
341
+ result.push(_objectSpread(_objectSpread({}, field), {}, {
342
+ className: getFieldClassName(field === null || field === void 0 ? void 0 : field.key, FormType)
343
+ }));
344
+ }
345
+
346
+ return result;
347
+ }, []);
348
+ filtered === null || filtered === void 0 ? void 0 : filtered.map(function (field) {
349
+ var formField = document.querySelector(".".concat(field === null || field === void 0 ? void 0 : field.className));
350
+ if (!formField) return null;
351
+ formField.classList.remove('errorLabelHightlite');
352
+
353
+ if (field !== null && field !== void 0 && field.error) {
354
+ formField.classList.add('errorLabelHightlite');
355
+ }
356
+
357
+ return null;
358
+ });
359
+ };
360
+
361
+ (0, _react.useEffect)(function () {
362
+ hightliteErrorLabels();
363
+ }, [form]); //--- HIGHTLIGHT LABELS IF FIELD WITH ERROR ---//--- END ---//
364
+ ///////////////////////////////////////////////////////////////
365
+ ///////////////////////////////////////////////////////////////
366
+ //--- Fields Focus Controller ---//--- START ---//
367
+
368
+ var _useState13 = (0, _react.useState)(false),
369
+ _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
370
+ isInitFocused = _useState14[0],
371
+ setIsInitFocused = _useState14[1];
372
+
373
+ var _useState15 = (0, _react.useState)(null),
374
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
375
+ autoFocusedField = _useState16[0],
376
+ setAutoFocusedField = _useState16[1];
377
+
378
+ var setFirstFieldInitFocused = function setFirstFieldInitFocused() {
379
+ return setIsInitFocused(true);
380
+ };
381
+
382
+ var resetIsInitFocused = function resetIsInitFocused() {
383
+ return setIsInitFocused(false);
384
+ };
385
+
386
+ var toggleFieldFocus = function toggleFieldFocus(_ref4) {
387
+ var key = _ref4.key,
388
+ _ref4$cb = _ref4.cb,
389
+ cb = _ref4$cb === void 0 ? function () {} : _ref4$cb,
390
+ argForm = _ref4.form,
391
+ field = _ref4.field;
392
+ var action = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'focus';
393
+ if (!key) return null;
394
+ if (!argForm) argForm = form;
395
+ var formField = field || getFormField(key, argForm);
396
+
397
+ if (!formField || !formField.ref) {
398
+ return false;
399
+ }
400
+
401
+ if (action === 'focus' && FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean(formField === null || formField === void 0 ? void 0 : formField.value)) return null;
402
+ setTimeout(function () {
403
+ var _formField$ref$curren, _formField$ref$curren2;
404
+
405
+ (_formField$ref$curren = formField.ref.current) === null || _formField$ref$curren === void 0 ? void 0 : (_formField$ref$curren2 = _formField$ref$curren.querySelector((formField === null || formField === void 0 ? void 0 : formField.focusSelector) || 'input')) === null || _formField$ref$curren2 === void 0 ? void 0 : _formField$ref$curren2[action]();
406
+ cb();
407
+ }, 50);
408
+ };
409
+
410
+ var setFieldFocus = function setFieldFocus(_ref5) {
411
+ var key = _ref5.key,
412
+ _ref5$cb = _ref5.cb,
413
+ cb = _ref5$cb === void 0 ? function () {} : _ref5$cb,
414
+ argForm = _ref5.form,
415
+ field = _ref5.field;
416
+ return toggleFieldFocus({
417
+ key: key,
418
+ cb: cb,
419
+ form: argForm,
420
+ field: field
421
+ }, 'focus');
422
+ };
423
+
424
+ var setFieldBlur = function setFieldBlur(_ref6) {
425
+ var key = _ref6.key,
426
+ _ref6$cb = _ref6.cb,
427
+ cb = _ref6$cb === void 0 ? function () {} : _ref6$cb,
428
+ argForm = _ref6.form,
429
+ field = _ref6.field;
430
+ return toggleFieldFocus({
431
+ key: key,
432
+ cb: cb,
433
+ form: argForm,
434
+ field: field
435
+ }, 'blur');
436
+ };
437
+
438
+ var setFirstFieldFocus = function setFirstFieldFocus() {
439
+ var _field;
440
+
441
+ var field = null;
442
+
443
+ for (var i = 0; i < renderFormFields.length && !field; ++i) {
444
+ var key = renderFormFields[i];
445
+ var tmpField = getFormField(key);
446
+ if (tmpField && !(tmpField !== null && tmpField !== void 0 && tmpField.disabled)) field = tmpField;
447
+ }
448
+
449
+ if (!field) return false;
450
+
451
+ if (FocusControllerProps.onlyEmptyFieldAutoFocus && Boolean((_field = field) === null || _field === void 0 ? void 0 : _field.value)) {
452
+ setFirstFieldInitFocused();
453
+ return false;
454
+ }
455
+
456
+ setAutoFocusedField(field.key);
457
+
458
+ var callback = function callback() {
459
+ setFormField({
460
+ value: field.value
461
+ }, field.key);
462
+ setFirstFieldInitFocused();
463
+ };
464
+
465
+ setTimeout(function () {
466
+ return setFieldFocus({
467
+ key: field.key,
468
+ cb: callback,
469
+ form: form
470
+ });
471
+ }, 50);
472
+ };
473
+
474
+ var _useState17 = (0, _react.useState)({}),
475
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
476
+ onFieldFocusCallbacks = _useState18[0],
477
+ setOnFieldFocusCallbacks = _useState18[1];
478
+
479
+ var addOnFieldFocusCallback = function addOnFieldFocusCallback(key, cb) {
480
+ setOnFieldFocusCallbacks(function (state) {
481
+ var stateCopy = _objectSpread({}, state);
482
+
483
+ if (!state[key]) stateCopy[key] = [];
484
+ stateCopy[key].push(cb);
485
+ return stateCopy;
486
+ });
487
+ };
488
+
489
+ var callOnFieldFocusCallbacks = function callOnFieldFocusCallbacks(key) {
490
+ var _onFieldFocusCallback;
491
+
492
+ if (!Array.isArray(onFieldFocusCallbacks[key])) return null;
493
+ (_onFieldFocusCallback = onFieldFocusCallbacks[key]) === null || _onFieldFocusCallback === void 0 ? void 0 : _onFieldFocusCallback.map(function (cb) {
494
+ return cb();
495
+ });
496
+ };
497
+
498
+ var _useState19 = (0, _react.useState)([]),
499
+ _useState20 = (0, _slicedToArray2.default)(_useState19, 2),
500
+ focusOnRenderFields = _useState20[0],
501
+ setFocusOnRenderFields = _useState20[1];
502
+
503
+ var addFocusFieldOnRender = function addFocusFieldOnRender(key, cb) {
504
+ setFocusOnRenderFields(function (state) {
505
+ return [].concat((0, _toConsumableArray2.default)(state), [key]);
506
+ });
507
+ if (cb) addOnFieldFocusCallback(key, cb);
508
+ };
509
+
510
+ var removeFocusFieldOnRender = function removeFocusFieldOnRender(key) {
511
+ setFocusOnRenderFields(function (state) {
512
+ return state.filter(function (field) {
513
+ return field !== key;
514
+ });
515
+ });
516
+ };
517
+
518
+ (0, _react.useEffect)(function () {
519
+ if (FocusControllerProps.setAutoFocus && !isInitFocused && !autoFocusedField) setFirstFieldFocus();
520
+
521
+ if (focusOnRenderFields.length) {
522
+ var _getFormFieldsKeys;
523
+
524
+ (_getFormFieldsKeys = getFormFieldsKeys(form)) === null || _getFormFieldsKeys === void 0 ? void 0 : _getFormFieldsKeys.map(function (key) {
525
+ var _getFormField2, _getFormField2$value;
526
+
527
+ if (focusOnRenderFields.includes(key) && ((_getFormField2 = getFormField(key)) === null || _getFormField2 === void 0 ? void 0 : (_getFormField2$value = _getFormField2.value) === null || _getFormField2$value === void 0 ? void 0 : _getFormField2$value.length) === 0) {
528
+ var cb = function cb() {
529
+ removeFocusFieldOnRender(key);
530
+ callOnFieldFocusCallbacks(key);
531
+ };
532
+
533
+ setFieldFocus({
534
+ key: key,
535
+ form: form,
536
+ cb: cb
537
+ });
538
+ }
539
+
540
+ return null;
541
+ });
542
+ }
543
+ }, [form, focusOnRenderFields, isInitFocused]);
544
+ (0, _react.useEffect)(function () {
545
+ setAutoFocusedField(null);
546
+ }, [isInitFocused]);
547
+ (0, _react.useEffect)(function () {
548
+ resetIsInitFocused();
549
+ }, [FormType]); //Remove Focus From Autocomplete field !!! TODO
550
+ // useEffect(() => {
551
+ // if (!autoFocusedField) return null;
552
+ // const field = getFormField(autoFocusedField);
553
+ // if (field?.value !== '' && !field?.isValueChangedByUser) {
554
+ // setFieldBlur({key: autoFocusedField, form});
555
+ // }
556
+ // }, [autoFocusedField, form]);
557
+ //--- Fields Focus Controller ---//--- END ---//
558
+ ///////////////////////////////////////////////////////////////
559
+ ///////////////////////////////////////////////////////////////
560
+ //--- OnFieldRendered Observer ---//--- START ---//
561
+
562
+ var _useState21 = (0, _react.useState)({}),
563
+ _useState22 = (0, _slicedToArray2.default)(_useState21, 2),
564
+ onFieldRenderedObservers = _useState22[0],
565
+ setOnFieldRenderedObservers = _useState22[1];
566
+
567
+ var _useState23 = (0, _react.useState)(false),
568
+ _useState24 = (0, _slicedToArray2.default)(_useState23, 2),
569
+ isFieldObserversReset = _useState24[0],
570
+ setIsFieldObserversReset = _useState24[1];
571
+
572
+ var resetOnFieldRenderObserversWorkedOut = function resetOnFieldRenderObserversWorkedOut() {
573
+ if (!isFieldObserversReset && renderFormFields.length) {
574
+ renderFormFields.map(function (key) {
575
+ setFormField({
576
+ isOnRenderObserversWorkedOut: false
577
+ }, key);
578
+ return key;
579
+ });
580
+ setIsFieldObserversReset(true);
581
+ }
582
+ };
583
+
584
+ var addOnFieldRenderedObserver = function addOnFieldRenderedObserver(key, cb) {
585
+ var isOnceCallable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
586
+ var observerId = null;
587
+ setOnFieldRenderedObservers(function (state) {
588
+ //Set Default Value
589
+ if (!state[key]) state[key] = {};
590
+ observerId = Object.keys(state[key]).length || 0;
591
+ state[key][observerId] = {
592
+ f: cb,
593
+ isOnceCallable: isOnceCallable
594
+ };
595
+ return state;
596
+ });
597
+ return observerId;
598
+ };
599
+
600
+ var updateOnFieldRenderedObserver = function updateOnFieldRenderedObserver(key, id, data) {
601
+ setOnFieldRenderedObservers(function (state) {
602
+ //Set Default Value
603
+ if (!state[key]) return state;
604
+ state[key][id] = _objectSpread(_objectSpread({}, state[key][id]), data);
605
+ return state;
606
+ });
607
+ };
608
+
609
+ var removeOnFieldRenderedObserver = function removeOnFieldRenderedObserver(key, id) {
610
+ setOnFieldRenderedObservers(function (state) {
611
+ //Set Default Value
612
+ if (!state[key]) return state;
613
+ state[key] = Object.keys(state).filter(function (cbId) {
614
+ return cbId !== id;
615
+ }).map(function (cbId) {
616
+ return state[key][cbId];
617
+ });
618
+ return state;
619
+ });
620
+ };
621
+
622
+ var onFieldRenderedObserver = function onFieldRenderedObserver(key, data) {
623
+ if (!onFieldRenderedObservers[key] || (0, _typeof2.default)(onFieldRenderedObservers[key]) !== 'object') return;
624
+ var Observers = onFieldRenderedObservers[key];
625
+ var FilteredObservers = Object.values(Observers).filter(function (observer) {
626
+ return !(observer !== null && observer !== void 0 && observer.isObserverWorkedOut);
627
+ });
628
+ if (FilteredObservers.length === 0) return null;
629
+ setFormField({
630
+ isOnRenderObserversWorkedOut: true
631
+ }, key);
632
+ FilteredObservers.map(function (_ref7, id) {
633
+ var f = _ref7.f,
634
+ isOnceCallable = _ref7.isOnceCallable;
635
+ f(data);
636
+ if (isOnceCallable) updateOnFieldRenderedObserver(key, id, {
637
+ isObserverWorkedOut: true
638
+ });
639
+ return null;
640
+ });
641
+ };
642
+
643
+ var onRenderObserverWorker = function onRenderObserverWorker() {
644
+ var _getFormFieldsKeys2;
645
+
646
+ return (_getFormFieldsKeys2 = getFormFieldsKeys(form)) === null || _getFormFieldsKeys2 === void 0 ? void 0 : _getFormFieldsKeys2.map(function (key) {
647
+ //OnFieldRendered
648
+ var fieldData = getFormField(key);
649
+
650
+ if (!(fieldData !== null && fieldData !== void 0 && fieldData.isOnRenderObserversWorkedOut)) {
651
+ onFieldRenderedObserver(key, fieldData);
652
+ return {
653
+ key: key,
654
+ isWorkedOut: true
655
+ };
656
+ }
657
+
658
+ return {
659
+ key: key,
660
+ isWorkedOut: false
661
+ };
662
+ });
663
+ };
664
+
665
+ (0, _react.useEffect)(function () {
666
+ resetOnFieldRenderObserversWorkedOut();
667
+ onRenderObserverWorker();
668
+ }, [form]);
669
+ (0, _react.useEffect)(function () {
670
+ setIsFieldObserversReset(false);
671
+ }, [FormType]); //--- OnFieldRendered Observer ---//--- END ---//
672
+ ///////////////////////////////////////////////////////////////
673
+ ///////////////////////////////////////////////////////////////
674
+ //Detect What Changed || TRY TO DO
675
+ // const compare = async (prev, current) => {
676
+ // if (!prev) return current;
677
+ // return new Promise((resolve) => {
678
+ // Object.keys(current).reduce((result, key, i, arr) => {
679
+ // //If PROPERTY is NOT EXISTS BEFORE
680
+ // if ([null, undefined].includes(prev[key])) {
681
+ // result[key] = current[key];
682
+ // }
683
+ // //If PROPERTY is AN OBJECT
684
+ // else if (typeof current[key] === 'object') {
685
+ // //If PROPERTY is EXISTS BEFORE
686
+ // const innerCompare = compare(prev[key], current[key]);
687
+ // // //If SOMETHING CHANGED
688
+ // if (innerCompare?.length) result[key] = innerCompare;
689
+ // }
690
+ // //If PROPERTY is AN SIMPLE VALUE and PROPERTY CHANGED
691
+ // else if (prev[key] !== current[key]) {
692
+ // result[key] = current[key];
693
+ // }
694
+ // if (i === arr.length-1) {
695
+ // resolve(result);
696
+ // }
697
+ // return result;
698
+ // }, {});
699
+ // });
700
+ // };
701
+
702
+ return {
703
+ FormDataDrivers: FormDataDrivers,
704
+ //OnChangeObserver
705
+ addOnChangeObserver: addOnChangeObserver,
706
+ removeOnChangeObserver: removeOnChangeObserver,
707
+ onChangeObservers: onChangeObservers,
708
+ //OnChangeHandler
709
+ onFieldChange: onFieldChange,
710
+ //Form Submit Blocker
711
+ toggleFormSubmitBlock: toggleFormSubmitBlock,
712
+ clearFormSubmitBlockers: clearFormSubmitBlockers,
713
+ isFormSubmitBlocked: Boolean(formSubmitBlockers.length),
714
+ //Property Observers
715
+ // addPropertyObserver,
716
+ //Render Fields
717
+ renderFormFields: renderFormFields,
718
+ setRenderFormFields: setRenderFormFields,
719
+ addRenderFields: addRenderFields,
720
+ removeRenderFields: removeRenderFields,
721
+ getFieldClassName: getFieldClassName,
722
+ //Field Focus Controller
723
+ isInitFocused: isInitFocused,
724
+ setFirstFieldInitFocused: setFirstFieldInitFocused,
725
+ resetIsInitFocused: resetIsInitFocused,
726
+ setFieldFocus: setFieldFocus,
727
+ setFieldBlur: setFieldBlur,
728
+ setFirstFieldFocus: setFirstFieldFocus,
729
+ autoFocusedField: autoFocusedField,
730
+ addFocusFieldOnRender: addFocusFieldOnRender,
731
+ removeFocusFieldOnRender: removeFocusFieldOnRender,
732
+ //Field Render Controller
733
+ addOnFieldRenderedObserver: addOnFieldRenderedObserver,
734
+ removeOnFieldRenderedObserver: removeOnFieldRenderedObserver,
735
+ onFieldRenderedObservers: onFieldRenderedObservers,
736
+ setFormField: setFormField,
737
+ setFormFields: setFormFields,
738
+ removeAllFormFields: removeAllFormFields,
739
+ updateFormField: updateFormField,
740
+ addOnFormRenderObserver: addOnFormRenderObserver,
741
+ renderFields: function renderFields(_ref8) {
742
+ var _ref8$form = _ref8.form,
743
+ argForm = _ref8$form === void 0 ? form : _ref8$form,
744
+ _ref8$fields = _ref8.fields,
745
+ argFields = _ref8$fields === void 0 ? renderFormFields : _ref8$fields,
746
+ _ref8$cols = _ref8.cols,
747
+ argCols = _ref8$cols === void 0 ? 1 : _ref8$cols,
748
+ RenderFieldComponent = _ref8.RenderFieldComponent;
749
+ return (0, _RenderFields.default)({
750
+ form: argForm,
751
+ fields: argFields,
752
+ cols: argCols,
753
+ RenderFieldComponent: RenderFieldComponent,
754
+ onFieldChange: onFieldChange,
755
+ FormDataDriver: getFormDataDriver(FormDataDriverName)
756
+ });
757
+ }
758
+ };
759
+ }