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,684 +0,0 @@
1
- import * as connections from "../src/js/helpers/connections";
2
-
3
- // Test data:
4
- const exampleOptions = ["TOKEN_EXAMPLE", "http://local.cronofy.com"];
5
- const calendarResponse = {
6
- calendars: [
7
- {
8
- provider_name: "google",
9
- profile_id: "A_PROFILE_ID",
10
- profile_name: "AN_EMAIL_ADDRESS",
11
- calendar_id: "A_CALENDAR_ID_0",
12
- calendar_name: "AN_EMAIL_ADDRESS",
13
- calendar_readonly: false,
14
- calendar_deleted: false,
15
- calendar_primary: true,
16
- permission_level: "sandbox",
17
- },
18
- {
19
- provider_name: "google",
20
- profile_id: "A_PROFILE_ID",
21
- profile_name: "AN_EMAIL_ADDRESS",
22
- calendar_id: "A_CALENDAR_ID_1",
23
- calendar_name: "A_TEST_NAME",
24
- calendar_readonly: false,
25
- calendar_deleted: false,
26
- calendar_primary: false,
27
- permission_level: "sandbox",
28
- },
29
- ],
30
- };
31
- const getInfoResponse = {
32
- sub: "acc_01234567890",
33
- email: "AN_EMAIL_ADDRESS",
34
- name: "PROFILE_NAME",
35
- zoneinfo: "Europe/London",
36
- "cronofy.type": "account",
37
- "cronofy.data": {
38
- authorization: { scope: "read_write" },
39
- profiles: [
40
- {
41
- provider_name: "google",
42
- profile_id: "A_PROFILE_ID",
43
- profile_name: "AN_EMAIL_ADDRESS",
44
- profile_connected: true,
45
- profile_initial_sync_required: false,
46
- profile_calendars: [
47
- {
48
- calendar_id: "A_CALENDAR_ID_0",
49
- calendar_name: "CALENDAR_NAME",
50
- calendar_readonly: false,
51
- calendar_deleted: false,
52
- calendar_primary: true,
53
- permission_level: "sandbox",
54
- },
55
- {
56
- calendar_id: "A_CALENDAR_ID_1",
57
- calendar_name: "SECOND_CALENDAR_NAME",
58
- calendar_readonly: false,
59
- calendar_deleted: false,
60
- calendar_primary: false,
61
- permission_level: "sandbox",
62
- },
63
- ],
64
- },
65
- ],
66
- },
67
- };
68
-
69
- describe("Connections", () => {
70
- beforeEach(() => {
71
- fetch.resetMocks();
72
- });
73
-
74
- // parseCalendars
75
- it("parses calendar info", () => {
76
- const calendars = connections.parseCalendars(calendarResponse);
77
- // creates the correct length of array
78
- expect(calendars.length).toEqual(2);
79
- // sets the name correctly
80
- expect(calendars[0].name).toEqual("AN_EMAIL_ADDRESS");
81
- expect(calendars[1].name).toEqual("A_TEST_NAME");
82
- // sets the id correctly
83
- expect(calendars[0].id).toEqual("A_CALENDAR_ID_0");
84
- expect(calendars[1].id).toEqual("A_CALENDAR_ID_1");
85
- // sets the color correctly
86
- expect(calendars[0].color).toEqual(0);
87
- expect(calendars[1].color).toEqual(1);
88
- });
89
-
90
- // getUserInfo
91
- it("calls calendars endopoint correctly", async () => {
92
- const mockBody = { body: "working" };
93
- fetch.mockResponseOnce(JSON.stringify(mockBody));
94
-
95
- // Converts successful response into JSON
96
- await connections.getUserInfo(...exampleOptions).then(res => {
97
- expect(res).toEqual(mockBody);
98
- });
99
-
100
- // Calls once
101
- expect(fetch.mock.calls.length).toEqual(1);
102
- // constructs url properly
103
- expect(fetch.mock.calls[0][0].toString()).toEqual(
104
- `${exampleOptions[1]}/v1/userinfo?et=${exampleOptions[0]}`
105
- );
106
- });
107
-
108
- // getUserInfo
109
- it("handles failed fetch calendars request", async () => {
110
- const errorMessage = "fake error message";
111
- fetch.mockReject(new Error(errorMessage));
112
-
113
- // Converts successful response into JSON
114
- await connections.getUserInfo(...exampleOptions).catch(err => {
115
- expect(err.type).toEqual(401);
116
- expect(typeof err.message).toEqual("string");
117
- });
118
- });
119
-
120
- // parseUserInfoCalendars
121
- it("parses calendar info", () => {
122
- const calendars = connections.parseUserInfoCalendars(getInfoResponse);
123
- // creates the correct length of array
124
- expect(calendars.length).toEqual(2);
125
- // sets the name correctly
126
- expect(calendars[0].name).toEqual("CALENDAR_NAME");
127
- expect(calendars[1].name).toEqual("SECOND_CALENDAR_NAME");
128
- // sets the id correctly
129
- expect(calendars[0].id).toEqual("A_CALENDAR_ID_0");
130
- expect(calendars[1].id).toEqual("A_CALENDAR_ID_1");
131
- // sets the color correctly
132
- expect(calendars[0].color).toEqual(0);
133
- expect(calendars[1].color).toEqual(1);
134
- });
135
-
136
- // parseEventsArgs
137
- // Not needed right away, but will be useful when handling multiple specified calendars.
138
- it("parses event query args", () => {
139
- const rawArgs = {
140
- tzid: "TIMEZONE",
141
- include_managed: true,
142
- from: "FROM",
143
- to: "TO",
144
- };
145
- const args = connections.parseEventsArgs(rawArgs, exampleOptions[0]);
146
- expect(args.tzid).toEqual("TIMEZONE");
147
- expect(args.et).toEqual(exampleOptions[0]);
148
- expect(args.include_managed).toBe(true);
149
- expect(args.from).toEqual("FROM");
150
- expect(args.to).toEqual("TO");
151
- });
152
-
153
- // createEventsUrl
154
- it("creates url from params", () => {
155
- const api_domain = "http://local.cronofy.com";
156
- const data = {
157
- tzid: "Europe/London",
158
- include_managed: true,
159
- from: "2018-09-17",
160
- include_geo: true,
161
- to: "2018-09-18",
162
- };
163
- expect(connections.createEventsUrl(api_domain, data).toString()).toEqual(
164
- "http://local.cronofy.com/v1/events?tzid=Europe%2FLondon&include_managed=true&from=2018-09-17&include_geo=true&to=2018-09-18"
165
- );
166
- });
167
-
168
- // getEvents
169
- it("calls events endpoint correctly", async () => {
170
- const mockBody = {
171
- events: [
172
- { event: 2, name: "testing" },
173
- { event: 3, name: "something else" },
174
- { event: 4, name: "another thing" },
175
- ],
176
- userinfo: getInfoResponse,
177
- };
178
- const args = {
179
- tzid: "Europe/London",
180
- include_managed: true,
181
- from: "2018-09-17",
182
- include_geo: true,
183
- to: "2018-09-18",
184
- };
185
- fetch.mockResponseOnce(JSON.stringify(mockBody));
186
-
187
- // Converts successful response into JSON
188
- await connections
189
- .getEvents({
190
- token: exampleOptions[0],
191
- api_domain: exampleOptions[1],
192
- args: args,
193
- })
194
- .then(res => {
195
- expect(res.events).toEqual(mockBody.events);
196
- });
197
-
198
- // Calls once
199
- expect(fetch.mock.calls.length).toEqual(1);
200
- // constructs url properly
201
- expect(fetch.mock.calls[0][0].toString()).toEqual(
202
- `${exampleOptions[1]}/v1/events?et=${exampleOptions[0]}&from=2018-09-17&include_geo=true&include_userinfo=true&to=2018-09-18&tzid=Europe%2FLondon&include_managed=true`
203
- );
204
- // // sends auth token correctly
205
- // expect(fetch.mock.calls[0][1].headers["Authorization"]).toEqual(
206
- // `Bearer ${exampleOptions[0]}`
207
- // );
208
- });
209
-
210
- // getEvents
211
- it("handles empty event response correctly", async () => {
212
- const mockBody = {
213
- events: [],
214
- };
215
- const args = {
216
- tzid: "Europe/London",
217
- include_managed: true,
218
- from: "2018-09-17",
219
- include_geo: true,
220
- to: "2018-09-18",
221
- };
222
- fetch.mockResponseOnce(JSON.stringify(mockBody));
223
-
224
- // Converts successful response into JSON
225
- await connections
226
- .getEvents({
227
- token: exampleOptions[0],
228
- api_domain: exampleOptions[1],
229
- args: args,
230
- })
231
- .then(res => {
232
- expect(res.events).toEqual([]);
233
- });
234
- });
235
-
236
- // getEvents
237
- it("calls multi-page events endpoint correctly", async () => {
238
- const mockLoadNextPage = jest.fn((x, y, z) => {
239
- z.push({ event: 2, name: "testing" });
240
- return z;
241
- });
242
- const mockBody = {
243
- pages: { next_page: "NEXT_PAGE_URL" },
244
- events: [{ event: 1, name: "test" }],
245
- };
246
- const desiredResult = [
247
- { event: 1, name: "test" },
248
- { event: 2, name: "testing" },
249
- ];
250
- const args = {
251
- tzid: "Europe/London",
252
- include_managed: true,
253
- from: "2018-09-17",
254
- include_geo: true,
255
- to: "2018-09-18",
256
- };
257
- fetch.mockResponseOnce(JSON.stringify(mockBody));
258
-
259
- // Converts successful response into JSON
260
- await connections
261
- .getEvents({
262
- token: exampleOptions[0],
263
- api_domain: exampleOptions[1],
264
- args: args,
265
- next: mockLoadNextPage,
266
- })
267
- .then(res => {
268
- expect(res).toEqual(desiredResult);
269
- });
270
-
271
- // Calls once
272
- expect(fetch.mock.calls.length).toEqual(1);
273
- // Calls second page
274
- expect(mockLoadNextPage.mock.calls.length).toEqual(1);
275
- // // Calls second page with correct args
276
- // expect(loadNextPage).toBeCalledWith(
277
- // exampleOptions[0],
278
- // "NEXT_PAGE_URL",
279
- // [{ event: 1, name: "test" }] // TODO: why does this arg show the second event already?
280
- // );
281
- });
282
-
283
- // getEvents
284
- it("handles failed fetch events request", async () => {
285
- const errorMessage = "fake error message";
286
- fetch.mockReject(new Error(errorMessage));
287
-
288
- const args = {
289
- tzid: "Europe/London",
290
- include_managed: true,
291
- from: "2018-09-17",
292
- include_geo: true,
293
- to: "2018-09-18",
294
- };
295
-
296
- // Converts successful response into JSON
297
- await connections
298
- .getEvents({
299
- token: exampleOptions[0],
300
- api_domain: exampleOptions[1],
301
- args: args,
302
- })
303
- .catch(err => {
304
- expect(err.type).toEqual(401);
305
- // expect(err.message).toEqual(
306
- // "There was a problem fetching data: check your element_token is valid"
307
- // );
308
- expect(typeof err.message).toEqual("string");
309
- });
310
- });
311
-
312
- // getEvents
313
- it("calls events endpoint correctly with only_managed", async () => {
314
- const mockBody = {
315
- events: [
316
- { event: 2, name: "testing" },
317
- { event: 3, name: "something else" },
318
- { event: 4, name: "another thing" },
319
- ],
320
- userinfo: getInfoResponse,
321
- };
322
- const args = {
323
- tzid: "Europe/London",
324
- include_managed: true,
325
- only_managed: true,
326
- from: "2018-09-17",
327
- include_geo: true,
328
- to: "2018-09-18",
329
- };
330
- fetch.mockResponseOnce(JSON.stringify(mockBody));
331
-
332
- // Converts successful response into JSON
333
- await connections
334
- .getEvents({
335
- token: exampleOptions[0],
336
- api_domain: exampleOptions[1],
337
- args: args,
338
- })
339
- .then(res => {
340
- expect(res.events).toEqual(mockBody.events);
341
- });
342
-
343
- // Calls once
344
- expect(fetch.mock.calls.length).toEqual(1);
345
- // constructs url properly
346
- expect(fetch.mock.calls[0][0].toString()).toEqual(
347
- `${exampleOptions[1]}/v1/events?et=${exampleOptions[0]}&from=2018-09-17&include_geo=true&include_userinfo=true&to=2018-09-18&tzid=Europe%2FLondon&only_managed=true`
348
- );
349
- });
350
-
351
- // getEvents
352
- it("calls free_busy endpoint correctly", async () => {
353
- const mockBody = {
354
- events: [
355
- { event: 2, name: "testing" },
356
- { event: 3, name: "something else" },
357
- { event: 4, name: "another thing" },
358
- ],
359
- userinfo: getInfoResponse,
360
- };
361
- const args = {
362
- tzid: "Europe/London",
363
- include_managed: true,
364
- from: "2018-09-17",
365
- include_geo: true,
366
- to: "2018-09-18",
367
- };
368
- fetch.mockResponseOnce(JSON.stringify(mockBody));
369
-
370
- // Converts successful response into JSON
371
- await connections
372
- .getEvents({
373
- token: exampleOptions[0],
374
- api_domain: exampleOptions[1],
375
- args: args,
376
- freeBusy: true,
377
- })
378
- .then(res => {
379
- expect(res.events).toEqual(mockBody.events);
380
- });
381
-
382
- // Calls once
383
- expect(fetch.mock.calls.length).toEqual(1);
384
- // constructs url properly
385
- expect(fetch.mock.calls[0][0].toString()).toEqual(
386
- `${exampleOptions[1]}/v1/free_busy?et=${exampleOptions[0]}&from=2018-09-17&include_geo=true&include_userinfo=true&to=2018-09-18&tzid=Europe%2FLondon&include_managed=true`
387
- );
388
- });
389
-
390
- // getEvents
391
- it("calls events endpoint correctly without only_managed", async () => {
392
- const mockBody = {
393
- events: [
394
- { event: 2, name: "testing" },
395
- { event: 3, name: "something else" },
396
- { event: 4, name: "another thing" },
397
- ],
398
- userinfo: getInfoResponse,
399
- };
400
- const args = {
401
- tzid: "Europe/London",
402
- include_managed: true,
403
- only_managed: false,
404
- from: "2018-09-17",
405
- include_geo: true,
406
- to: "2018-09-18",
407
- };
408
- fetch.mockResponseOnce(JSON.stringify(mockBody));
409
-
410
- // Converts successful response into JSON
411
- await connections
412
- .getEvents({
413
- token: exampleOptions[0],
414
- api_domain: exampleOptions[1],
415
- args: args,
416
- })
417
- .then(res => {
418
- expect(res.events).toEqual(mockBody.events);
419
- });
420
-
421
- // Calls once
422
- expect(fetch.mock.calls.length).toEqual(1);
423
- // constructs url properly
424
- expect(fetch.mock.calls[0][0].toString()).toEqual(
425
- `${exampleOptions[1]}/v1/events?et=${exampleOptions[0]}&from=2018-09-17&include_geo=true&include_userinfo=true&to=2018-09-18&tzid=Europe%2FLondon&include_managed=true`
426
- );
427
- });
428
-
429
- // loadNextPage
430
- it("loads multiple pages", async () => {
431
- const startingArray = [{ event: 1, name: "test" }];
432
- const mockBody = {
433
- events: [
434
- { event: 2, name: "testing" },
435
- { event: 3, name: "something else" },
436
- { event: 4, name: "another thing" },
437
- ],
438
- };
439
- const desiredResult = [
440
- { event: 1, name: "test" },
441
- { event: 2, name: "testing" },
442
- { event: 3, name: "something else" },
443
- { event: 4, name: "another thing" },
444
- ];
445
- fetch.mockResponseOnce(JSON.stringify(mockBody));
446
-
447
- // Converts successful response into JSON
448
- await connections
449
- .loadNextPage(
450
- exampleOptions[0],
451
- `http://local.cronofy.com/v1/events/pages/NEXT_PAGE`,
452
- startingArray
453
- )
454
- .then(res => {
455
- expect(res.events).toEqual(desiredResult);
456
- });
457
- // Calls once
458
- expect(fetch.mock.calls.length).toEqual(1);
459
- });
460
-
461
- // loadNextPage
462
- it("handles empty multiple-page response correctly", async () => {
463
- const mockBody = {
464
- events: [],
465
- };
466
- fetch.mockResponseOnce(JSON.stringify(mockBody));
467
-
468
- // Converts successful response into JSON
469
- await connections
470
- .loadNextPage(
471
- exampleOptions[0],
472
- `http://local.cronofy.com/v1/events/pages/NEXT_PAGE`,
473
- []
474
- )
475
- .then(res => {
476
- expect(res.events).toEqual([]);
477
- });
478
- });
479
-
480
- // loadNextPage
481
- it("loads multiple pages recurrsively", async () => {
482
- const mockLoadNextPage = jest.fn((w, x, y, z) => {
483
- y.push({ event: 5, name: "test" });
484
- return { events: y, userinfo: z };
485
- });
486
- const startingArray = [{ event: 1, name: "test" }];
487
- const mockBody = {
488
- pages: { next_page: "NEXT_PAGE_URL" },
489
- events: [
490
- { event: 2, name: "testing" },
491
- { event: 3, name: "something else" },
492
- { event: 4, name: "another thing" },
493
- ],
494
- };
495
- const desiredResult = [
496
- { event: 1, name: "test" },
497
- { event: 2, name: "testing" },
498
- { event: 3, name: "something else" },
499
- { event: 4, name: "another thing" },
500
- { event: 5, name: "test" },
501
- ];
502
- fetch.mockResponseOnce(JSON.stringify(mockBody));
503
-
504
- // Converts successful response into JSON
505
- await connections
506
- .loadNextPage(
507
- exampleOptions[0],
508
- `http://local.cronofy.com/v1/events/pages/NEXT_PAGE`,
509
- startingArray,
510
- {},
511
- mockLoadNextPage
512
- )
513
- .then(res => {
514
- expect(res.events).toEqual(desiredResult);
515
- });
516
- // Calls once
517
- expect(fetch.mock.calls.length).toEqual(1);
518
- // Calls second page
519
- expect(mockLoadNextPage.mock.calls.length).toEqual(1);
520
- });
521
-
522
- // loadNextPage
523
- it("handles failed fetch next-page request", async () => {
524
- const errorMessage = "fake error message";
525
- fetch.mockReject(new Error(errorMessage));
526
-
527
- // Converts successful response into JSON
528
- await connections
529
- .loadNextPage(
530
- exampleOptions[0],
531
- `http://local.cronofy.com/v1/events/pages/NEXT_PAGE`,
532
- []
533
- )
534
- .catch(err => {
535
- expect(err.type).toEqual(401);
536
-
537
- expect(typeof err.message).toEqual("string");
538
- });
539
- });
540
-
541
- // getAvailability
542
- it("calls availability endpoint correctly", async () => {
543
- const mockBody = {
544
- query_periods: [
545
- {
546
- start: "2018-11-09T09:00:00Z",
547
- end: "2018-11-09T10:00:00Z",
548
- participants: [
549
- {
550
- sub: "acc_5b97a52a5c92eb0cc0400ffe",
551
- },
552
- ],
553
- },
554
- {
555
- start: "2018-11-10T10:30:00Z",
556
- end: "2018-11-10T11:30:00Z",
557
- participants: [
558
- {
559
- sub: "test_busy_1130-1200_1445-1500",
560
- },
561
- ],
562
- },
563
- {
564
- start: "2018-11-11T10:30:00Z",
565
- end: "2018-11-11T11:30:00Z",
566
- participants: [
567
- {
568
- sub: "acc_5b97a52a5c92eb0cc0400ffe",
569
- },
570
- {
571
- sub: "test_busy_1000-1030_1430-1540_2200-0600",
572
- },
573
- {
574
- sub: "test_busy_1130-1200_1445-1500",
575
- },
576
- ],
577
- },
578
- ],
579
- };
580
- const args = {
581
- participants: [
582
- {
583
- required: "all",
584
- members: [{ sub: "acc_5ba21743f408617d1269ea1e" }],
585
- },
586
- ],
587
- required_duration: { minutes: 30 },
588
- query_periods: [
589
- { start: "2018-12-09T09:00:00Z", end: "2018-12-09T17:00:00Z" },
590
- { start: "2018-12-10T09:00:00Z", end: "2018-12-10T17:00:00Z" },
591
- { start: "2018-12-11T09:00:00Z", end: "2018-12-11T17:00:00Z" },
592
- ],
593
- };
594
- fetch.mockResponseOnce(JSON.stringify(mockBody));
595
-
596
- // Converts successful response into JSON
597
- await connections.getAvailability(...exampleOptions, args).then(res => {
598
- expect(res).toEqual(mockBody);
599
- });
600
-
601
- // Calls once
602
- expect(fetch.mock.calls.length).toEqual(1);
603
- // constructs url properly
604
- expect(fetch.mock.calls[0][0].toString()).toEqual(
605
- `${exampleOptions[1]}/v1/availability?et=${exampleOptions[0]}`
606
- );
607
-
608
- expect(fetch.mock.calls[0][1].body).toEqual(JSON.stringify(args));
609
- });
610
-
611
- // getAvailability
612
- it("handles failed fetch availability request", async () => {
613
- const args = {
614
- participants: [
615
- {
616
- required: "all",
617
- members: [{ sub: "acc_5ba21743f408617d1269ea1e" }],
618
- },
619
- ],
620
- required_duration: { minutes: 30 },
621
- query_periods: [
622
- { start: "2018-12-09T09:00:00Z", end: "2018-12-09T17:00:00Z" },
623
- { start: "2018-12-10T09:00:00Z", end: "2018-12-10T17:00:00Z" },
624
- { start: "2018-12-11T09:00:00Z", end: "2018-12-11T17:00:00Z" },
625
- ],
626
- };
627
-
628
- fetch.mockReject(new Error("unknown error"));
629
-
630
- // Injects an error message
631
- await connections.getAvailability(...exampleOptions, args).catch(err => {
632
- expect(typeof err.message).toEqual("string");
633
- });
634
- });
635
-
636
- // getAvailabilityRules
637
- it("handles fetch availability_rule request", async () => {
638
- const mockBody = {
639
- availability_rule: {
640
- availability_rule_id: "availability_rule_id",
641
- tzid: "Europe/London",
642
- weekly_periods: [{}, {}, {}, {}, {}],
643
- },
644
- };
645
- fetch.mockResponseOnce(JSON.stringify(mockBody));
646
-
647
- const res = await connections.getAvailabilityRules({
648
- token: exampleOptions[0],
649
- api_domain: exampleOptions[1],
650
- availability_rule_id: "availability_rule_id",
651
- });
652
-
653
- expect(res).toEqual(mockBody);
654
- });
655
-
656
- // getAvailabilityRules
657
- it("handles failed fetch availability_rule request", async () => {
658
- fetch.mockReject(new Error("unknown error"));
659
-
660
- // Injects an error message
661
- await connections
662
- .getAvailabilityRules({
663
- token: exampleOptions[0],
664
- api_domain: exampleOptions[1],
665
- availability_rule_id: "availability_rule_id",
666
- })
667
- .catch(err => {
668
- expect(typeof err.message).toEqual("string");
669
- });
670
- });
671
-
672
- // getAvailabilityRules
673
- it("handles unknown availability_rule requests", async () => {
674
- fetch.mockResponseOnce(JSON.stringify([]), { status: 404 });
675
-
676
- const res = await connections.getAvailabilityRules({
677
- token: exampleOptions[0],
678
- api_domain: exampleOptions[1],
679
- availability_rule_id: "availability_rule_id",
680
- });
681
-
682
- expect(res.type).toEqual(404);
683
- });
684
- });