cronofy-elements 1.48.1 → 1.49.1

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.1.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.1.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 -414
  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 -44
  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,370 +0,0 @@
1
- import * as mocks from "./mocks";
2
- import packageDetails from "../../../package";
3
- import { errorMessages } from "./logging";
4
- import { parseFreeBusyEvents } from "./events";
5
-
6
- const handle422Responses = res => {
7
- if (res.errors) {
8
- throw {
9
- type: 422,
10
- message: errorMessages[422].message,
11
- body: res.errors,
12
- docsSlug: errorMessages[422].docsSlug,
13
- };
14
- }
15
- return res;
16
- };
17
-
18
- const handleInvalidResponses = res => {
19
- // All 2** status are valid.
20
- // 422 is included because we want to handle those in
21
- // handle422Responses *after* res.body.json() has completed
22
- // (res.body is a ReadableStream until then)
23
- const okStatuses = [200, 201, 202, 422];
24
-
25
- if (okStatuses.includes(res.status)) {
26
- return res;
27
- }
28
-
29
- throw {
30
- type: res.status,
31
- message: errorMessages[res.status].message,
32
- };
33
- };
34
-
35
- const handleInvalidRulesResponse = res => {
36
- if (res.status === 404) {
37
- // Rules treats a 404 as a valid response
38
- return res;
39
- }
40
-
41
- return handleInvalidResponses(res);
42
- };
43
-
44
- const catchAndRethrowErrors = error => {
45
- if (error.type) {
46
- throw error;
47
- }
48
- throw {
49
- type: 401,
50
- message: errorMessages[401].message,
51
- docsSlug: errorMessages[401].docsSlug,
52
- };
53
- };
54
-
55
- export const parseCalendars = response =>
56
- response.calendars.map((cal, i) => ({
57
- name: cal.calendar_name,
58
- id: cal.calendar_id,
59
- color: i,
60
- }));
61
-
62
- export const getUserInfo = (token, api_domain, mock = false) => {
63
- if (mock) return mocks.userinfo;
64
-
65
- const url = new URL(`${api_domain}/v1/userinfo`);
66
- url.searchParams.append("et", token);
67
-
68
- return fetch(url.href, {
69
- method: "GET",
70
- headers: {
71
- "Cronofy-Element": `v${packageDetails.version}, agenda`,
72
- },
73
- })
74
- .then(handleInvalidResponses)
75
- .then(res => res.json())
76
- .catch(catchAndRethrowErrors);
77
- };
78
-
79
- export const parseUserInfoCalendars = response => {
80
- const fullCalendars = response["cronofy.data"].profiles
81
- .map(profile => profile.profile_calendars)
82
- .reduce((acc, curr) => [...acc, ...curr], []);
83
-
84
- const parsedCalendars = fullCalendars.map((cal, i) => ({
85
- name: cal.calendar_name,
86
- id: cal.calendar_id,
87
- color: i,
88
- }));
89
- return parsedCalendars;
90
- };
91
-
92
- export const parseRulesCalendars = response => {
93
- // Filter deleted calendars
94
- const profiles = response["cronofy.data"].profiles.map(profile => {
95
- const profile_calendars = profile.profile_calendars.filter(cal => !cal.calendar_deleted);
96
- return { ...profile, profile_calendars };
97
- });
98
-
99
- // Format and flatten calendars into 1D array
100
- const calendars = profiles
101
- .map(profile =>
102
- profile.profile_calendars.map(cal => ({
103
- name: cal.calendar_name,
104
- id: cal.calendar_id,
105
- profile_name: profile.profile_name,
106
- provider_name: profile.provider_name,
107
- }))
108
- )
109
- .reduce((acc, curr) => [...acc, ...curr], []);
110
-
111
- return {
112
- calendars,
113
- profiles,
114
- };
115
- };
116
-
117
- export const parseEventsArgs = (args, token) => {
118
- const parsedArgs = {
119
- et: token,
120
- from: args.from,
121
- include_geo: true,
122
- include_userinfo: true,
123
- to: args.to,
124
- tzid: args.tzid,
125
- };
126
-
127
- if (args.only_managed) {
128
- parsedArgs.only_managed = true;
129
- } else {
130
- parsedArgs.include_managed = true;
131
- }
132
-
133
- return parsedArgs;
134
- };
135
-
136
- export const parseFreeBusyArgs = (args, token) => {
137
- const parsedArgs = {
138
- et: token,
139
- from: args.from,
140
- include_geo: true,
141
- include_userinfo: true,
142
- to: args.to,
143
- tzid: args.tzid,
144
- };
145
-
146
- // If only_managed is true, then we're request
147
- // managed events in the regular `events` call
148
- // so want to filter them out here.
149
- if (args.only_managed) {
150
- parsedArgs.include_managed = false;
151
- } else {
152
- parsedArgs.include_managed = true;
153
- }
154
-
155
- return parsedArgs;
156
- };
157
-
158
- export const createEventsUrl = (api_domain, data, slug = "events") => {
159
- const url = new URL(`${api_domain}/v1/${slug}`);
160
- Object.keys(data).forEach(key => url.searchParams.append(key, data[key]));
161
- return url.href;
162
- };
163
-
164
- export const getEvents = ({
165
- token,
166
- api_domain,
167
- args,
168
- next = loadNextPage,
169
- freeBusy = false,
170
- mock = false,
171
- }) => {
172
- if (mock) return mocks.eventsWithUserinfo;
173
-
174
- const data = freeBusy ? parseFreeBusyArgs(args, token) : parseEventsArgs(args, token);
175
-
176
- const url = createEventsUrl(api_domain, data, freeBusy ? "free_busy" : "events");
177
-
178
- let events = [];
179
-
180
- return fetch(url, {
181
- method: "GET",
182
- headers: {
183
- "Cronofy-Element": `v${packageDetails.version}, agenda`,
184
- },
185
- })
186
- .then(handleInvalidResponses)
187
- .then(res => res.json())
188
- .then(json => {
189
- const userinfo = json.userinfo;
190
- if (json.events && json.events.length > 0) {
191
- events.push(...json.events);
192
- }
193
- if (json.free_busy && json.free_busy.length > 0) {
194
- const parsedEvents = parseFreeBusyEvents(json.free_busy);
195
- events.push(...parsedEvents);
196
- }
197
- if (json.pages && json.pages.next_page) {
198
- return next(token, json.pages.next_page, events, userinfo);
199
- }
200
- return { events, userinfo };
201
- })
202
- .catch(catchAndRethrowErrors);
203
- };
204
-
205
- export const loadNextPage = (token, pageUrl, eventsArray, userinfo, callback = loadNextPage) => {
206
- const newurl = new URL(pageUrl);
207
- newurl.searchParams.append("et", token);
208
- return fetch(newurl.href, {
209
- method: "GET",
210
- headers: {
211
- "Content-Type": "application/json; charset=utf-8",
212
- "Cronofy-Element": `v${packageDetails.version}, agenda`,
213
- },
214
- })
215
- .then(handleInvalidResponses)
216
- .then(res => res.json())
217
- .then(json => {
218
- if (json.events && json.events.length > 0) {
219
- eventsArray.push(...json.events);
220
- }
221
- if (json.free_busy && json.free_busy.length > 0) {
222
- const parsedEvents = parseFreeBusyEvents(json.free_busy);
223
- eventsArray.push(...parsedEvents);
224
- }
225
- if (json.pages && json.pages.next_page) {
226
- return callback(token, json.pages.next_page, eventsArray, userinfo);
227
- }
228
- return { events: eventsArray, userinfo };
229
- })
230
- .catch(catchAndRethrowErrors);
231
- };
232
-
233
- export const getAvailability = (
234
- token,
235
- api_domain,
236
- params = {},
237
- element = "availability",
238
- tzid = "Etc/UTC",
239
- mock = false
240
- ) => {
241
- if (
242
- (mock && params.response_format === "slots") ||
243
- (mock && typeof params.start_interval === "undefined")
244
- ) {
245
- return mocks.availabilitySlots;
246
- }
247
- if (mock && params.response_format === "overlapping_slots") {
248
- return mocks.availabilityOverlappingSlots(
249
- params.start_interval.minutes,
250
- params.required_duration.minutes,
251
- params.query_periods,
252
- tzid
253
- );
254
- }
255
- if (mock) return mocks.availability;
256
-
257
- return fetch(`${api_domain}/v1/availability?et=${token}`, {
258
- method: "POST",
259
- headers: {
260
- "Cronofy-Element": `v${packageDetails.version}, ${element}`,
261
- "Content-Type": "application/json; charset=utf-8",
262
- },
263
- body: JSON.stringify(params),
264
- })
265
- .then(handleInvalidResponses)
266
- .then(res => res.json())
267
- .then(handle422Responses)
268
- .catch(catchAndRethrowErrors);
269
- };
270
-
271
- export const getSequencedAvailability = (
272
- token,
273
- api_domain,
274
- params = {},
275
- element = "sequenced-availability",
276
- tzid = "Etc/UTC",
277
- mock = false
278
- ) => {
279
- if (mock) return mocks.sequencedAvailabilitySlots;
280
-
281
- return fetch(`${api_domain}/v1/sequenced_availability?et=${token}`, {
282
- method: "POST",
283
- headers: {
284
- "Cronofy-Element": `v${packageDetails.version}, ${element}`,
285
- "Content-Type": "application/json; charset=utf-8",
286
- },
287
- body: JSON.stringify(params),
288
- })
289
- .then(handleInvalidResponses)
290
- .then(res => res.json())
291
- .then(handle422Responses)
292
- .catch(catchAndRethrowErrors);
293
- };
294
-
295
- export const getAvailabilityRules = ({
296
- token,
297
- api_domain,
298
- availability_rule_id = false,
299
- element = "rules",
300
- mock = false,
301
- tzid = false,
302
- }) => {
303
- if (mock) return mocks.availability_rules(tzid);
304
-
305
- const url = new URL(`${api_domain}/v1/availability_rules/${availability_rule_id}`);
306
- url.searchParams.append("et", token);
307
-
308
- return fetch(url.href, {
309
- method: "GET",
310
- headers: {
311
- "Cronofy-Element": `v${packageDetails.version}, ${element}`,
312
- },
313
- })
314
- .then(handleInvalidRulesResponse)
315
- .then(res => {
316
- if (res.status === 404) {
317
- return { type: 404 };
318
- }
319
- return res.json();
320
- })
321
- .catch(catchAndRethrowErrors);
322
- };
323
-
324
- export const setAvailabilityRules = ({
325
- token,
326
- api_domain,
327
- params = {},
328
- element = "rules",
329
- mock = false,
330
- tzid = false,
331
- }) => {
332
- if (mock) return mocks.availability_rules(tzid);
333
-
334
- return fetch(`${api_domain}/v1/availability_rules?et=${token}`, {
335
- method: "POST",
336
- headers: {
337
- "Cronofy-Element": `v${packageDetails.version}, ${element}`,
338
- "Content-Type": "application/json; charset=utf-8",
339
- },
340
- body: JSON.stringify(params),
341
- })
342
- .then(handleInvalidResponses)
343
- .then(res => res.json())
344
- .catch(catchAndRethrowErrors);
345
- };
346
-
347
- export const revokeProfile = (
348
- token,
349
- api_domain,
350
- profile_id,
351
- element = "calendar-sync",
352
- mock = false
353
- ) => {
354
- if (mock) return mocks.revokeProfile();
355
-
356
- return fetch(`${api_domain}/v1/profiles/${profile_id}/revoke?et=${token}`, {
357
- method: "POST",
358
- headers: {
359
- "Cronofy-Element": `v${packageDetails.version}, ${element}`,
360
- "Content-Type": "application/json; charset=utf-8",
361
- },
362
- })
363
- .then(handleInvalidResponses)
364
- .catch(catchAndRethrowErrors);
365
- };
366
-
367
- export const getCalendars = (token, apiDomain, demo) =>
368
- getUserInfo(token, apiDomain, demo)
369
- .then(res => parseRulesCalendars(res))
370
- .catch(catchAndRethrowErrors);
@@ -1,166 +0,0 @@
1
- import moment from "moment-timezone";
2
- import merge from "deepmerge";
3
- import { uniqueItems } from "./utils";
4
-
5
- export const isAllDayEvent = (start, end) => checkISO8601(start) && checkISO8601(end);
6
-
7
- export const checkISO8601 = string => /^\d{4}-\d{2}-\d{2}$/.test(string);
8
-
9
- export const dayNumbersString = (startObj, endObj, currentDay) => {
10
- const days = dayNumbers(startObj, endObj, currentDay);
11
- const multi = days.days > 1 ? ` - ${days.day}/${days.days}` : ``;
12
- return multi;
13
- };
14
-
15
- export const dayNumbers = (startObj, endObj, currentDay) => {
16
- const days = endObj.diff(startObj, "days");
17
- const dayDiff = endObj.diff(moment(currentDay), "days");
18
- const day = days - dayDiff + 1;
19
- return { days, day };
20
- };
21
-
22
- export const getMultiDayStatus = (start, end, current) => {
23
- const allDay = isAllDayEvent(start, end);
24
- if (!allDay) return 0;
25
- const days = dayNumbers(moment(start), moment(end), current);
26
- if (days.days <= 1) return 0;
27
- if (days.day === 1) return 1;
28
- if (days.day === days.days) return 2;
29
- return 3;
30
- };
31
-
32
- export const checkDirection = (target, current) => {
33
- const dayDiff = target.diff(current, "days");
34
- const result = dayDiff > 0 ? "forwards" : "backwards";
35
- return result;
36
- };
37
-
38
- // Add the uid for an event to every day that the event covers
39
- export const eventDates = event => {
40
- const first = moment(event.start);
41
- const last = moment(event.end);
42
- const dayCount = last.diff(first, "days");
43
- const dates = {};
44
- dates[first.format(`YYYY-MM-DD`)] = {
45
- [event.event_uid]: true,
46
- };
47
- for (let i = 1; i < dayCount; i++) {
48
- let current = first;
49
- current.add(1, "days");
50
- dates[current.format(`YYYY-MM-DD`)] = {
51
- [event.event_uid]: true,
52
- };
53
- }
54
- return dates;
55
- };
56
-
57
- // Add a date object for each date in the selected range (targetDate +- offset)
58
- export const getDayRange = (targetDate, offset, existingDays = {}) => {
59
- const days = existingDays;
60
- for (let i = 0 - offset; i <= offset; i++) {
61
- const day = moment(targetDate).add(i, "days").format(`YYYY-MM-DD`);
62
- days[day] = {};
63
- }
64
- return days;
65
- };
66
-
67
- export const setEventDayIDs = (events, daysObject, eventDatesFunc = eventDates) => {
68
- let output = daysObject;
69
- events.map(event => {
70
- const days = { ...output };
71
- const thisEventDays = eventDatesFunc(event);
72
- output = merge(days, thisEventDays);
73
- });
74
- return output;
75
- };
76
-
77
- export const parseEventsByID = (events, existingEvents = {}) => {
78
- const eventsOutput = existingEvents;
79
- // for each event, add the event to the output, using its uid as a key
80
- events.map(event => {
81
- eventsOutput[event.event_uid] = event;
82
- });
83
- return eventsOutput;
84
- };
85
-
86
- // calculateLimit returns:
87
- // 0 = not at limit
88
- // -1 = at backward limit
89
- // 1 = at forward limit
90
- export const calculateLimit = (current, anchor) => {
91
- const today = moment(anchor);
92
- const target = moment(current);
93
- const limits = [-14, 90]; // 2 weeks behind | 3 months ahead
94
- const diff = target.diff(today, "days");
95
- let limit = 0;
96
- if (diff > limits[1]) limit = 1;
97
- if (diff < limits[0]) limit = -1;
98
- return limit;
99
- };
100
-
101
- export const sortEventsByType = events => {
102
- const allDayEvents = events.filter(event => isAllDayEvent(event.start, event.end));
103
- const timedEvents = events
104
- .filter(event => !isAllDayEvent(event.start, event.end))
105
- .sort((a, b) => {
106
- if (moment(a.start) < moment(b.start)) {
107
- return -1;
108
- }
109
- if (moment(a.start) > moment(b.start)) {
110
- return 1;
111
- }
112
- return 0;
113
- });
114
- return { allDay: allDayEvents, timed: timedEvents };
115
- };
116
-
117
- export const getEventByID = (id, events) => events.find(event => event.event_uid === id);
118
-
119
- export const getCalColor = (id, cals) =>
120
- cals.filter(cal => cal.id == id).reduce((acc, curr) => curr.color, 0);
121
-
122
- export const parseDirection = directionInput => {
123
- let direction;
124
- switch (directionInput) {
125
- case "backwards":
126
- case "backward":
127
- case "back":
128
- direction = "backwards";
129
- break;
130
- case "upwards":
131
- case "upward":
132
- case "up":
133
- direction = "upwards";
134
- break;
135
- case "downwards":
136
- case "downward":
137
- case "down":
138
- direction = "downwards";
139
- break;
140
- default:
141
- direction = "forwards";
142
- break;
143
- }
144
- return direction;
145
- };
146
-
147
- export const getCalendarsFromEvents = events => {
148
- const allCalendarIDs = events.map(event => event.calendar_id);
149
- const uniqueIDs = uniqueItems(allCalendarIDs);
150
- const calendars = uniqueIDs.map((ID, index) => ({ id: ID, color: index }));
151
- return calendars;
152
- };
153
-
154
- // Check crucial event properties to make sure they exist (and apply fallback if needed)
155
- export const parseEvents = events =>
156
- events.map(event => ({
157
- ...event,
158
- summary: event.summary || "–",
159
- }));
160
-
161
- export const parseFreeBusyEvents = events =>
162
- events.map(event => ({
163
- ...event,
164
- summary: event.summary || event.free_busy_status,
165
- event_uid: event.event_uid || `${event.free_busy_status}_${event.start}`,
166
- }));
@@ -1,4 +0,0 @@
1
- export const compose = (...functions) => data =>
2
- functions.reduceRight((value, func) => func(value), data);
3
-
4
- export const pipe = (...functions) => data => functions.reduce((value, func) => func(value), data);
@@ -1,107 +0,0 @@
1
- // import React from "react";
2
- import ReactDOM from "react-dom";
3
-
4
- import Error from "../components/generic/Error";
5
- import { logConstructor } from "./logging";
6
- import { deepCopy } from "./utils";
7
-
8
- const renderError = targetId => {
9
- const target = document.getElementById(targetId);
10
- if (!target) return false;
11
-
12
- ReactDOM.render(
13
- <div className="error__wrapper" style={{ position: "relative", minHeight: "200px" }}>
14
- <Error
15
- message={
16
- "There was a problem with the UI Elements configuration settings. See the developer console for more detail."
17
- }
18
- theme={{ colors: { black: "#4D4D4D" } }}
19
- />
20
- </div>,
21
- target
22
- );
23
- };
24
-
25
- /**
26
- * This is a wrapper to handle re-rendering logic when `options` are
27
- * changed.
28
- */
29
- export const generateElementAPI = (Renderer, options, optionsFormatter, elementName) => {
30
- let config = typeof options.config === "undefined" ? {} : options.config;
31
- const logs = typeof config.logs === "undefined" ? "warn" : config.logs;
32
- const log = logConstructor(logs, elementName);
33
-
34
- let currentOptions = deepCopy(options);
35
- currentOptions.callback = options.callback;
36
- const renderElement = (key, options, target) => {
37
- ReactDOM.render(Renderer(key, options), target);
38
- };
39
-
40
- // We need to change the key every time we reload the Element (to trigger)
41
- let key = 1;
42
-
43
- const parsedOptions = optionsFormatter(options);
44
- if (!parsedOptions) {
45
- renderError(options.target_id);
46
- return false;
47
- }
48
- const target = document.getElementById(parsedOptions.target);
49
-
50
- if (!target) {
51
- log.error(`${parsedOptions.target} is not a valid DOM element`);
52
- return false;
53
- }
54
-
55
- const context = () => {
56
- return { tzid: parsedOptions.tzid };
57
- };
58
-
59
- renderElement(key, parsedOptions, target);
60
-
61
- const reload = newRawOptions => {
62
- // Increment the key - this will ensure the React
63
- // component re-renders when the `options` change.
64
- key++;
65
- // Check our options for error/omissions
66
- currentOptions = deepCopy(newRawOptions);
67
- currentOptions.callback = newRawOptions.callback;
68
- const newOptions = optionsFormatter(newRawOptions);
69
- newOptions.callback = currentOptions.callback;
70
- // Start the re-render
71
- renderElement(key, newOptions, target);
72
- };
73
-
74
- return {
75
- context: context(),
76
- refresh: () => reload(currentOptions),
77
- update: newOptions => {
78
- if (typeof newOptions === "undefined") {
79
- log.warn(`The update() method expects to recieve an options object`);
80
- return;
81
- }
82
- let updatedOptions = {
83
- ...currentOptions,
84
- ...newOptions,
85
- };
86
- if (newOptions.config) {
87
- updatedOptions.config = {
88
- ...currentOptions.config,
89
- ...newOptions.config,
90
- };
91
- }
92
- if (newOptions.availability_query) {
93
- updatedOptions.availability_query = {
94
- ...currentOptions.availability_query,
95
- ...newOptions.availability_query,
96
- };
97
- }
98
- if (newOptions.styles) {
99
- updatedOptions.styles = {
100
- ...currentOptions.styles,
101
- ...newOptions.styles,
102
- };
103
- }
104
- return reload(updatedOptions);
105
- },
106
- };
107
- };