cronofy-elements 1.48.2 → 1.49.2

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 (349) hide show
  1. package/dist/.gitkeep +0 -0
  2. package/dist/CronofyElements.js +2 -0
  3. package/{build/CronofyElements.v1.48.2.js.LICENSE.txt → dist/CronofyElements.js.LICENSE.txt} +0 -0
  4. package/package.json +10 -7
  5. package/.babelrc +0 -20
  6. package/.eslintrc.yaml +0 -43
  7. package/.prettierignore +0 -4
  8. package/.prettierrc +0 -7
  9. package/Makefile +0 -92
  10. package/brainstorm.md +0 -76
  11. package/build/CronofyElements.v1.48.2.js +0 -2
  12. package/build/npm/CronofyElements.js +0 -2
  13. package/compat.config.js +0 -25
  14. package/demo/agenda.ejs +0 -71
  15. package/demo/availability-viewer.ejs +0 -322
  16. package/demo/calendar-sync.ejs +0 -149
  17. package/demo/crossbrowser.ejs +0 -228
  18. package/demo/date-time-picker.ejs +0 -213
  19. package/demo/demo-styles.css +0 -134
  20. package/demo/index.ejs +0 -249
  21. package/demo/integration.ejs +0 -482
  22. package/demo/load-elements.ejs +0 -12
  23. package/demo/nav.ejs +0 -14
  24. package/demo/rules.ejs +0 -121
  25. package/demo/server.js +0 -425
  26. package/demo/slot-picker.ejs +0 -197
  27. package/git.README.md +0 -71
  28. package/notes.style.md +0 -197
  29. package/postcss.config.js +0 -3
  30. package/script/i18n-export +0 -11
  31. package/script/i18n-helpers/split_write.rb +0 -25
  32. package/script/i18n-import +0 -22
  33. package/script/i18n-reference-update +0 -241
  34. package/src/js/components/Agenda/Agenda.js +0 -243
  35. package/src/js/components/Agenda/AllDayEventsList.js +0 -37
  36. package/src/js/components/Agenda/Calendar.js +0 -100
  37. package/src/js/components/Agenda/CalendarHeader.js +0 -187
  38. package/src/js/components/Agenda/Event.js +0 -34
  39. package/src/js/components/Agenda/EventAllDay.js +0 -76
  40. package/src/js/components/Agenda/EventAttendees.js +0 -30
  41. package/src/js/components/Agenda/EventDetail.js +0 -111
  42. package/src/js/components/Agenda/EventMessages.js +0 -24
  43. package/src/js/components/Agenda/EventMeta.js +0 -48
  44. package/src/js/components/Agenda/EventTime.js +0 -34
  45. package/src/js/components/Agenda/EventWrapper.js +0 -271
  46. package/src/js/components/Agenda/Location.js +0 -29
  47. package/src/js/components/Agenda/Message.js +0 -22
  48. package/src/js/components/Agenda/TimedEventsList.js +0 -29
  49. package/src/js/components/AvailabilityRules/AddButton.js +0 -60
  50. package/src/js/components/AvailabilityRules/AvailabilityRules.js +0 -45
  51. package/src/js/components/AvailabilityRules/Calendar.js +0 -31
  52. package/src/js/components/AvailabilityRules/CalendarListItem.js +0 -53
  53. package/src/js/components/AvailabilityRules/CalendarProfiles.js +0 -67
  54. package/src/js/components/AvailabilityRules/CalendarSelector.js +0 -104
  55. package/src/js/components/AvailabilityRules/Calendars.js +0 -145
  56. package/src/js/components/AvailabilityRules/Checkmark.js +0 -51
  57. package/src/js/components/AvailabilityRules/DayLabels.js +0 -91
  58. package/src/js/components/AvailabilityRules/Footer.js +0 -109
  59. package/src/js/components/AvailabilityRules/Legend.js +0 -57
  60. package/src/js/components/AvailabilityRules/Loading.js +0 -53
  61. package/src/js/components/AvailabilityRules/RemoveButton.js +0 -57
  62. package/src/js/components/AvailabilityRules/Slot.js +0 -195
  63. package/src/js/components/AvailabilityRules/SlotDisplay.js +0 -27
  64. package/src/js/components/AvailabilityRules/Slots.js +0 -81
  65. package/src/js/components/AvailabilityRules/SlotsDisplay.js +0 -68
  66. package/src/js/components/AvailabilityRules/TimeExpander.js +0 -119
  67. package/src/js/components/AvailabilityRules/TimeLabels.js +0 -89
  68. package/src/js/components/AvailabilityRules/TimeZoneDisplay.js +0 -41
  69. package/src/js/components/AvailabilityRules/ToggleIcon.js +0 -41
  70. package/src/js/components/AvailabilityRules/Tooltip.js +0 -63
  71. package/src/js/components/AvailabilityRules/UnknownCalendar.js +0 -33
  72. package/src/js/components/AvailabilityRules/Week.js +0 -115
  73. package/src/js/components/AvailabilityRules/WeekGrid.js +0 -80
  74. package/src/js/components/AvailabilityRules/Wrapper.js +0 -423
  75. package/src/js/components/AvailabilityRules/contexts/drag-context.js +0 -15
  76. package/src/js/components/AvailabilityRules/scss/_base.buttons.scss +0 -58
  77. package/src/js/components/AvailabilityRules/scss/_base.theme.scss +0 -4
  78. package/src/js/components/AvailabilityRules/scss/_components.timezoneselector.scss +0 -74
  79. package/src/js/components/AvailabilityRules/scss/_generic.reset.scss +0 -13
  80. package/src/js/components/AvailabilityRules/scss/_settings.colours.scss +0 -12
  81. package/src/js/components/AvailabilityRules/scss/availabilityrules.scss +0 -5
  82. package/src/js/components/AvailabilityRules/utils/tz-utils.js +0 -61
  83. package/src/js/components/AvailabilityViewer/AvailabilityViewer.js +0 -524
  84. package/src/js/components/AvailabilityViewer/ColumnHeader.js +0 -35
  85. package/src/js/components/AvailabilityViewer/DayColumn.js +0 -36
  86. package/src/js/components/AvailabilityViewer/DayColumnDisplay.js +0 -33
  87. package/src/js/components/AvailabilityViewer/DayColumnWrapper.js +0 -29
  88. package/src/js/components/AvailabilityViewer/DayLabels.js +0 -41
  89. package/src/js/components/AvailabilityViewer/EmptyColumn.js +0 -29
  90. package/src/js/components/AvailabilityViewer/Footer.js +0 -36
  91. package/src/js/components/AvailabilityViewer/GridFreeSelect.js +0 -33
  92. package/src/js/components/AvailabilityViewer/HoverSlot.js +0 -35
  93. package/src/js/components/AvailabilityViewer/HoverTooltip.js +0 -34
  94. package/src/js/components/AvailabilityViewer/LabelColumn.js +0 -53
  95. package/src/js/components/AvailabilityViewer/LabelItem.js +0 -73
  96. package/src/js/components/AvailabilityViewer/Legend.js +0 -79
  97. package/src/js/components/AvailabilityViewer/Loading.js +0 -57
  98. package/src/js/components/AvailabilityViewer/MonthLabels.js +0 -43
  99. package/src/js/components/AvailabilityViewer/Navigation.js +0 -138
  100. package/src/js/components/AvailabilityViewer/Overlay.js +0 -60
  101. package/src/js/components/AvailabilityViewer/Preloading.js +0 -66
  102. package/src/js/components/AvailabilityViewer/SelectedSlot.js +0 -106
  103. package/src/js/components/AvailabilityViewer/SelectedSlots.js +0 -72
  104. package/src/js/components/AvailabilityViewer/SelectionMask.js +0 -44
  105. package/src/js/components/AvailabilityViewer/Slot.js +0 -237
  106. package/src/js/components/AvailabilityViewer/SlotFreeSelect.js +0 -115
  107. package/src/js/components/AvailabilityViewer/Slots.js +0 -57
  108. package/src/js/components/AvailabilityViewer/TimeExpander.js +0 -93
  109. package/src/js/components/AvailabilityViewer/TimeLines.js +0 -74
  110. package/src/js/components/AvailabilityViewer/TimeSelector.js +0 -243
  111. package/src/js/components/AvailabilityViewer/TimeSelectorTrigger.js +0 -42
  112. package/src/js/components/AvailabilityViewer/TimeZoneDisplay.js +0 -28
  113. package/src/js/components/AvailabilityViewer/ToggleIcon.js +0 -41
  114. package/src/js/components/AvailabilityViewer/Tooltip.js +0 -65
  115. package/src/js/components/AvailabilityViewer/Week.js +0 -255
  116. package/src/js/components/AvailabilityViewer/WeekWrapper.js +0 -132
  117. package/src/js/components/AvailabilityViewer/contexts/page-context.js +0 -17
  118. package/src/js/components/AvailabilityViewer/contexts/page-reducer.js +0 -28
  119. package/src/js/components/AvailabilityViewer/contexts/selection-context.js +0 -25
  120. package/src/js/components/AvailabilityViewer/contexts/selection-reducer.js +0 -18
  121. package/src/js/components/CalendarSync/Active.js +0 -57
  122. package/src/js/components/CalendarSync/AddToggle.js +0 -72
  123. package/src/js/components/CalendarSync/CalendarSync.js +0 -215
  124. package/src/js/components/CalendarSync/EditToggle.js +0 -71
  125. package/src/js/components/CalendarSync/Footer.js +0 -31
  126. package/src/js/components/CalendarSync/Inactive.js +0 -66
  127. package/src/js/components/CalendarSync/Loading.js +0 -52
  128. package/src/js/components/CalendarSync/Pending.js +0 -74
  129. package/src/js/components/CalendarSync/ProfileStatus.js +0 -33
  130. package/src/js/components/CalendarSync/Profiles.js +0 -109
  131. package/src/js/components/CalendarSync/ProviderLogo.js +0 -28
  132. package/src/js/components/CalendarSync/Providers.js +0 -80
  133. package/src/js/components/CalendarSync/RemoveLink.js +0 -96
  134. package/src/js/components/CalendarSync/SelectProvider.js +0 -25
  135. package/src/js/components/CalendarSync/contexts/status-reducer.js +0 -74
  136. package/src/js/components/DateTimePicker/Calendar.js +0 -127
  137. package/src/js/components/DateTimePicker/CalendarHeader.js +0 -80
  138. package/src/js/components/DateTimePicker/Confirm.js +0 -106
  139. package/src/js/components/DateTimePicker/DateTimePicker.js +0 -131
  140. package/src/js/components/DateTimePicker/DayButton.js +0 -38
  141. package/src/js/components/DateTimePicker/DayHeadings.js +0 -33
  142. package/src/js/components/DateTimePicker/Details.js +0 -33
  143. package/src/js/components/DateTimePicker/Error.js +0 -39
  144. package/src/js/components/DateTimePicker/Loading.js +0 -20
  145. package/src/js/components/DateTimePicker/LoadingCalendar.js +0 -21
  146. package/src/js/components/DateTimePicker/NoSlotsFound.js +0 -16
  147. package/src/js/components/DateTimePicker/SequencedSlotButton.js +0 -97
  148. package/src/js/components/DateTimePicker/SlotButton.js +0 -55
  149. package/src/js/components/DateTimePicker/SlotsList.js +0 -45
  150. package/src/js/components/DateTimePicker/Wrapper.js +0 -281
  151. package/src/js/components/DateTimePicker/contexts/status-context.js +0 -19
  152. package/src/js/components/DateTimePicker/contexts/status-reducer.js +0 -276
  153. package/src/js/components/DateTimePicker/contexts/theme-context.js +0 -33
  154. package/src/js/components/DateTimePicker/helpers/theming.js +0 -49
  155. package/src/js/components/DateTimePicker/scss/_base.buttons.scss +0 -58
  156. package/src/js/components/DateTimePicker/scss/_base.layout.scss +0 -28
  157. package/src/js/components/DateTimePicker/scss/_base.theme.scss +0 -17
  158. package/src/js/components/DateTimePicker/scss/_components.calendargrid.scss +0 -78
  159. package/src/js/components/DateTimePicker/scss/_components.calendarheader.scss +0 -71
  160. package/src/js/components/DateTimePicker/scss/_components.confirm.scss +0 -40
  161. package/src/js/components/DateTimePicker/scss/_components.details.scss +0 -20
  162. package/src/js/components/DateTimePicker/scss/_components.error.scss +0 -34
  163. package/src/js/components/DateTimePicker/scss/_components.loading.scss +0 -36
  164. package/src/js/components/DateTimePicker/scss/_components.slotslist.scss +0 -43
  165. package/src/js/components/DateTimePicker/scss/_components.timezoneselector.scss +0 -73
  166. package/src/js/components/DateTimePicker/scss/_generic.reset.scss +0 -18
  167. package/src/js/components/DateTimePicker/scss/_settings.colours.scss +0 -17
  168. package/src/js/components/DateTimePicker/scss/datetimepicker.scss +0 -5
  169. package/src/js/components/DateTimePicker/utils/calendar-keyboard.js +0 -109
  170. package/src/js/components/DateTimePicker/utils/calendar.js +0 -125
  171. package/src/js/components/DateTimePicker/utils/slots.js +0 -288
  172. package/src/js/components/SlotPicker/Confirm.js +0 -160
  173. package/src/js/components/SlotPicker/Days.js +0 -58
  174. package/src/js/components/SlotPicker/Slot.js +0 -72
  175. package/src/js/components/SlotPicker/SlotPicker.js +0 -292
  176. package/src/js/components/SlotPicker/Slots.js +0 -66
  177. package/src/js/components/SlotPicker/TimeSlots.js +0 -91
  178. package/src/js/components/generic/Button.js +0 -26
  179. package/src/js/components/generic/Container.js +0 -33
  180. package/src/js/components/generic/Error.js +0 -77
  181. package/src/js/components/generic/Loading.js +0 -51
  182. package/src/js/components/generic/LoadingSpinner.js +0 -30
  183. package/src/js/components/generic/ShadowScrollbars.js +0 -70
  184. package/src/js/components/generic/TimeZoneSelector.js +0 -158
  185. package/src/js/components/generic/TransitionSlide.js +0 -72
  186. package/src/js/contexts/i18n-context.js +0 -25
  187. package/src/js/contexts/log-context.js +0 -18
  188. package/src/js/contexts/tz-context.js +0 -18
  189. package/src/js/env.example.js +0 -8
  190. package/src/js/helpers/colors.js +0 -33
  191. package/src/js/helpers/comparators.AvailabilityViewer.js +0 -27
  192. package/src/js/helpers/connections.js +0 -370
  193. package/src/js/helpers/events.js +0 -166
  194. package/src/js/helpers/functional.js +0 -4
  195. package/src/js/helpers/generator.js +0 -107
  196. package/src/js/helpers/i18n.js +0 -153
  197. package/src/js/helpers/init.Agenda.js +0 -55
  198. package/src/js/helpers/init.AvailabilityRules.js +0 -195
  199. package/src/js/helpers/init.AvailabilityViewer.js +0 -215
  200. package/src/js/helpers/init.CalendarSync.js +0 -83
  201. package/src/js/helpers/init.DateTimePicker.js +0 -219
  202. package/src/js/helpers/init.SlotPicker.js +0 -89
  203. package/src/js/helpers/init.js +0 -308
  204. package/src/js/helpers/logging.js +0 -78
  205. package/src/js/helpers/mocks.js +0 -871
  206. package/src/js/helpers/slots.js +0 -340
  207. package/src/js/helpers/slots.rules.js +0 -220
  208. package/src/js/helpers/theming.js +0 -93
  209. package/src/js/helpers/translations.js +0 -42
  210. package/src/js/helpers/tz-list.js +0 -136
  211. package/src/js/helpers/utils.AvailabilityRules.js +0 -110
  212. package/src/js/helpers/utils.AvailabilityViewer.js +0 -789
  213. package/src/js/helpers/utils.CalendarSync.js +0 -199
  214. package/src/js/helpers/utils.js +0 -76
  215. package/src/js/hooks/useWindowSize.js +0 -20
  216. package/src/js/main.js +0 -133
  217. package/src/js/next.js +0 -37
  218. package/src/js/styles/_settings.utils.scss +0 -82
  219. package/src/js/styles/colors.js +0 -13
  220. package/src/js/styles/global.js +0 -49
  221. package/src/js/styles/utils.js +0 -81
  222. package/src/js/translations/de/agenda.json +0 -12
  223. package/src/js/translations/de/availability_rules.json +0 -18
  224. package/src/js/translations/de/availability_viewer.json +0 -14
  225. package/src/js/translations/de/calendar_sync.json +0 -14
  226. package/src/js/translations/de/core.json +0 -15
  227. package/src/js/translations/de/date_time_picker.json +0 -14
  228. package/src/js/translations/de/slot_picker.json +0 -9
  229. package/src/js/translations/de/time_zones.json +0 -135
  230. package/src/js/translations/en/agenda.json +0 -12
  231. package/src/js/translations/en/availability_rules.json +0 -18
  232. package/src/js/translations/en/availability_viewer.json +0 -14
  233. package/src/js/translations/en/calendar_sync.json +0 -14
  234. package/src/js/translations/en/core.json +0 -23
  235. package/src/js/translations/en/date_time_picker.json +0 -15
  236. package/src/js/translations/en/slot_picker.json +0 -9
  237. package/src/js/translations/en/time_zones.json +0 -17
  238. package/src/js/translations/es/agenda.json +0 -12
  239. package/src/js/translations/es/availability_rules.json +0 -18
  240. package/src/js/translations/es/availability_viewer.json +0 -14
  241. package/src/js/translations/es/calendar_sync.json +0 -14
  242. package/src/js/translations/es/core.json +0 -15
  243. package/src/js/translations/es/date_time_picker.json +0 -14
  244. package/src/js/translations/es/slot_picker.json +0 -9
  245. package/src/js/translations/es/time_zones.json +0 -203
  246. package/src/js/translations/fr/agenda.json +0 -12
  247. package/src/js/translations/fr/availability_rules.json +0 -18
  248. package/src/js/translations/fr/availability_viewer.json +0 -14
  249. package/src/js/translations/fr/calendar_sync.json +0 -14
  250. package/src/js/translations/fr/core.json +0 -15
  251. package/src/js/translations/fr/date_time_picker.json +0 -14
  252. package/src/js/translations/fr/slot_picker.json +0 -9
  253. package/src/js/translations/fr/time_zones.json +0 -161
  254. package/src/js/translations/fr-CA/agenda.json +0 -12
  255. package/src/js/translations/fr-CA/availability_rules.json +0 -18
  256. package/src/js/translations/fr-CA/availability_viewer.json +0 -14
  257. package/src/js/translations/fr-CA/calendar_sync.json +0 -14
  258. package/src/js/translations/fr-CA/core.json +0 -23
  259. package/src/js/translations/fr-CA/date_time_picker.json +0 -14
  260. package/src/js/translations/fr-CA/slot_picker.json +0 -9
  261. package/src/js/translations/fr-CA/time_zones.json +0 -163
  262. package/src/js/translations/it/agenda.json +0 -12
  263. package/src/js/translations/it/availability_rules.json +0 -18
  264. package/src/js/translations/it/availability_viewer.json +0 -14
  265. package/src/js/translations/it/calendar_sync.json +0 -14
  266. package/src/js/translations/it/core.json +0 -15
  267. package/src/js/translations/it/date_time_picker.json +0 -14
  268. package/src/js/translations/it/slot_picker.json +0 -9
  269. package/src/js/translations/it/time_zones.json +0 -126
  270. package/src/js/translations/ja/agenda.json +0 -12
  271. package/src/js/translations/ja/availability_rules.json +0 -18
  272. package/src/js/translations/ja/availability_viewer.json +0 -14
  273. package/src/js/translations/ja/calendar_sync.json +0 -14
  274. package/src/js/translations/ja/core.json +0 -15
  275. package/src/js/translations/ja/date_formats.json +0 -5
  276. package/src/js/translations/ja/date_time_picker.json +0 -14
  277. package/src/js/translations/ja/slot_picker.json +0 -9
  278. package/src/js/translations/ja/time_zones.json +0 -435
  279. package/src/js/translations/nl/agenda.json +0 -12
  280. package/src/js/translations/nl/availability_rules.json +0 -18
  281. package/src/js/translations/nl/availability_viewer.json +0 -14
  282. package/src/js/translations/nl/calendar_sync.json +0 -14
  283. package/src/js/translations/nl/core.json +0 -15
  284. package/src/js/translations/nl/date_time_picker.json +0 -14
  285. package/src/js/translations/nl/slot_picker.json +0 -9
  286. package/src/js/translations/nl/time_zones.json +0 -118
  287. package/src/js/translations/ru/agenda.json +0 -12
  288. package/src/js/translations/ru/availability_rules.json +0 -18
  289. package/src/js/translations/ru/availability_viewer.json +0 -14
  290. package/src/js/translations/ru/calendar_sync.json +0 -14
  291. package/src/js/translations/ru/core.json +0 -15
  292. package/src/js/translations/ru/date_time_picker.json +0 -14
  293. package/src/js/translations/ru/slot_picker.json +0 -9
  294. package/src/js/translations/ru/time_zones.json +0 -435
  295. package/src/js/translations/sv/agenda.json +0 -12
  296. package/src/js/translations/sv/availability_rules.json +0 -18
  297. package/src/js/translations/sv/availability_viewer.json +0 -14
  298. package/src/js/translations/sv/calendar_sync.json +0 -14
  299. package/src/js/translations/sv/core.json +0 -15
  300. package/src/js/translations/sv/date_time_picker.json +0 -14
  301. package/src/js/translations/sv/slot_picker.json +0 -9
  302. package/src/js/translations/sv/time_zones.json +0 -136
  303. package/tests/AvailabilityRules/AvailabilityRules.test.js +0 -39
  304. package/tests/AvailabilityRules/__snapshots__/AvailabilityRules.test.js.snap +0 -1045
  305. package/tests/AvailabilityViewer/Navigation.test.js +0 -130
  306. package/tests/AvailabilityViewer/contexts/page-reducer.test.js +0 -87
  307. package/tests/AvailabilityViewer/reducer.test.js +0 -73
  308. package/tests/CalendarSync/Active.test.js +0 -25
  309. package/tests/CalendarSync/AddToggle.test.js +0 -57
  310. package/tests/CalendarSync/EditToggle.test.js +0 -57
  311. package/tests/CalendarSync/Inactive.test.js +0 -26
  312. package/tests/CalendarSync/Pending.test.js +0 -25
  313. package/tests/CalendarSync/ProviderLogo.test.js +0 -95
  314. package/tests/CalendarSync/__snapshots__/Active.test.js.snap +0 -61
  315. package/tests/CalendarSync/__snapshots__/Inactive.test.js.snap +0 -78
  316. package/tests/CalendarSync/__snapshots__/Pending.test.js.snap +0 -90
  317. package/tests/CalendarSync/__snapshots__/ProviderLogo.test.js.snap +0 -267
  318. package/tests/CalendarSync/init.CalendarSync.test.js +0 -302
  319. package/tests/CalendarSync/mocks/theme.js +0 -14
  320. package/tests/CalendarSync/status-reducer.test.js +0 -435
  321. package/tests/DateTimePicker/SequencedSlotButton.test.js +0 -157
  322. package/tests/DateTimePicker/SlotButton.test.js +0 -118
  323. package/tests/DateTimePicker/contexts/status-reducer.test.js +0 -1036
  324. package/tests/DateTimePicker/dummy-data.js +0 -883
  325. package/tests/DateTimePicker/utils.test.js +0 -515
  326. package/tests/colors.test.js +0 -70
  327. package/tests/components/TimezoneSelector.test.js +0 -124
  328. package/tests/components/main.test.js +0 -203
  329. package/tests/components/rtl-utils.js +0 -32
  330. package/tests/connections.test.js +0 -684
  331. package/tests/events.test.js +0 -472
  332. package/tests/generator.test.js +0 -74
  333. package/tests/i18n.test.js +0 -255
  334. package/tests/init.Agenda.test.js +0 -122
  335. package/tests/init.AvailabilityRules.test.js +0 -279
  336. package/tests/init.AvailabilityViewer.test.js +0 -740
  337. package/tests/init.SlotPicker.test.js +0 -166
  338. package/tests/init.test.js +0 -231
  339. package/tests/logging.test.js +0 -235
  340. package/tests/mocks/i18n.js +0 -3
  341. package/tests/mocks/theme.js +0 -3
  342. package/tests/setupJest.js +0 -8
  343. package/tests/slots.rules.test.js +0 -195
  344. package/tests/slots.test.js +0 -278
  345. package/tests/utils.AvailabilityRules.test.js +0 -221
  346. package/tests/utils.AvailabilityViewer.test.js +0 -1800
  347. package/tests/utils.CalendarSync.test.js +0 -277
  348. package/tests/utils.test.js +0 -119
  349. package/webpack.config.js +0 -114
@@ -1,1036 +0,0 @@
1
- import { statusReducer } from "../../../src/js/components/DateTimePicker/contexts/status-reducer";
2
- import {
3
- testSingleSlotsArray,
4
- testSingleSlotsObject,
5
- testSlotsObject,
6
- testSlotsObjectPartial,
7
- testSlotsArray,
8
- testSlotsArrayAdditional,
9
- testSequencedSlotsArray,
10
- testDaySlots,
11
- testDaySequencedSlots,
12
- testSequencedSlotsObject,
13
- testQuery,
14
- testSequencedQuery,
15
- } from "../dummy-data";
16
-
17
- import {
18
- getAvailableDays,
19
- getMonthObjectsFromQuery,
20
- getMonthsLoadingFromQuery,
21
- } from "../../../src/js/components/DateTimePicker/utils/slots";
22
- import {
23
- getMonthsInDisplay,
24
- parseTimeSlots,
25
- } from "../../../src/js/components/DateTimePicker/utils/calendar";
26
- import moment from "moment";
27
-
28
- const months = getMonthObjectsFromQuery(testQuery, "Europe/London");
29
- const monthsLoading = getMonthsLoadingFromQuery(testQuery, "Europe/London");
30
-
31
- const testMonthlySlots = months.map((month, i) => ({
32
- month: month.month,
33
- hasNext: i < months.length - 1 ? true : false,
34
- hasPrev: i > 0 ? true : false,
35
- monthsInView: getMonthsInDisplay(month.month, "sunday"),
36
- days: parseTimeSlots({
37
- slots: testSlotsObject,
38
- month: month.month,
39
- tzid: "Europe/London",
40
- startDay: "sunday",
41
- }),
42
- }));
43
-
44
- const testMonthlyView = testMonthlySlots[0];
45
-
46
- const startingState = {
47
- columnView: "slots",
48
- daySlots: testDaySlots,
49
- locale: "en",
50
- mode: "confirm",
51
- query: testQuery,
52
- months,
53
- monthlyView: testMonthlyView,
54
- monthsLoading,
55
- selected: {
56
- start: "2021-09-29T08:00:00Z",
57
- end: "2021-09-29T09:00:00Z",
58
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
59
- },
60
- startDateObject: moment("2021-09-01", "YYYY-MM-DD"),
61
- endDateObject: moment("2021-10-31", "YYYY-MM-DD"),
62
- selectedDay: "2021-09-29",
63
- startDay: "sunday",
64
- focusedDay: "2021-09-29",
65
- focusedSlot: "2021-09-29T08:00:00Z",
66
- availableDays: getAvailableDays(testSlotsObject, "Europe/London"),
67
- slots: testSlotsObject,
68
- slotFetchCount: 1,
69
- slotInjectionPoint: undefined,
70
- tzid: "Europe/London",
71
- populated: true,
72
- callback: notification => console.log(notification),
73
- };
74
-
75
- describe("Date Time Picker status reducer", () => {
76
- it("CANCEL_SLOT_SELECTION", async () => {
77
- const oldState = { ...startingState };
78
- const result = statusReducer(oldState, {
79
- type: "CANCEL_SLOT_SELECTION",
80
- });
81
-
82
- delete oldState.columnView;
83
- delete oldState.focusedSlot;
84
- delete oldState.selected;
85
-
86
- const { columnView, focusedSlot, selected, ...newState } = result;
87
-
88
- // These values have been updated
89
- expect(columnView).toBe("slots");
90
- expect(focusedSlot).toBe("2021-09-29T08:00:00Z");
91
- expect(selected).toBe(false);
92
- // All other values are unchanged
93
- expect(newState).toStrictEqual(oldState);
94
- });
95
-
96
- it("CONFIRM_SELECTION", async () => {
97
- const callbackSpy = jest.spyOn(startingState, "callback");
98
- const oldState = { ...startingState };
99
- const result = statusReducer(oldState, {
100
- type: "CONFIRM_SELECTION",
101
- tzid: "Europe/London",
102
- });
103
-
104
- const expectedNotification = {
105
- notification: {
106
- type: "slot_selected",
107
- slot: {
108
- start: "2021-09-29T08:00:00Z",
109
- end: "2021-09-29T09:00:00Z",
110
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
111
- },
112
- tzid: "Europe/London",
113
- },
114
- };
115
-
116
- const { ...newState } = result;
117
-
118
- // These values have been updated
119
- expect(callbackSpy).toHaveBeenCalled();
120
- expect(callbackSpy).toHaveBeenCalledWith(expectedNotification);
121
- // All other values are unchanged
122
- expect(newState).toStrictEqual(oldState);
123
- });
124
-
125
- it("ERROR_GETTING_SLOTS", async () => {
126
- const callbackSpy = jest.spyOn(startingState, "callback");
127
- const oldState = { ...startingState };
128
- const errorMessage = "fake error message";
129
- const result = statusReducer(oldState, {
130
- type: "ERROR_GETTING_SLOTS",
131
- error: errorMessage,
132
- });
133
-
134
- const expectedNotification = {
135
- notification: {
136
- type: "error",
137
- message: "There was an error getting the slots",
138
- },
139
- };
140
-
141
- delete oldState.columnView;
142
-
143
- const { error, columnView, ...newState } = result;
144
-
145
- // These values have been updated
146
- expect(columnView).toBe("error");
147
- expect(error).toBe(errorMessage);
148
- expect(callbackSpy).toHaveBeenCalled();
149
- expect(callbackSpy).toHaveBeenCalledWith(expectedNotification);
150
- // All other values are unchanged
151
- expect(newState).toStrictEqual(oldState);
152
- });
153
-
154
- it("ERROR_LOADING_SLOTS", async () => {
155
- const callbackSpy = jest.spyOn(startingState, "callback");
156
- const oldState = {
157
- ...startingState,
158
- months: [
159
- {
160
- month: "2021-09",
161
- current: true,
162
- loading: false,
163
- query: {
164
- max_results: 512,
165
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
166
- query_periods: [
167
- {
168
- start: "2021-09-29T08:00:00Z",
169
- end: "2021-09-30T22:59:00Z",
170
- },
171
- ],
172
- required_duration: { minutes: 60 },
173
- },
174
- },
175
- {
176
- month: "2021-10",
177
- current: false,
178
- loading: true,
179
- query: {
180
- max_results: 512,
181
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
182
- query_periods: [
183
- {
184
- start: "2021-09-30T23:00:00Z",
185
- end: "2021-10-04T18:00:00Z",
186
- },
187
- ],
188
- required_duration: { minutes: 60 },
189
- },
190
- },
191
- ],
192
- };
193
- const error = {
194
- body: {
195
- "query_periods[0].end": [
196
- {
197
- key: "errors.max_date_exceeded",
198
- description: "date is too far in the future",
199
- },
200
- ],
201
- },
202
- };
203
- const result = statusReducer(oldState, {
204
- type: "ERROR_LOADING_SLOTS",
205
- error,
206
- month: "2021-10",
207
- });
208
-
209
- const expectedNotification = {
210
- notification: {
211
- type: "error",
212
- message:
213
- "There was a problem with your availability query. Slots for the month of 2021-10 could not be loaded.",
214
- body: {
215
- "query_periods[0].end": [
216
- {
217
- key: "errors.max_date_exceeded",
218
- description: "date is too far in the future",
219
- },
220
- ],
221
- },
222
- },
223
- };
224
-
225
- const expectedResultForMonths = [
226
- {
227
- month: "2021-09",
228
- current: true,
229
- loading: false,
230
- query: {
231
- max_results: 512,
232
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
233
- query_periods: [
234
- {
235
- start: "2021-09-29T08:00:00Z",
236
- end: "2021-09-30T22:59:00Z",
237
- },
238
- ],
239
- required_duration: { minutes: 60 },
240
- },
241
- },
242
- {
243
- month: "2021-10",
244
- current: false,
245
- loading: false,
246
- query: {
247
- max_results: 512,
248
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
249
- query_periods: [
250
- {
251
- start: "2021-09-30T23:00:00Z",
252
- end: "2021-10-04T18:00:00Z",
253
- },
254
- ],
255
- required_duration: { minutes: 60 },
256
- },
257
- },
258
- ];
259
-
260
- delete oldState.months;
261
-
262
- const { months, ...newState } = result;
263
-
264
- // These values have been updated
265
- expect(months).toStrictEqual(expectedResultForMonths);
266
- expect(callbackSpy).toHaveBeenCalled();
267
- expect(callbackSpy).toHaveBeenCalledWith(expectedNotification);
268
- // All other values are unchanged
269
- expect(newState).toStrictEqual(oldState);
270
- });
271
-
272
- it("NO_SLOTS_FOUND", async () => {
273
- const callbackSpy = jest.spyOn(startingState, "callback");
274
- const oldState = { ...startingState };
275
- const result = statusReducer(oldState, {
276
- type: "NO_SLOTS_FOUND",
277
- });
278
-
279
- const expectedNotification = {
280
- notification: {
281
- type: "no_slots_found",
282
- },
283
- };
284
-
285
- delete oldState.columnView;
286
-
287
- const { columnView, ...newState } = result;
288
-
289
- // These values have been updated
290
- expect(columnView).toBe("no-slots");
291
- expect(callbackSpy).toHaveBeenCalled();
292
- expect(callbackSpy).toHaveBeenCalledWith(expectedNotification);
293
- // All other values are unchanged
294
- expect(newState).toStrictEqual(oldState);
295
- });
296
-
297
- it("RECALCULATE_MONTH_VIEW", async () => {
298
- const oldState = { ...startingState };
299
- const result = statusReducer(oldState, {
300
- type: "RECALCULATE_MONTH_VIEW",
301
- tzid: "Europe/London",
302
- });
303
-
304
- delete oldState.monthlyView;
305
-
306
- const { monthlyView, ...newState } = result;
307
-
308
- expect(oldState).toStrictEqual(newState);
309
- expect(monthlyView).toStrictEqual(testMonthlyView);
310
- });
311
-
312
- describe("SET_SLOTS", () => {
313
- it("sets initial slots", () => {
314
- const oldState = {
315
- ...startingState,
316
- slots: {},
317
- availableDays: [],
318
- slotFetchCount: 0,
319
- slotInjectionPoint: undefined,
320
- };
321
-
322
- const result = statusReducer(oldState, {
323
- type: "SET_SLOTS",
324
- slots: testSlotsArray,
325
- month: "2021-09",
326
- tzid: "Europe/London",
327
- });
328
-
329
- const expectedResultForMonths = [
330
- {
331
- month: "2021-09",
332
- current: true,
333
- loading: false,
334
- query: {
335
- max_results: 512,
336
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
337
- query_periods: [
338
- {
339
- start: "2021-09-29T08:00:00Z",
340
- end: "2021-09-30T22:59:00Z",
341
- },
342
- ],
343
- required_duration: { minutes: 60 },
344
- },
345
- },
346
- {
347
- month: "2021-10",
348
- current: false,
349
- loading: true,
350
- query: {
351
- max_results: 512,
352
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
353
- query_periods: [
354
- {
355
- start: "2021-09-30T23:00:00Z",
356
- end: "2021-10-04T18:00:00Z",
357
- },
358
- ],
359
- required_duration: { minutes: 60 },
360
- },
361
- },
362
- ];
363
-
364
- delete oldState.slots;
365
- delete oldState.availableDays;
366
- delete oldState.slotFetchCount;
367
- delete oldState.slotInjectionPoint;
368
- delete oldState.months;
369
-
370
- const {
371
- slots,
372
- availableDays,
373
- slotFetchCount,
374
- slotInjectionPoint,
375
- months,
376
- ...newState
377
- } = result;
378
-
379
- // These values have been updated
380
- expect(slots).toStrictEqual(testSlotsObject);
381
- expect(availableDays).toStrictEqual([
382
- "2021-09-29",
383
- "2021-09-30",
384
- "2021-10-01",
385
- "2021-10-04",
386
- ]);
387
- expect(slotFetchCount).toBe(1);
388
- expect(slotInjectionPoint).toBe("2021-09-29");
389
- expect(months).toStrictEqual(expectedResultForMonths);
390
-
391
- // All other values are unchanged
392
- expect(newState).toStrictEqual(oldState);
393
- });
394
-
395
- it("sets slots when there is only one available slot", () => {
396
- const oldState = {
397
- ...startingState,
398
- slots: {},
399
- availableDays: [],
400
- slotFetchCount: 0,
401
- slotInjectionPoint: undefined,
402
- };
403
-
404
- const result = statusReducer(oldState, {
405
- type: "SET_SLOTS",
406
- slots: testSingleSlotsArray,
407
- month: "2021-09",
408
- tzid: "Europe/London",
409
- });
410
-
411
- delete oldState.slots;
412
- delete oldState.availableDays;
413
- delete oldState.slotFetchCount;
414
- delete oldState.slotInjectionPoint;
415
-
416
- const {
417
- slots,
418
- availableDays,
419
- slotFetchCount,
420
- slotInjectionPoint,
421
- ...newState
422
- } = result;
423
-
424
- // These values have been updated
425
- expect(slots).toStrictEqual(testSingleSlotsObject);
426
- expect(availableDays).toStrictEqual(["2021-09-29"]);
427
- expect(slotFetchCount).toBe(1);
428
- expect(slotInjectionPoint).toBe("2021-09-29");
429
-
430
- // All other values are unchanged
431
- expect(newState).toStrictEqual(oldState);
432
- });
433
-
434
- it("sets slots when there are no slots", () => {
435
- const oldState = {
436
- ...startingState,
437
- slots: {},
438
- availableDays: [],
439
- slotFetchCount: 0,
440
- slotInjectionPoint: undefined,
441
- };
442
-
443
- const result = statusReducer(oldState, {
444
- type: "SET_SLOTS",
445
- slots: [],
446
- month: "2021-09",
447
- tzid: "Europe/London",
448
- });
449
-
450
- delete oldState.slots;
451
- delete oldState.availableDays;
452
- delete oldState.slotFetchCount;
453
- delete oldState.slotInjectionPoint;
454
-
455
- const {
456
- slots,
457
- availableDays,
458
- slotFetchCount,
459
- slotInjectionPoint,
460
- ...newState
461
- } = result;
462
-
463
- // These values have been updated
464
- expect(slots).toStrictEqual({});
465
- expect(availableDays).toStrictEqual([]);
466
- expect(slotFetchCount).toBe(1);
467
- expect(slotInjectionPoint).toBe(undefined);
468
-
469
- // All other values are unchanged
470
- expect(newState).toStrictEqual(oldState);
471
- });
472
-
473
- it("sets additional slots", () => {
474
- const oldState = {
475
- ...startingState,
476
- slots: testSlotsObjectPartial,
477
- availableDays: ["2021-09-29", "2021-09-30"],
478
- months: [
479
- {
480
- month: "2021-09",
481
- current: true,
482
- loading: false,
483
- query: {
484
- max_results: 512,
485
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
486
- query_periods: [
487
- {
488
- start: "2021-09-29T08:00:00Z",
489
- end: "2021-09-30T22:59:00Z",
490
- },
491
- ],
492
- required_duration: { minutes: 60 },
493
- },
494
- },
495
- {
496
- month: "2021-10",
497
- current: false,
498
- loading: true,
499
- query: {
500
- max_results: 512,
501
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
502
- query_periods: [
503
- {
504
- start: "2021-09-30T23:00:00Z",
505
- end: "2021-10-04T18:00:00Z",
506
- },
507
- ],
508
- required_duration: { minutes: 60 },
509
- },
510
- },
511
- ],
512
- };
513
-
514
- const expectedResultForMonths = [
515
- {
516
- month: "2021-09",
517
- current: true,
518
- loading: false,
519
- query: {
520
- max_results: 512,
521
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
522
- query_periods: [
523
- {
524
- start: "2021-09-29T08:00:00Z",
525
- end: "2021-09-30T22:59:00Z",
526
- },
527
- ],
528
- required_duration: { minutes: 60 },
529
- },
530
- },
531
- {
532
- month: "2021-10",
533
- current: false,
534
- loading: false,
535
- query: {
536
- max_results: 512,
537
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
538
- query_periods: [
539
- {
540
- start: "2021-09-30T23:00:00Z",
541
- end: "2021-10-04T18:00:00Z",
542
- },
543
- ],
544
- required_duration: { minutes: 60 },
545
- },
546
- },
547
- ];
548
-
549
- const result = statusReducer(oldState, {
550
- type: "SET_SLOTS",
551
- slots: testSlotsArrayAdditional,
552
- month: "2021-10",
553
- tzid: "Europe/London",
554
- });
555
-
556
- delete oldState.slots;
557
- delete oldState.slotFetchCount;
558
- delete oldState.slotInjectionPoint;
559
- delete oldState.availableDays;
560
- delete oldState.months;
561
-
562
- const {
563
- slots,
564
- slotFetchCount,
565
- slotInjectionPoint,
566
- availableDays,
567
- months,
568
- ...newState
569
- } = result;
570
-
571
- expect(slots).toStrictEqual(testSlotsObject);
572
- expect(slotFetchCount).toBe(2);
573
- expect(slotInjectionPoint).toBe("2021-10-01");
574
- expect(availableDays).toStrictEqual([
575
- "2021-09-29",
576
- "2021-09-30",
577
- "2021-10-01",
578
- "2021-10-04",
579
- ]);
580
- expect(months).toStrictEqual(expectedResultForMonths);
581
-
582
- expect(newState).toStrictEqual(oldState);
583
- });
584
-
585
- it("sets sequenced slots", () => {
586
- const oldState = {
587
- ...startingState,
588
- query: testSequencedQuery,
589
- slots: {},
590
- availableDays: [],
591
- slotFetchCount: 0,
592
- slotInjectionPoint: undefined,
593
- sequenced_availability: true,
594
- };
595
-
596
- const result = statusReducer(oldState, {
597
- type: "SET_SLOTS",
598
- slots: testSequencedSlotsArray,
599
- month: "2021-09",
600
- tzid: "Europe/London",
601
- });
602
-
603
- const expectedResultForMonths = [
604
- {
605
- month: "2021-09",
606
- current: true,
607
- loading: false,
608
- query: {
609
- max_results: 512,
610
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
611
- query_periods: [
612
- {
613
- start: "2021-09-29T08:00:00Z",
614
- end: "2021-09-30T22:59:00Z",
615
- },
616
- ],
617
- required_duration: { minutes: 60 },
618
- },
619
- },
620
- {
621
- month: "2021-10",
622
- current: false,
623
- loading: true,
624
- query: {
625
- max_results: 512,
626
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
627
- query_periods: [
628
- {
629
- start: "2021-09-30T23:00:00Z",
630
- end: "2021-10-04T18:00:00Z",
631
- },
632
- ],
633
- required_duration: { minutes: 60 },
634
- },
635
- },
636
- ];
637
-
638
- delete oldState.slots;
639
- delete oldState.availableDays;
640
- delete oldState.slotFetchCount;
641
- delete oldState.slotInjectionPoint;
642
- delete oldState.months;
643
-
644
- const {
645
- slots,
646
- availableDays,
647
- slotFetchCount,
648
- slotInjectionPoint,
649
- months,
650
- ...newState
651
- } = result;
652
-
653
- // These values have been updated
654
- expect(slots).toStrictEqual(testSequencedSlotsObject);
655
- expect(availableDays).toStrictEqual([
656
- "2021-09-29",
657
- "2021-09-30",
658
- "2021-10-01",
659
- "2021-10-04",
660
- ]);
661
- expect(slotFetchCount).toBe(1);
662
- expect(slotInjectionPoint).toBe("2021-09-29");
663
- expect(months).toStrictEqual(expectedResultForMonths);
664
-
665
- // All other values are unchanged
666
- expect(newState).toStrictEqual(oldState);
667
- });
668
- });
669
-
670
- it("SET_FOCUS", async () => {
671
- const oldState = { ...startingState };
672
- const date = "2021-09-29";
673
- const result = statusReducer(oldState, {
674
- type: "SET_FOCUS",
675
- focusedDay: date,
676
- });
677
-
678
- delete oldState.focusedDay;
679
-
680
- const { focusedDay, ...newState } = result;
681
-
682
- // These values have been updated
683
- expect(focusedDay).toBe(date);
684
- // All other values are unchanged
685
- expect(newState).toStrictEqual(oldState);
686
- });
687
-
688
- describe("SELECT_DAY", () => {
689
- it("SELECT_DAY", async () => {
690
- const oldState = { ...startingState };
691
- const date = "2021-10-04";
692
- const result = statusReducer(oldState, {
693
- type: "SELECT_DAY",
694
- day: date,
695
- });
696
-
697
- const expectedDaySlots = [
698
- {
699
- start: "2021-10-04T09:00:00Z",
700
- end: "2021-10-04T10:00:00Z",
701
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
702
- },
703
- {
704
- start: "2021-10-04T10:00:00Z",
705
- end: "2021-10-01T11:00:00Z",
706
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
707
- },
708
- {
709
- start: "2021-10-04T11:00:00Z",
710
- end: "2021-10-04T12:00:00Z",
711
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
712
- },
713
- {
714
- start: "2021-10-04T15:00:00Z",
715
- end: "2021-10-04T16:00:00Z",
716
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
717
- },
718
- {
719
- start: "2021-10-04T17:00:00Z",
720
- end: "2021-10-04T18:00:00Z",
721
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
722
- },
723
- ];
724
-
725
- delete oldState.selectedDay;
726
- delete oldState.focusedDay;
727
- delete oldState.focusedSlot;
728
- delete oldState.columnView;
729
- delete oldState.daySlots;
730
-
731
- const {
732
- selectedDay,
733
- focusedDay,
734
- focusedSlot,
735
- columnView,
736
- daySlots,
737
- ...newState
738
- } = result;
739
-
740
- // These values have been updated
741
- expect(selectedDay).toBe(date);
742
- expect(focusedDay).toBe(date);
743
- expect(focusedSlot).toBe("2021-10-04T09:00:00Z");
744
- expect(daySlots).toStrictEqual(expectedDaySlots);
745
- expect(columnView).toBe("slots");
746
- // All other values are unchanged
747
- expect(newState).toStrictEqual(oldState);
748
- });
749
-
750
- it("SELECT_DAY for sequenced slots", async () => {
751
- const oldState = {
752
- ...startingState,
753
- slots: testSequencedSlotsObject,
754
- sequenced_availability: true,
755
- };
756
- const date = "2021-09-29";
757
- const result = statusReducer(oldState, {
758
- type: "SELECT_DAY",
759
- day: date,
760
- });
761
-
762
- delete oldState.selectedDay;
763
- delete oldState.focusedDay;
764
- delete oldState.focusedSlot;
765
- delete oldState.columnView;
766
- delete oldState.daySlots;
767
-
768
- const {
769
- selectedDay,
770
- focusedDay,
771
- focusedSlot,
772
- columnView,
773
- daySlots,
774
- ...newState
775
- } = result;
776
-
777
- // These values have been updated
778
- expect(selectedDay).toBe(date);
779
- expect(focusedDay).toBe(date);
780
- expect(focusedSlot).toBe("2021-09-29T08:00:00Z");
781
- expect(daySlots).toStrictEqual(testDaySequencedSlots);
782
- expect(columnView).toBe("slots");
783
- // All other values are unchanged
784
- expect(newState).toStrictEqual(oldState);
785
- });
786
- });
787
-
788
- describe("SELECT_MONTH", () => {
789
- it("doesn't select month if month before start bound", () => {
790
- const oldState = { ...startingState };
791
- const month = "2021-08";
792
- const result = statusReducer(oldState, {
793
- type: "SELECT_MONTH",
794
- month,
795
- tzid: "Europe/London",
796
- });
797
-
798
- expect(result).toStrictEqual(oldState);
799
- });
800
-
801
- it("doesn't select month if month outside end bound", () => {
802
- const oldState = { ...startingState };
803
- const month = "2021-11";
804
- const result = statusReducer(oldState, {
805
- type: "SELECT_MONTH",
806
- month,
807
- tzid: "Europe/London",
808
- });
809
-
810
- expect(result).toStrictEqual(oldState);
811
- });
812
-
813
- describe("within start and end bound", () => {
814
- it("selects month within start and end bound", () => {
815
- const oldState = { ...startingState };
816
- const month = "2021-10";
817
- const result = statusReducer(oldState, {
818
- type: "SELECT_MONTH",
819
- month: month,
820
- tzid: "Europe/London",
821
- });
822
-
823
- const expectedResultForMonths = [
824
- {
825
- month: "2021-09",
826
- current: false,
827
- loading: false,
828
- query: {
829
- max_results: 512,
830
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
831
- query_periods: [
832
- {
833
- start: "2021-09-29T08:00:00Z",
834
- end: "2021-09-30T22:59:00Z",
835
- },
836
- ],
837
- required_duration: { minutes: 60 },
838
- },
839
- },
840
- {
841
- month: "2021-10",
842
- current: true,
843
- loading: true,
844
- query: {
845
- max_results: 512,
846
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
847
- query_periods: [
848
- {
849
- start: "2021-09-30T23:00:00Z",
850
- end: "2021-10-04T18:00:00Z",
851
- },
852
- ],
853
- required_duration: { minutes: 60 },
854
- },
855
- },
856
- ];
857
-
858
- delete oldState.months;
859
- delete oldState.focusedDay;
860
- delete oldState.monthlyView;
861
-
862
- const { focusedDay, months, monthlyView, ...newState } = result;
863
-
864
- // These values have been updated
865
- expect(focusedDay).toBe(false);
866
- expect(monthlyView).toStrictEqual(testMonthlySlots[1]);
867
- expect(months).toStrictEqual(expectedResultForMonths);
868
-
869
- // All other values are unchanged
870
- expect(newState).toStrictEqual(oldState);
871
- });
872
-
873
- it("selects month with focusedDay", () => {
874
- const oldState = { ...startingState };
875
- const month = "2021-10";
876
- const date = "2021-10-09";
877
-
878
- const result = statusReducer(oldState, {
879
- type: "SELECT_MONTH",
880
- month: month,
881
- focusedDay: date,
882
- tzid: "Europe/London",
883
- });
884
-
885
- const expectedResultForMonths = [
886
- {
887
- month: "2021-09",
888
- current: false,
889
- loading: false,
890
- query: {
891
- max_results: 512,
892
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
893
- query_periods: [
894
- {
895
- start: "2021-09-29T08:00:00Z",
896
- end: "2021-09-30T22:59:00Z",
897
- },
898
- ],
899
- required_duration: { minutes: 60 },
900
- },
901
- },
902
- {
903
- month: "2021-10",
904
- current: true,
905
- loading: true,
906
- query: {
907
- max_results: 512,
908
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
909
- query_periods: [
910
- {
911
- start: "2021-09-30T23:00:00Z",
912
- end: "2021-10-04T18:00:00Z",
913
- },
914
- ],
915
- required_duration: { minutes: 60 },
916
- },
917
- },
918
- ];
919
-
920
- delete oldState.months;
921
- delete oldState.focusedDay;
922
- delete oldState.monthlyView;
923
-
924
- const { focusedDay, months, monthlyView, ...newState } = result;
925
-
926
- // These values have been updated
927
- expect(focusedDay).toBe(date);
928
- expect(monthlyView).toStrictEqual(testMonthlySlots[1]);
929
- expect(months).toStrictEqual(expectedResultForMonths);
930
-
931
- // All other values are unchanged
932
- expect(newState).toStrictEqual(oldState);
933
- });
934
- });
935
- });
936
-
937
- describe("SELECT_SLOT", () => {
938
- it("SELECT_SLOT", async () => {
939
- const oldState = { ...startingState };
940
- const slot = {
941
- start: "2021-09-30T14:00:00Z",
942
- end: "2021-09-30T15:00:00Z",
943
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
944
- };
945
- const result = statusReducer(oldState, {
946
- type: "SELECT_SLOT",
947
- slot: slot,
948
- });
949
-
950
- delete oldState.selected;
951
- delete oldState.focusedSlot;
952
- delete oldState.columnView;
953
-
954
- const { selected, focusedSlot, columnView, ...newState } = result;
955
-
956
- // These values have been updated
957
- expect(selected).toStrictEqual(slot);
958
- expect(focusedSlot).toBe("2021-09-30T14:00:00Z");
959
- expect(columnView).toBe("confirm");
960
- // All other values are unchanged
961
- expect(newState).toStrictEqual(oldState);
962
- });
963
-
964
- it("SELECT_SLOT for sequenced availability", async () => {
965
- const oldState = { ...startingState };
966
- const slot = {
967
- start: "2021-09-29T10:00:00Z",
968
- end: "2021-09-29T11:30:00Z",
969
- sequence: [
970
- {
971
- sequence_id: "test-one",
972
- start: "2021-09-29T10:00:00Z",
973
- end: "2021-09-29T11:00:00Z",
974
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
975
- },
976
- {
977
- sequence_id: "test-two",
978
- start: "2021-09-29T11:00:00Z",
979
- end: "2021-09-29T11:30:00Z",
980
- participants: [{ sub: "acc_5f35432b3f07d06753082354" }],
981
- },
982
- ],
983
- };
984
- const result = statusReducer(oldState, {
985
- type: "SELECT_SLOT",
986
- slot: slot,
987
- });
988
-
989
- delete oldState.selected;
990
- delete oldState.focusedSlot;
991
- delete oldState.columnView;
992
-
993
- const { selected, focusedSlot, columnView, ...newState } = result;
994
-
995
- // These values have been updated
996
- expect(selected).toStrictEqual(slot);
997
- expect(focusedSlot).toBe("2021-09-29T10:00:00Z");
998
- expect(columnView).toBe("confirm");
999
- // All other values are unchanged
1000
- expect(newState).toStrictEqual(oldState);
1001
- });
1002
- });
1003
-
1004
- it("SELECT_TZID", async () => {
1005
- const oldState = { ...startingState };
1006
- const timezone = {
1007
- tzid: "Asia/Kathmandu",
1008
- offset: "+05:45",
1009
- offsetMins: 345,
1010
- name: "Kathmandu",
1011
- abbr: "+0545",
1012
- };
1013
- const result = statusReducer(oldState, {
1014
- type: "SELECT_TZID",
1015
- tzid: timezone.tzid,
1016
- });
1017
-
1018
- delete oldState.availableDays;
1019
- delete oldState.daySlots;
1020
- delete oldState.monthlyView;
1021
-
1022
- const { availableDays, daySlots, monthlyView, ...newState } = result;
1023
-
1024
- // These values have been updated
1025
- expect(availableDays).toStrictEqual([
1026
- "2021-09-29",
1027
- "2021-09-30",
1028
- "2021-10-01",
1029
- "2021-10-04",
1030
- ]);
1031
- expect(daySlots).toStrictEqual(testDaySlots);
1032
- expect(monthlyView).toStrictEqual(testMonthlyView);
1033
- // All other values are unchanged
1034
- expect(newState).toStrictEqual(oldState);
1035
- });
1036
- });