@bigbinary/neeto-molecules 3.9.10 → 3.9.12

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 (79) hide show
  1. package/dist/Schedule.js +199 -182
  2. package/dist/Schedule.js.map +1 -1
  3. package/dist/cjs/Schedule.js +196 -179
  4. package/dist/cjs/Schedule.js.map +1 -1
  5. package/package.json +3 -1
  6. package/types/AuditLogs.d.ts +5 -3
  7. package/types/Breadcrumbs.d.ts +5 -3
  8. package/types/BrowserSupport.d.ts +5 -3
  9. package/types/Builder.d.ts +5 -7
  10. package/types/CalendarView.d.ts +8 -6
  11. package/types/Codeblock.d.ts +7 -5
  12. package/types/Columns.d.ts +8 -6
  13. package/types/ConfigurePageSidebar.d.ts +5 -3
  14. package/types/ConfirmationModal.d.ts +5 -3
  15. package/types/Container.d.ts +5 -3
  16. package/types/CopyToClipboardButton.d.ts +6 -4
  17. package/types/Currency.d.ts +7 -5
  18. package/types/CustomDomain.d.ts +6 -4
  19. package/types/CustomDomainDashboard.d.ts +6 -4
  20. package/types/DateFormat.d.ts +5 -9
  21. package/types/DateRangeFilter.d.ts +7 -5
  22. package/types/DeleteArchiveModal.d.ts +5 -3
  23. package/types/DeviceIncompatibilityMessage.d.ts +5 -3
  24. package/types/DocumentEditor.d.ts +6 -4
  25. package/types/DownloadMobileAppCallout.d.ts +5 -3
  26. package/types/DynamicVariables.d.ts +6 -4
  27. package/types/EmailForm.d.ts +7 -5
  28. package/types/EmailFormProvider.d.ts +3 -2
  29. package/types/EmailPreview.d.ts +5 -3
  30. package/types/EmojiPicker.d.ts +6 -4
  31. package/types/EmojiReactions.d.ts +5 -3
  32. package/types/ErrorPage.d.ts +6 -4
  33. package/types/FileUpload.d.ts +8 -6
  34. package/types/FloatingActionMenu.d.ts +6 -4
  35. package/types/GoogleFontPicker.d.ts +27 -20
  36. package/types/Header.d.ts +9 -6
  37. package/types/HelpPopover.d.ts +7 -5
  38. package/types/IconPicker.d.ts +5 -3
  39. package/types/ImageWithFallback.d.ts +5 -3
  40. package/types/InlineInput.d.ts +9 -7
  41. package/types/Insights.d.ts +5 -4
  42. package/types/IntegrationCard.d.ts +7 -5
  43. package/types/IpRestriction.d.ts +5 -3
  44. package/types/KeyboardShortcuts.d.ts +6 -4
  45. package/types/LoginPage.d.ts +5 -3
  46. package/types/MadeWith.d.ts +5 -3
  47. package/types/MenuBar.d.ts +7 -5
  48. package/types/Metadata.d.ts +5 -3
  49. package/types/MobilePreviewHeader.d.ts +5 -3
  50. package/types/MoreDropdown.d.ts +6 -4
  51. package/types/NavigationHeader.d.ts +7 -6
  52. package/types/NeetoWidget.d.ts +5 -3
  53. package/types/Onboarding.d.ts +5 -3
  54. package/types/OptionFields.d.ts +4 -2
  55. package/types/PageLoader.d.ts +5 -3
  56. package/types/PhoneNumber.d.ts +15 -13
  57. package/types/ProductEmbed.d.ts +5 -3
  58. package/types/PublishBlock.d.ts +6 -4
  59. package/types/Rename.d.ts +6 -4
  60. package/types/ResponsiveDevicePicker.d.ts +5 -3
  61. package/types/Schedule.d.ts +5 -3
  62. package/types/Scrollable.d.ts +6 -4
  63. package/types/Search.d.ts +6 -4
  64. package/types/SendToFields.d.ts +6 -4
  65. package/types/SessionEnvironment.d.ts +8 -5
  66. package/types/Settings.d.ts +5 -4
  67. package/types/ShareRecordingPane.d.ts +4 -2
  68. package/types/ShareViaEmail.d.ts +5 -3
  69. package/types/ShareViaLink.d.ts +5 -4
  70. package/types/Sidebar.d.ts +7 -5
  71. package/types/StatusDropdown.d.ts +5 -3
  72. package/types/StickyRibbonsContainer.d.ts +5 -3
  73. package/types/SubHeader.d.ts +7 -5
  74. package/types/SuffixedInput.d.ts +5 -3
  75. package/types/TableWrapper.d.ts +5 -3
  76. package/types/Taxonomy.d.ts +6 -4
  77. package/types/TimeFormat.d.ts +5 -9
  78. package/types/TimezoneMismatchModal.d.ts +5 -3
  79. package/types/ToggleFeatureCard.d.ts +7 -5
@@ -3,7 +3,6 @@
3
3
  var React = require('react');
4
4
  var formik = require('formik');
5
5
  var neetoCist = require('@bigbinary/neeto-cist');
6
- var ramda = require('ramda');
7
6
  var general = require('@bigbinary/neeto-commons-frontend/utils/general');
8
7
  var Typography = require('@bigbinary/neetoui/Typography');
9
8
  var reactI18next = require('react-i18next');
@@ -13,6 +12,7 @@ var neetoTimeZones = require('@bigbinary/neeto-time-zones');
13
12
  var i18next = require('i18next');
14
13
  var utils = require('@bigbinary/neeto-commons-frontend/utils');
15
14
  var datetime = require('@bigbinary/neeto-commons-frontend/utils/datetime');
15
+ var ramda = require('ramda');
16
16
  var yup = require('yup');
17
17
  var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
18
18
  var _createClass = require('@babel/runtime/helpers/createClass');
@@ -197,22 +197,25 @@ var sortDays = function sortDays(chosenIndex) {
197
197
  if (chosenIndex < 0 || chosenIndex >= 7) return DAYS;
198
198
  return [].concat(_toConsumableArray(DAYS.slice(chosenIndex)), _toConsumableArray(DAYS.slice(0, chosenIndex)));
199
199
  };
200
+ var wdayValidation = yup__namespace.object().shape({
201
+ periods: yup__namespace.array().of(yup__namespace.object().shape({
202
+ startTime: yup__namespace.string().required(i18next.t("neetoMolecules.schedule.errors.period.startTime")),
203
+ endTime: yup__namespace.string().required(i18next.t("neetoMolecules.schedule.errors.period.endTime")).test("ensureToTimeNotBehindFromTime", i18next.t("neetoMolecules.schedule.errors.period.isBehind"), function (value) {
204
+ var startTime = this.parent.startTime;
205
+ if (isFromAndToSame(value, startTime)) return true;
206
+ return isTimeBehind(startTime, value);
207
+ })
208
+ }).test("ensureTimeNotSame", i18next.t("neetoMolecules.schedule.errors.period.sameTime"), function (value) {
209
+ var startTime = value.startTime,
210
+ endTime = value.endTime;
211
+ return !isFromAndToSame(startTime, endTime);
212
+ })).ensureSlotsCantOverlap()
213
+ });
200
214
  var getScheduleValidationSchema = function getScheduleValidationSchema() {
201
215
  return yup__namespace.object().shape({
202
- wdays: yup__namespace.array().of(yup__namespace.object().shape({
203
- periods: yup__namespace.array().of(yup__namespace.object().shape({
204
- startTime: yup__namespace.string().required(i18next.t("neetoMolecules.schedule.errors.period.startTime")),
205
- endTime: yup__namespace.string().required(i18next.t("neetoMolecules.schedule.errors.period.endTime")).test("ensureToTimeNotBehindFromTime", i18next.t("neetoMolecules.schedule.errors.period.isBehind"), function (value) {
206
- var startTime = this.parent.startTime;
207
- if (isFromAndToSame(value, startTime)) return true;
208
- return isTimeBehind(startTime, value);
209
- })
210
- }).test("ensureTimeNotSame", i18next.t("neetoMolecules.schedule.errors.period.sameTime"), function (value) {
211
- var startTime = value.startTime,
212
- endTime = value.endTime;
213
- return !isFromAndToSame(startTime, endTime);
214
- })).ensureSlotsCantOverlap()
215
- }))
216
+ wdays: yup__namespace.object().shape(ramda.fromPairs(ramda.map(function (day) {
217
+ return [day, wdayValidation];
218
+ }, DAYS)))
216
219
  });
217
220
  };
218
221
  var getUserTimeZone = function getUserTimeZone() {
@@ -302,6 +305,62 @@ var findIndicesOfOverlappingRangesInPeriods = function findIndicesOfOverlappingR
302
305
  secondIndex: secondIndex
303
306
  };
304
307
  };
308
+ var handleCopy = function handleCopy(_ref3) {
309
+ var _values$wdays$day$per;
310
+ var values = _ref3.values,
311
+ day = _ref3.day,
312
+ setFieldValue = _ref3.setFieldValue,
313
+ wdaysToCopy = _ref3.wdaysToCopy;
314
+ var newPeriods = (_values$wdays$day$per = values.wdays[day].periods) === null || _values$wdays$day$per === void 0 ? void 0 : _values$wdays$day$per.map(ramda.pick(["startTime", "endTime"]));
315
+ if (neetoCist.isNotPresent(newPeriods)) return;
316
+ wdaysToCopy.forEach(function (wday) {
317
+ return setFieldValue("wdays.".concat(wday), {
318
+ available: true,
319
+ periods: newPeriods.map(ramda.assoc("wday", wday))
320
+ });
321
+ });
322
+ };
323
+ var buildFormValuesArray = function buildFormValuesArray(_ref4) {
324
+ var firstDay = _ref4.firstDay,
325
+ periods = _ref4.periods;
326
+ return sortDays(firstDay).map(function (wday) {
327
+ var _periods$wday;
328
+ return {
329
+ periods: sortPeriodsByKey({
330
+ periods: periods[wday],
331
+ key: "startTime",
332
+ order: "asc"
333
+ }),
334
+ available: !!((_periods$wday = periods[wday]) !== null && _periods$wday !== void 0 && _periods$wday.length),
335
+ wday: wday
336
+ };
337
+ });
338
+ };
339
+ var buildFormValuesObject = function buildFormValuesObject(_ref5) {
340
+ var periods = _ref5.periods;
341
+ var formValues = {};
342
+ DAYS.forEach(function (wday) {
343
+ var _periods$wday2;
344
+ formValues[wday] = {
345
+ periods: sortPeriodsByKey({
346
+ periods: periods[wday],
347
+ key: "startTime",
348
+ order: "asc"
349
+ }),
350
+ available: !!((_periods$wday2 = periods[wday]) !== null && _periods$wday2 !== void 0 && _periods$wday2.length),
351
+ wday: wday
352
+ };
353
+ });
354
+ return formValues;
355
+ };
356
+ var processFormValues = function processFormValues(values, firstDay) {
357
+ return {
358
+ wdays: buildFormValuesArray({
359
+ firstDay: firstDay,
360
+ periods: ramda.map(ramda.prop("periods"), values.wdays)
361
+ })
362
+ };
363
+ };
305
364
 
306
365
  var DisplayAvailability = function DisplayAvailability(_ref) {
307
366
  var periods = _ref.periods;
@@ -365,20 +424,17 @@ var DisplayAvailability = function DisplayAvailability(_ref) {
365
424
 
366
425
  var buildSlotIntervals = function buildSlotIntervals(_ref) {
367
426
  var interval = _ref.interval,
368
- bookedSlots = _ref.bookedSlots,
369
- slotType = _ref.slotType,
370
- _ref$selectedValue = _ref.selectedValue,
371
- selectedValue = _ref$selectedValue === void 0 ? null : _ref$selectedValue;
372
- var selectedOption = {
373
- label: selectedValue,
374
- value: selectedValue
375
- };
427
+ bookedSlots = _ref.bookedSlots;
376
428
  var allIntervalsForADay = dayjsExtended.timeIntervalsForDay(interval);
377
429
  allIntervalsForADay.push(END_OF_DAY);
378
- var uniqBookedSlots = ramda.uniq(ramda.pluck(slotType, bookedSlots));
379
- var slotsAvailableForBooking = ramda.difference(allIntervalsForADay, uniqBookedSlots);
380
- var slots = slotsAvailableForBooking.map(neetoCist.toLabelAndValue);
381
- return selectedValue ? sortSlots([selectedOption].concat(_toConsumableArray(slots))) : slots;
430
+ return function (slotType) {
431
+ var selectedValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
432
+ var uniqBookedSlots = ramda.uniq(ramda.pluck(slotType, bookedSlots));
433
+ var slotsAvailableForBooking = ramda.difference(allIntervalsForADay, uniqBookedSlots);
434
+ var slots = slotsAvailableForBooking.map(neetoCist.toLabelAndValue);
435
+ if (!selectedValue) return slots;
436
+ return sortSlots([neetoCist.toLabelAndValue(selectedValue)].concat(_toConsumableArray(slots)));
437
+ };
382
438
  };
383
439
  var sortSlots = function sortSlots(slots) {
384
440
  return slots.sort(function (a, b) {
@@ -421,36 +477,43 @@ var addDefaultPeriod = function addDefaultPeriod(wday) {
421
477
  };
422
478
 
423
479
  var ScheduleRow = function ScheduleRow(_ref) {
424
- var values = _ref.values,
425
- setFieldValue = _ref.setFieldValue,
426
- wdayIndex = _ref.wdayIndex,
427
- day = _ref.day;
480
+ var day = _ref.day;
481
+ var _useFormikContext = formik.useFormikContext(),
482
+ values = _useFormikContext.values,
483
+ setFieldValue = _useFormikContext.setFieldValue;
484
+ var bookedSlots = values.wdays[day].periods;
485
+ var _useContext = React.useContext(ScheduleContext),
486
+ allowAddPeriod = _useContext.allowAddPeriod,
487
+ slotInterval = _useContext.slotInterval;
428
488
  var _useTranslation = reactI18next.useTranslation(),
429
489
  t = _useTranslation.t;
490
+ var sortSlotsInterval = React.useMemo(function () {
491
+ return buildSlotIntervals({
492
+ interval: slotInterval,
493
+ bookedSlots: bookedSlots
494
+ });
495
+ }, [slotInterval, bookedSlots]);
430
496
  var handleAddRow = function handleAddRow(arrayHelpers) {
431
- if (neetoCist.isNotPresent(values.wdays[wdayIndex].periods)) {
497
+ if (neetoCist.isNotPresent(values.wdays[day].periods)) {
432
498
  arrayHelpers.push(addDefaultPeriod(day));
433
499
  } else {
434
- arrayHelpers.push(generateNewPeriod(values.wdays[wdayIndex].periods, day));
500
+ arrayHelpers.push(generateNewPeriod(values.wdays[day].periods, day));
435
501
  }
436
- setFieldValue("wdays[".concat(wdayIndex, "].available"), true);
502
+ setFieldValue("wdays.".concat(day, ".available"), true);
437
503
  };
438
504
  var handleDeleteRow = function handleDeleteRow(arrayHelpers, index) {
439
- var isLastRowDeleted = values.wdays[wdayIndex].periods.length === 1;
505
+ var isLastRowDeleted = values.wdays[day].periods.length === 1;
440
506
  arrayHelpers.remove(index);
441
- setFieldValue("wdays[".concat(wdayIndex, "].available"), !isLastRowDeleted);
507
+ setFieldValue("wdays.".concat(day, ".available"), !isLastRowDeleted);
442
508
  };
443
- var _useContext = React.useContext(ScheduleContext),
444
- allowAddPeriod = _useContext.allowAddPeriod,
445
- slotInterval = _useContext.slotInterval;
446
509
  return /*#__PURE__*/jsxRuntime.jsx(formik.FieldArray, {
447
- name: "wdays[".concat(wdayIndex, "].periods"),
510
+ name: "wdays.".concat(day, ".periods"),
448
511
  render: function render(arrayHelpers) {
449
- var _values$wdays$wdayInd, _values$wdays$wdayInd2;
512
+ var _values$wdays$day, _values$wdays$day$per;
450
513
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
451
- children: [neetoCist.isPresent((_values$wdays$wdayInd = values.wdays[wdayIndex]) === null || _values$wdays$wdayInd === void 0 ? void 0 : _values$wdays$wdayInd.periods) && /*#__PURE__*/jsxRuntime.jsx("div", {
514
+ children: [neetoCist.isPresent((_values$wdays$day = values.wdays[day]) === null || _values$wdays$day === void 0 ? void 0 : _values$wdays$day.periods) && /*#__PURE__*/jsxRuntime.jsx("div", {
452
515
  className: "w-full space-y-2",
453
- children: (_values$wdays$wdayInd2 = values.wdays[wdayIndex].periods) === null || _values$wdays$wdayInd2 === void 0 ? void 0 : _values$wdays$wdayInd2.map(function (period, index) {
516
+ children: (_values$wdays$day$per = values.wdays[day].periods) === null || _values$wdays$day$per === void 0 ? void 0 : _values$wdays$day$per.map(function (period, index) {
454
517
  return /*#__PURE__*/jsxRuntime.jsxs("div", {
455
518
  className: "flex w-full flex-col sm:mx-auto sm:w-80",
456
519
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
@@ -462,18 +525,13 @@ var ScheduleRow = function ScheduleRow(_ref) {
462
525
  className: "w-full",
463
526
  components: REMOVE_SELECT_DOWN_ARROW,
464
527
  filterOption: customFilter,
465
- name: "wdays[".concat(wdayIndex, "].periods[").concat(index, "].startTime"),
528
+ name: "wdays.".concat(day, ".periods[").concat(index, "].startTime"),
466
529
  placeholder: t("neetoMolecules.schedule.startTime"),
467
530
  styles: BLUR_TEXT_WHEN_SELECT_MENU_IS_OPEN,
468
- options: buildSlotIntervals({
469
- interval: slotInterval,
470
- bookedSlots: values.wdays[wdayIndex].periods,
471
- slotType: "startTime",
472
- selectedValue: period === null || period === void 0 ? void 0 : period.startTime
473
- }),
531
+ options: sortSlotsInterval("startTime", period === null || period === void 0 ? void 0 : period.startTime),
474
532
  value: slotsSelectComponentDefaultValue(period === null || period === void 0 ? void 0 : period.startTime),
475
533
  onChange: function onChange(e) {
476
- return setFieldValue("wdays[".concat(wdayIndex, "].periods[").concat(index, "].startTime"), (e === null || e === void 0 ? void 0 : e.value) || "");
534
+ return setFieldValue("wdays.".concat(day, ".periods[").concat(index, "].startTime"), (e === null || e === void 0 ? void 0 : e.value) || "");
477
535
  }
478
536
  }), /*#__PURE__*/jsxRuntime.jsx(Select, {
479
537
  isClearable: true,
@@ -481,18 +539,13 @@ var ScheduleRow = function ScheduleRow(_ref) {
481
539
  className: "w-full",
482
540
  components: REMOVE_SELECT_DOWN_ARROW,
483
541
  filterOption: customFilter,
484
- name: "wdays[".concat(wdayIndex, "].periods[").concat(index, "].endTime"),
542
+ name: "wdays.".concat(day, ".periods[").concat(index, "].endTime"),
543
+ options: sortSlotsInterval("endTime", period === null || period === void 0 ? void 0 : period.endTime),
485
544
  placeholder: t("neetoMolecules.schedule.endTime"),
486
545
  styles: BLUR_TEXT_WHEN_SELECT_MENU_IS_OPEN,
487
546
  value: slotsSelectComponentDefaultValue(period === null || period === void 0 ? void 0 : period.endTime),
488
- options: buildSlotIntervals({
489
- interval: slotInterval,
490
- bookedSlots: values.wdays[wdayIndex].periods,
491
- slotType: "endTime",
492
- selectedValue: period === null || period === void 0 ? void 0 : period.endTime
493
- }),
494
547
  onChange: function onChange(e) {
495
- return setFieldValue("wdays[".concat(wdayIndex, "].periods[").concat(index, "].endTime"), (e === null || e === void 0 ? void 0 : e.value) || "");
548
+ return setFieldValue("wdays.".concat(day, ".periods[").concat(index, "].endTime"), (e === null || e === void 0 ? void 0 : e.value) || "");
496
549
  }
497
550
  }), /*#__PURE__*/jsxRuntime.jsx(Button, {
498
551
  className: "flex-shrink-0 self-start",
@@ -505,7 +558,7 @@ var ScheduleRow = function ScheduleRow(_ref) {
505
558
  }
506
559
  })]
507
560
  }), /*#__PURE__*/jsxRuntime.jsx(formik.ErrorMessage, {
508
- name: "wdays[".concat(wdayIndex, "].periods[").concat(index, "]"),
561
+ name: "wdays.".concat(day, ".periods[").concat(index, "]"),
509
562
  children: function children(message) {
510
563
  return _typeof(message) !== "object" && /*#__PURE__*/jsxRuntime.jsx("span", {
511
564
  className: "neeto-ui-text-error-500 mt-1 w-11/12 px-2 text-xs",
@@ -513,9 +566,9 @@ var ScheduleRow = function ScheduleRow(_ref) {
513
566
  });
514
567
  }
515
568
  })]
516
- }, "wdays[".concat(wdayIndex, "].periods[").concat(index, "]"));
569
+ }, "wdays.".concat(day, ".periods[").concat(index, "]"));
517
570
  })
518
- }), values.wdays[wdayIndex].available && allowAddPeriod && /*#__PURE__*/jsxRuntime.jsx(Button, {
571
+ }), values.wdays[day].available && allowAddPeriod && /*#__PURE__*/jsxRuntime.jsx(Button, {
519
572
  className: "absolute right-14 top-3 ml-auto flex-shrink-0 sm:static",
520
573
  "data-cy": "add-new-period-button",
521
574
  "data-testid": "add-new-period-button",
@@ -535,14 +588,11 @@ var ScheduleRow = function ScheduleRow(_ref) {
535
588
  }
536
589
  });
537
590
  };
591
+ var ScheduleRow$1 = /*#__PURE__*/React.memo(ScheduleRow);
538
592
 
539
593
  var Form = function Form(_ref) {
540
- var _values$wdays$index;
541
- var day = _ref.day,
542
- handleCopy = _ref.handleCopy,
543
- values = _ref.values,
544
- setFieldValue = _ref.setFieldValue,
545
- index = _ref.index;
594
+ var _values$wdays$day;
595
+ var day = _ref.day;
546
596
  var _useState = React.useState([]),
547
597
  _useState2 = _slicedToArray(_useState, 2),
548
598
  deletedPeriods = _useState2[0],
@@ -551,39 +601,42 @@ var Form = function Form(_ref) {
551
601
  _useState4 = _slicedToArray(_useState3, 2),
552
602
  wdaysToCopy = _useState4[0],
553
603
  setWdaysToCopy = _useState4[1];
604
+ var _useFormikContext = formik.useFormikContext(),
605
+ values = _useFormikContext.values,
606
+ setFieldValue = _useFormikContext.setFieldValue;
554
607
  var _useTranslation = reactI18next.useTranslation(),
555
608
  t = _useTranslation.t;
556
609
  var _useContext = React.useContext(ScheduleContext),
557
610
  firstDay = _useContext.firstDay;
558
- var restoreDeletedPeriods = function restoreDeletedPeriods(setFieldValue) {
559
- setFieldValue("wdays[".concat(index, "].periods"), deletedPeriods);
611
+ var restoreDeletedPeriods = function restoreDeletedPeriods() {
612
+ setFieldValue("wdays.".concat(day, ".periods"), deletedPeriods);
560
613
  };
561
- var uncheckCheckbox = function uncheckCheckbox(setFieldValue, values) {
562
- var _values$wdays$index$p;
563
- setFieldValue("wdays[".concat(index, "].available"), false);
564
- setFieldValue("wdays[".concat(index, "].periods"), []);
565
- if ((_values$wdays$index$p = values.wdays[index].periods[0]) !== null && _values$wdays$index$p !== void 0 && _values$wdays$index$p.id) {
566
- setDeletedPeriods(values.wdays[index].periods.filter(function (item) {
614
+ var uncheckCheckbox = function uncheckCheckbox() {
615
+ var _values$wdays$day$per;
616
+ setFieldValue("wdays.".concat(day, ".available"), false);
617
+ setFieldValue("wdays.".concat(day, ".periods"), []);
618
+ if ((_values$wdays$day$per = values.wdays[day].periods[0]) !== null && _values$wdays$day$per !== void 0 && _values$wdays$day$per.id) {
619
+ setDeletedPeriods(values.wdays[day].periods.filter(function (item) {
567
620
  return item.startTime && item.endTime;
568
621
  }).map(ramda.identity));
569
622
  }
570
623
  };
571
- var checkCheckbox = function checkCheckbox(setFieldValue) {
624
+ var checkCheckbox = function checkCheckbox() {
572
625
  var _deletedPeriods$;
573
- setFieldValue("wdays[".concat(index, "].available"), true);
626
+ setFieldValue("wdays.".concat(day, ".available"), true);
574
627
  if ((_deletedPeriods$ = deletedPeriods[0]) !== null && _deletedPeriods$ !== void 0 && _deletedPeriods$.startTime) {
575
- restoreDeletedPeriods(setFieldValue);
576
- } else if (neetoCist.isNotPresent(values.wdays[index].periods)) {
577
- setFieldValue("wdays[".concat(index, "].periods"), [addDefaultPeriod(day)]);
628
+ restoreDeletedPeriods();
629
+ } else if (neetoCist.isNotPresent(values.wdays[day].periods)) {
630
+ setFieldValue("wdays.".concat(day, ".periods"), [addDefaultPeriod(day)]);
578
631
  } else {
579
- setFieldValue("wdays[".concat(index, "].periods"), [""]);
632
+ setFieldValue("wdays.".concat(day, ".periods"), [""]);
580
633
  }
581
634
  };
582
- var handleCheckbox = function handleCheckbox(setFieldValue, values) {
583
- if (values.wdays[index].available) {
584
- uncheckCheckbox(setFieldValue, values);
635
+ var handleCheckbox = function handleCheckbox() {
636
+ if (values.wdays[day].available) {
637
+ uncheckCheckbox();
585
638
  } else {
586
- checkCheckbox(setFieldValue);
639
+ checkCheckbox();
587
640
  }
588
641
  };
589
642
  var handleCopyChange = function handleCopyChange(e, day) {
@@ -597,34 +650,29 @@ var Form = function Form(_ref) {
597
650
  "data-cy": "working-day-container",
598
651
  children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
599
652
  className: classnames("flex w-36 flex-shrink-0 items-center justify-start sm:mt-1", {
600
- "mb-3 sm:mb-0": neetoCist.isPresent((_values$wdays$index = values.wdays[index]) === null || _values$wdays$index === void 0 ? void 0 : _values$wdays$index.periods)
653
+ "mb-3 sm:mb-0": neetoCist.isPresent((_values$wdays$day = values.wdays[day]) === null || _values$wdays$day === void 0 ? void 0 : _values$wdays$day.periods)
601
654
  }),
602
655
  children: [/*#__PURE__*/jsxRuntime.jsx(Switch, {
603
- "aria-label": "wdays[".concat(index, "].available"),
604
- checked: values.wdays[index].available,
656
+ "aria-label": "wdays.".concat(day, ".available"),
657
+ checked: values.wdays[day].available,
605
658
  className: "flex-grow-0",
606
659
  "data-cy": general.joinHyphenCase(day, "weekly-hours-checkbox"),
607
660
  id: "day",
608
- name: "wdays[".concat(index, "].available"),
609
- onChange: function onChange() {
610
- return handleCheckbox(setFieldValue, values);
611
- }
661
+ name: "wdays.".concat(day, ".available"),
662
+ onChange: handleCheckbox
612
663
  }), /*#__PURE__*/jsxRuntime.jsx(Typography, {
613
664
  component: "span",
614
665
  "data-cy": general.joinHyphenCase(day, "day-text"),
615
666
  style: "body2",
616
- weight: values.wdays[index].available ? "semibold" : "normal",
667
+ weight: values.wdays[day].available ? "semibold" : "normal",
617
668
  className: classnames("ml-2 capitalize", {
618
- "neeto-ui-text-gray-600": !values.wdays[index].available
669
+ "neeto-ui-text-gray-600": !values.wdays[day].available
619
670
  }),
620
671
  children: t("neetoMolecules.schedule.days.".concat(day))
621
672
  })]
622
- }), /*#__PURE__*/jsxRuntime.jsx(ScheduleRow, {
623
- day: day,
624
- setFieldValue: setFieldValue,
625
- values: values,
626
- wdayIndex: index
627
- }), values.wdays[index].available && /*#__PURE__*/jsxRuntime.jsxs(Dropdown, {
673
+ }), /*#__PURE__*/jsxRuntime.jsx(ScheduleRow$1, {
674
+ day: day
675
+ }), values.wdays[day].available && /*#__PURE__*/jsxRuntime.jsxs(Dropdown, {
628
676
  closeOnSelect: true,
629
677
  buttonStyle: "secondary",
630
678
  icon: Copy,
@@ -679,7 +727,7 @@ var Form = function Form(_ref) {
679
727
  onClick: function onClick() {
680
728
  handleCopy({
681
729
  values: values,
682
- index: index,
730
+ day: day,
683
731
  setFieldValue: setFieldValue,
684
732
  wdaysToCopy: wdaysToCopy
685
733
  });
@@ -691,19 +739,20 @@ var Form = function Form(_ref) {
691
739
  })
692
740
  });
693
741
  };
742
+ var Form$1 = /*#__PURE__*/React.memo(Form);
694
743
 
695
744
  var Fields = function Fields(_ref) {
696
- var handleCopy = _ref.handleCopy,
697
- handleValuesChanged = _ref.handleValuesChanged,
745
+ var handleValuesChanged = _ref.handleValuesChanged,
698
746
  scheduleRef = _ref.scheduleRef;
747
+ var _useContext = React.useContext(ScheduleContext),
748
+ firstDay = _useContext.firstDay;
699
749
  var _useFormikContext = formik.useFormikContext(),
700
750
  values = _useFormikContext.values,
701
- setFieldValue = _useFormikContext.setFieldValue,
702
751
  resetForm = _useFormikContext.resetForm,
703
752
  errors = _useFormikContext.errors,
704
753
  dirty = _useFormikContext.dirty;
705
754
  React.useEffect(function () {
706
- handleValuesChanged(values, dirty);
755
+ handleValuesChanged(processFormValues(values, firstDay), dirty);
707
756
  }, [values]);
708
757
  React.useImperativeHandle(scheduleRef, function () {
709
758
  return {
@@ -711,25 +760,10 @@ var Fields = function Fields(_ref) {
711
760
  errors: errors
712
761
  };
713
762
  });
714
- return /*#__PURE__*/jsxRuntime.jsx(formik.FieldArray, {
715
- name: "wdays",
716
- render: function render() {
717
- return /*#__PURE__*/jsxRuntime.jsx("div", {
718
- className: "space-y-4",
719
- children: values.wdays.map(function (item, index) {
720
- return /*#__PURE__*/React.createElement(Form, {
721
- handleCopy: handleCopy,
722
- index: index,
723
- setFieldValue: setFieldValue,
724
- values: values,
725
- day: DAYS.find(function (day) {
726
- return day === item.wday;
727
- }),
728
- key: item.wday
729
- });
730
- })
731
- });
732
- }
763
+ return sortDays(firstDay).map(function (wday) {
764
+ return /*#__PURE__*/jsxRuntime.jsx(Form$1, {
765
+ day: wday
766
+ }, wday);
733
767
  });
734
768
  };
735
769
 
@@ -850,69 +884,52 @@ var Schedule = /*#__PURE__*/React.forwardRef(function (_ref, scheduleRef) {
850
884
  showTimeZone = _ref$showTimeZone === void 0 ? true : _ref$showTimeZone,
851
885
  _ref$slotInterval = _ref.slotInterval,
852
886
  slotInterval = _ref$slotInterval === void 0 ? DEFAULT_SLOT_INTERVAL : _ref$slotInterval;
853
- var handleCopy = function handleCopy(_ref2) {
854
- var _values$wdays$index$p;
855
- var values = _ref2.values,
856
- index = _ref2.index,
857
- setFieldValue = _ref2.setFieldValue,
858
- wdaysToCopy = _ref2.wdaysToCopy;
859
- var newPeriods = (_values$wdays$index$p = values.wdays[index].periods) === null || _values$wdays$index$p === void 0 ? void 0 : _values$wdays$index$p.map(ramda.pick(["startTime", "endTime"]));
860
- wdaysToCopy.forEach(function (wday) {
861
- var dayIndex = sortDays(firstDay).indexOf(wday);
862
- setFieldValue("wdays[".concat(dayIndex, "].available"), neetoCist.isPresent(values.wdays[index].periods));
863
- setFieldValue("wdays[".concat(dayIndex, "].periods"), newPeriods.map(function (period) {
864
- return ramda.assoc("wday", wday, period);
865
- }));
866
- });
867
- };
887
+ var validationSchema = React.useMemo(getScheduleValidationSchema, []);
868
888
  var getInitialFormValues = function getInitialFormValues() {
869
- return sortDays(firstDay).map(function (wday) {
870
- var _periods$wday;
871
- return {
872
- periods: sortPeriodsByKey({
873
- periods: periods[wday],
874
- key: "startTime",
875
- order: "asc"
876
- }),
877
- available: !!((_periods$wday = periods[wday]) !== null && _periods$wday !== void 0 && _periods$wday.length),
878
- wday: wday
879
- };
889
+ var isSubmitHandler = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
890
+ if (isSubmitHandler) {
891
+ return buildFormValuesArray({
892
+ firstDay: firstDay,
893
+ periods: periods
894
+ });
895
+ }
896
+ return buildFormValuesObject({
897
+ periods: periods
880
898
  });
881
899
  };
882
- return /*#__PURE__*/jsxRuntime.jsx("div", {
883
- className: "neeto-molecules-schedule neeto-ui-border-gray-200 flex-shrink-0",
884
- children: /*#__PURE__*/jsxRuntime.jsx(formik.Formik, {
885
- enableReinitialize: true,
886
- initialValues: {
887
- wdays: getInitialFormValues()
888
- },
889
- validationSchema: getScheduleValidationSchema(),
890
- onSubmit: function onSubmit(values) {
891
- return handleSubmit(values, getInitialFormValues());
892
- },
893
- children: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
894
- children: [showHeader && /*#__PURE__*/jsxRuntime.jsx(Header, {
895
- isCreating: isCreating,
896
- isEditable: isEditable,
897
- isEditing: isEditing,
898
- setIsEditing: setIsEditing,
899
- showTimeZone: showTimeZone
900
- }), /*#__PURE__*/jsxRuntime.jsx(ScheduleContext.Provider, {
901
- value: {
902
- allowAddPeriod: allowAddPeriod,
903
- firstDay: firstDay,
904
- slotInterval: slotInterval
905
- },
906
- children: isEditing || !showHeader ? /*#__PURE__*/jsxRuntime.jsx(formik.Form, {
900
+ return /*#__PURE__*/jsxRuntime.jsx(ScheduleContext.Provider, {
901
+ value: {
902
+ allowAddPeriod: allowAddPeriod,
903
+ firstDay: firstDay,
904
+ slotInterval: slotInterval
905
+ },
906
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
907
+ className: "neeto-molecules-schedule neeto-ui-border-gray-200 flex-shrink-0",
908
+ children: /*#__PURE__*/jsxRuntime.jsx(formik.Formik, {
909
+ validationSchema: validationSchema,
910
+ enableReinitialize: true,
911
+ initialValues: {
912
+ wdays: getInitialFormValues()
913
+ },
914
+ onSubmit: function onSubmit(values) {
915
+ handleSubmit(processFormValues(values, firstDay), getInitialFormValues(true));
916
+ },
917
+ children: /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
918
+ children: [showHeader && /*#__PURE__*/jsxRuntime.jsx(Header, {
919
+ isCreating: isCreating,
920
+ isEditable: isEditable,
921
+ isEditing: isEditing,
922
+ setIsEditing: setIsEditing,
923
+ showTimeZone: showTimeZone
924
+ }), isEditing || !showHeader ? /*#__PURE__*/jsxRuntime.jsx(formik.Form, {
907
925
  children: /*#__PURE__*/jsxRuntime.jsx(Fields, {
908
- handleCopy: handleCopy,
909
926
  handleValuesChanged: handleValuesChanged,
910
927
  scheduleRef: scheduleRef
911
928
  })
912
929
  }) : /*#__PURE__*/jsxRuntime.jsx(DisplayAvailability, {
913
930
  periods: periods
914
- })
915
- })]
931
+ })]
932
+ })
916
933
  })
917
934
  })
918
935
  });