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.
- package/dist/.gitkeep +0 -0
- package/dist/CronofyElements.js +2 -0
- package/{build/CronofyElements.v1.48.2.js.LICENSE.txt → dist/CronofyElements.js.LICENSE.txt} +0 -0
- package/package.json +10 -7
- package/.babelrc +0 -20
- package/.eslintrc.yaml +0 -43
- package/.prettierignore +0 -4
- package/.prettierrc +0 -7
- package/Makefile +0 -92
- package/brainstorm.md +0 -76
- package/build/CronofyElements.v1.48.2.js +0 -2
- package/build/npm/CronofyElements.js +0 -2
- package/compat.config.js +0 -25
- package/demo/agenda.ejs +0 -71
- package/demo/availability-viewer.ejs +0 -322
- package/demo/calendar-sync.ejs +0 -149
- package/demo/crossbrowser.ejs +0 -228
- package/demo/date-time-picker.ejs +0 -213
- package/demo/demo-styles.css +0 -134
- package/demo/index.ejs +0 -249
- package/demo/integration.ejs +0 -482
- package/demo/load-elements.ejs +0 -12
- package/demo/nav.ejs +0 -14
- package/demo/rules.ejs +0 -121
- package/demo/server.js +0 -425
- package/demo/slot-picker.ejs +0 -197
- package/git.README.md +0 -71
- package/notes.style.md +0 -197
- package/postcss.config.js +0 -3
- package/script/i18n-export +0 -11
- package/script/i18n-helpers/split_write.rb +0 -25
- package/script/i18n-import +0 -22
- package/script/i18n-reference-update +0 -241
- package/src/js/components/Agenda/Agenda.js +0 -243
- package/src/js/components/Agenda/AllDayEventsList.js +0 -37
- package/src/js/components/Agenda/Calendar.js +0 -100
- package/src/js/components/Agenda/CalendarHeader.js +0 -187
- package/src/js/components/Agenda/Event.js +0 -34
- package/src/js/components/Agenda/EventAllDay.js +0 -76
- package/src/js/components/Agenda/EventAttendees.js +0 -30
- package/src/js/components/Agenda/EventDetail.js +0 -111
- package/src/js/components/Agenda/EventMessages.js +0 -24
- package/src/js/components/Agenda/EventMeta.js +0 -48
- package/src/js/components/Agenda/EventTime.js +0 -34
- package/src/js/components/Agenda/EventWrapper.js +0 -271
- package/src/js/components/Agenda/Location.js +0 -29
- package/src/js/components/Agenda/Message.js +0 -22
- package/src/js/components/Agenda/TimedEventsList.js +0 -29
- package/src/js/components/AvailabilityRules/AddButton.js +0 -60
- package/src/js/components/AvailabilityRules/AvailabilityRules.js +0 -45
- package/src/js/components/AvailabilityRules/Calendar.js +0 -31
- package/src/js/components/AvailabilityRules/CalendarListItem.js +0 -53
- package/src/js/components/AvailabilityRules/CalendarProfiles.js +0 -67
- package/src/js/components/AvailabilityRules/CalendarSelector.js +0 -104
- package/src/js/components/AvailabilityRules/Calendars.js +0 -145
- package/src/js/components/AvailabilityRules/Checkmark.js +0 -51
- package/src/js/components/AvailabilityRules/DayLabels.js +0 -91
- package/src/js/components/AvailabilityRules/Footer.js +0 -109
- package/src/js/components/AvailabilityRules/Legend.js +0 -57
- package/src/js/components/AvailabilityRules/Loading.js +0 -53
- package/src/js/components/AvailabilityRules/RemoveButton.js +0 -57
- package/src/js/components/AvailabilityRules/Slot.js +0 -195
- package/src/js/components/AvailabilityRules/SlotDisplay.js +0 -27
- package/src/js/components/AvailabilityRules/Slots.js +0 -81
- package/src/js/components/AvailabilityRules/SlotsDisplay.js +0 -68
- package/src/js/components/AvailabilityRules/TimeExpander.js +0 -119
- package/src/js/components/AvailabilityRules/TimeLabels.js +0 -89
- package/src/js/components/AvailabilityRules/TimeZoneDisplay.js +0 -41
- package/src/js/components/AvailabilityRules/ToggleIcon.js +0 -41
- package/src/js/components/AvailabilityRules/Tooltip.js +0 -63
- package/src/js/components/AvailabilityRules/UnknownCalendar.js +0 -33
- package/src/js/components/AvailabilityRules/Week.js +0 -115
- package/src/js/components/AvailabilityRules/WeekGrid.js +0 -80
- package/src/js/components/AvailabilityRules/Wrapper.js +0 -423
- package/src/js/components/AvailabilityRules/contexts/drag-context.js +0 -15
- package/src/js/components/AvailabilityRules/scss/_base.buttons.scss +0 -58
- package/src/js/components/AvailabilityRules/scss/_base.theme.scss +0 -4
- package/src/js/components/AvailabilityRules/scss/_components.timezoneselector.scss +0 -74
- package/src/js/components/AvailabilityRules/scss/_generic.reset.scss +0 -13
- package/src/js/components/AvailabilityRules/scss/_settings.colours.scss +0 -12
- package/src/js/components/AvailabilityRules/scss/availabilityrules.scss +0 -5
- package/src/js/components/AvailabilityRules/utils/tz-utils.js +0 -61
- package/src/js/components/AvailabilityViewer/AvailabilityViewer.js +0 -524
- package/src/js/components/AvailabilityViewer/ColumnHeader.js +0 -35
- package/src/js/components/AvailabilityViewer/DayColumn.js +0 -36
- package/src/js/components/AvailabilityViewer/DayColumnDisplay.js +0 -33
- package/src/js/components/AvailabilityViewer/DayColumnWrapper.js +0 -29
- package/src/js/components/AvailabilityViewer/DayLabels.js +0 -41
- package/src/js/components/AvailabilityViewer/EmptyColumn.js +0 -29
- package/src/js/components/AvailabilityViewer/Footer.js +0 -36
- package/src/js/components/AvailabilityViewer/GridFreeSelect.js +0 -33
- package/src/js/components/AvailabilityViewer/HoverSlot.js +0 -35
- package/src/js/components/AvailabilityViewer/HoverTooltip.js +0 -34
- package/src/js/components/AvailabilityViewer/LabelColumn.js +0 -53
- package/src/js/components/AvailabilityViewer/LabelItem.js +0 -73
- package/src/js/components/AvailabilityViewer/Legend.js +0 -79
- package/src/js/components/AvailabilityViewer/Loading.js +0 -57
- package/src/js/components/AvailabilityViewer/MonthLabels.js +0 -43
- package/src/js/components/AvailabilityViewer/Navigation.js +0 -138
- package/src/js/components/AvailabilityViewer/Overlay.js +0 -60
- package/src/js/components/AvailabilityViewer/Preloading.js +0 -66
- package/src/js/components/AvailabilityViewer/SelectedSlot.js +0 -106
- package/src/js/components/AvailabilityViewer/SelectedSlots.js +0 -72
- package/src/js/components/AvailabilityViewer/SelectionMask.js +0 -44
- package/src/js/components/AvailabilityViewer/Slot.js +0 -237
- package/src/js/components/AvailabilityViewer/SlotFreeSelect.js +0 -115
- package/src/js/components/AvailabilityViewer/Slots.js +0 -57
- package/src/js/components/AvailabilityViewer/TimeExpander.js +0 -93
- package/src/js/components/AvailabilityViewer/TimeLines.js +0 -74
- package/src/js/components/AvailabilityViewer/TimeSelector.js +0 -243
- package/src/js/components/AvailabilityViewer/TimeSelectorTrigger.js +0 -42
- package/src/js/components/AvailabilityViewer/TimeZoneDisplay.js +0 -28
- package/src/js/components/AvailabilityViewer/ToggleIcon.js +0 -41
- package/src/js/components/AvailabilityViewer/Tooltip.js +0 -65
- package/src/js/components/AvailabilityViewer/Week.js +0 -255
- package/src/js/components/AvailabilityViewer/WeekWrapper.js +0 -132
- package/src/js/components/AvailabilityViewer/contexts/page-context.js +0 -17
- package/src/js/components/AvailabilityViewer/contexts/page-reducer.js +0 -28
- package/src/js/components/AvailabilityViewer/contexts/selection-context.js +0 -25
- package/src/js/components/AvailabilityViewer/contexts/selection-reducer.js +0 -18
- package/src/js/components/CalendarSync/Active.js +0 -57
- package/src/js/components/CalendarSync/AddToggle.js +0 -72
- package/src/js/components/CalendarSync/CalendarSync.js +0 -215
- package/src/js/components/CalendarSync/EditToggle.js +0 -71
- package/src/js/components/CalendarSync/Footer.js +0 -31
- package/src/js/components/CalendarSync/Inactive.js +0 -66
- package/src/js/components/CalendarSync/Loading.js +0 -52
- package/src/js/components/CalendarSync/Pending.js +0 -74
- package/src/js/components/CalendarSync/ProfileStatus.js +0 -33
- package/src/js/components/CalendarSync/Profiles.js +0 -109
- package/src/js/components/CalendarSync/ProviderLogo.js +0 -28
- package/src/js/components/CalendarSync/Providers.js +0 -80
- package/src/js/components/CalendarSync/RemoveLink.js +0 -96
- package/src/js/components/CalendarSync/SelectProvider.js +0 -25
- package/src/js/components/CalendarSync/contexts/status-reducer.js +0 -74
- package/src/js/components/DateTimePicker/Calendar.js +0 -127
- package/src/js/components/DateTimePicker/CalendarHeader.js +0 -80
- package/src/js/components/DateTimePicker/Confirm.js +0 -106
- package/src/js/components/DateTimePicker/DateTimePicker.js +0 -131
- package/src/js/components/DateTimePicker/DayButton.js +0 -38
- package/src/js/components/DateTimePicker/DayHeadings.js +0 -33
- package/src/js/components/DateTimePicker/Details.js +0 -33
- package/src/js/components/DateTimePicker/Error.js +0 -39
- package/src/js/components/DateTimePicker/Loading.js +0 -20
- package/src/js/components/DateTimePicker/LoadingCalendar.js +0 -21
- package/src/js/components/DateTimePicker/NoSlotsFound.js +0 -16
- package/src/js/components/DateTimePicker/SequencedSlotButton.js +0 -97
- package/src/js/components/DateTimePicker/SlotButton.js +0 -55
- package/src/js/components/DateTimePicker/SlotsList.js +0 -45
- package/src/js/components/DateTimePicker/Wrapper.js +0 -281
- package/src/js/components/DateTimePicker/contexts/status-context.js +0 -19
- package/src/js/components/DateTimePicker/contexts/status-reducer.js +0 -276
- package/src/js/components/DateTimePicker/contexts/theme-context.js +0 -33
- package/src/js/components/DateTimePicker/helpers/theming.js +0 -49
- package/src/js/components/DateTimePicker/scss/_base.buttons.scss +0 -58
- package/src/js/components/DateTimePicker/scss/_base.layout.scss +0 -28
- package/src/js/components/DateTimePicker/scss/_base.theme.scss +0 -17
- package/src/js/components/DateTimePicker/scss/_components.calendargrid.scss +0 -78
- package/src/js/components/DateTimePicker/scss/_components.calendarheader.scss +0 -71
- package/src/js/components/DateTimePicker/scss/_components.confirm.scss +0 -40
- package/src/js/components/DateTimePicker/scss/_components.details.scss +0 -20
- package/src/js/components/DateTimePicker/scss/_components.error.scss +0 -34
- package/src/js/components/DateTimePicker/scss/_components.loading.scss +0 -36
- package/src/js/components/DateTimePicker/scss/_components.slotslist.scss +0 -43
- package/src/js/components/DateTimePicker/scss/_components.timezoneselector.scss +0 -73
- package/src/js/components/DateTimePicker/scss/_generic.reset.scss +0 -18
- package/src/js/components/DateTimePicker/scss/_settings.colours.scss +0 -17
- package/src/js/components/DateTimePicker/scss/datetimepicker.scss +0 -5
- package/src/js/components/DateTimePicker/utils/calendar-keyboard.js +0 -109
- package/src/js/components/DateTimePicker/utils/calendar.js +0 -125
- package/src/js/components/DateTimePicker/utils/slots.js +0 -288
- package/src/js/components/SlotPicker/Confirm.js +0 -160
- package/src/js/components/SlotPicker/Days.js +0 -58
- package/src/js/components/SlotPicker/Slot.js +0 -72
- package/src/js/components/SlotPicker/SlotPicker.js +0 -292
- package/src/js/components/SlotPicker/Slots.js +0 -66
- package/src/js/components/SlotPicker/TimeSlots.js +0 -91
- package/src/js/components/generic/Button.js +0 -26
- package/src/js/components/generic/Container.js +0 -33
- package/src/js/components/generic/Error.js +0 -77
- package/src/js/components/generic/Loading.js +0 -51
- package/src/js/components/generic/LoadingSpinner.js +0 -30
- package/src/js/components/generic/ShadowScrollbars.js +0 -70
- package/src/js/components/generic/TimeZoneSelector.js +0 -158
- package/src/js/components/generic/TransitionSlide.js +0 -72
- package/src/js/contexts/i18n-context.js +0 -25
- package/src/js/contexts/log-context.js +0 -18
- package/src/js/contexts/tz-context.js +0 -18
- package/src/js/env.example.js +0 -8
- package/src/js/helpers/colors.js +0 -33
- package/src/js/helpers/comparators.AvailabilityViewer.js +0 -27
- package/src/js/helpers/connections.js +0 -370
- package/src/js/helpers/events.js +0 -166
- package/src/js/helpers/functional.js +0 -4
- package/src/js/helpers/generator.js +0 -107
- package/src/js/helpers/i18n.js +0 -153
- package/src/js/helpers/init.Agenda.js +0 -55
- package/src/js/helpers/init.AvailabilityRules.js +0 -195
- package/src/js/helpers/init.AvailabilityViewer.js +0 -215
- package/src/js/helpers/init.CalendarSync.js +0 -83
- package/src/js/helpers/init.DateTimePicker.js +0 -219
- package/src/js/helpers/init.SlotPicker.js +0 -89
- package/src/js/helpers/init.js +0 -308
- package/src/js/helpers/logging.js +0 -78
- package/src/js/helpers/mocks.js +0 -871
- package/src/js/helpers/slots.js +0 -340
- package/src/js/helpers/slots.rules.js +0 -220
- package/src/js/helpers/theming.js +0 -93
- package/src/js/helpers/translations.js +0 -42
- package/src/js/helpers/tz-list.js +0 -136
- package/src/js/helpers/utils.AvailabilityRules.js +0 -110
- package/src/js/helpers/utils.AvailabilityViewer.js +0 -789
- package/src/js/helpers/utils.CalendarSync.js +0 -199
- package/src/js/helpers/utils.js +0 -76
- package/src/js/hooks/useWindowSize.js +0 -20
- package/src/js/main.js +0 -133
- package/src/js/next.js +0 -37
- package/src/js/styles/_settings.utils.scss +0 -82
- package/src/js/styles/colors.js +0 -13
- package/src/js/styles/global.js +0 -49
- package/src/js/styles/utils.js +0 -81
- package/src/js/translations/de/agenda.json +0 -12
- package/src/js/translations/de/availability_rules.json +0 -18
- package/src/js/translations/de/availability_viewer.json +0 -14
- package/src/js/translations/de/calendar_sync.json +0 -14
- package/src/js/translations/de/core.json +0 -15
- package/src/js/translations/de/date_time_picker.json +0 -14
- package/src/js/translations/de/slot_picker.json +0 -9
- package/src/js/translations/de/time_zones.json +0 -135
- package/src/js/translations/en/agenda.json +0 -12
- package/src/js/translations/en/availability_rules.json +0 -18
- package/src/js/translations/en/availability_viewer.json +0 -14
- package/src/js/translations/en/calendar_sync.json +0 -14
- package/src/js/translations/en/core.json +0 -23
- package/src/js/translations/en/date_time_picker.json +0 -15
- package/src/js/translations/en/slot_picker.json +0 -9
- package/src/js/translations/en/time_zones.json +0 -17
- package/src/js/translations/es/agenda.json +0 -12
- package/src/js/translations/es/availability_rules.json +0 -18
- package/src/js/translations/es/availability_viewer.json +0 -14
- package/src/js/translations/es/calendar_sync.json +0 -14
- package/src/js/translations/es/core.json +0 -15
- package/src/js/translations/es/date_time_picker.json +0 -14
- package/src/js/translations/es/slot_picker.json +0 -9
- package/src/js/translations/es/time_zones.json +0 -203
- package/src/js/translations/fr/agenda.json +0 -12
- package/src/js/translations/fr/availability_rules.json +0 -18
- package/src/js/translations/fr/availability_viewer.json +0 -14
- package/src/js/translations/fr/calendar_sync.json +0 -14
- package/src/js/translations/fr/core.json +0 -15
- package/src/js/translations/fr/date_time_picker.json +0 -14
- package/src/js/translations/fr/slot_picker.json +0 -9
- package/src/js/translations/fr/time_zones.json +0 -161
- package/src/js/translations/fr-CA/agenda.json +0 -12
- package/src/js/translations/fr-CA/availability_rules.json +0 -18
- package/src/js/translations/fr-CA/availability_viewer.json +0 -14
- package/src/js/translations/fr-CA/calendar_sync.json +0 -14
- package/src/js/translations/fr-CA/core.json +0 -23
- package/src/js/translations/fr-CA/date_time_picker.json +0 -14
- package/src/js/translations/fr-CA/slot_picker.json +0 -9
- package/src/js/translations/fr-CA/time_zones.json +0 -163
- package/src/js/translations/it/agenda.json +0 -12
- package/src/js/translations/it/availability_rules.json +0 -18
- package/src/js/translations/it/availability_viewer.json +0 -14
- package/src/js/translations/it/calendar_sync.json +0 -14
- package/src/js/translations/it/core.json +0 -15
- package/src/js/translations/it/date_time_picker.json +0 -14
- package/src/js/translations/it/slot_picker.json +0 -9
- package/src/js/translations/it/time_zones.json +0 -126
- package/src/js/translations/ja/agenda.json +0 -12
- package/src/js/translations/ja/availability_rules.json +0 -18
- package/src/js/translations/ja/availability_viewer.json +0 -14
- package/src/js/translations/ja/calendar_sync.json +0 -14
- package/src/js/translations/ja/core.json +0 -15
- package/src/js/translations/ja/date_formats.json +0 -5
- package/src/js/translations/ja/date_time_picker.json +0 -14
- package/src/js/translations/ja/slot_picker.json +0 -9
- package/src/js/translations/ja/time_zones.json +0 -435
- package/src/js/translations/nl/agenda.json +0 -12
- package/src/js/translations/nl/availability_rules.json +0 -18
- package/src/js/translations/nl/availability_viewer.json +0 -14
- package/src/js/translations/nl/calendar_sync.json +0 -14
- package/src/js/translations/nl/core.json +0 -15
- package/src/js/translations/nl/date_time_picker.json +0 -14
- package/src/js/translations/nl/slot_picker.json +0 -9
- package/src/js/translations/nl/time_zones.json +0 -118
- package/src/js/translations/ru/agenda.json +0 -12
- package/src/js/translations/ru/availability_rules.json +0 -18
- package/src/js/translations/ru/availability_viewer.json +0 -14
- package/src/js/translations/ru/calendar_sync.json +0 -14
- package/src/js/translations/ru/core.json +0 -15
- package/src/js/translations/ru/date_time_picker.json +0 -14
- package/src/js/translations/ru/slot_picker.json +0 -9
- package/src/js/translations/ru/time_zones.json +0 -435
- package/src/js/translations/sv/agenda.json +0 -12
- package/src/js/translations/sv/availability_rules.json +0 -18
- package/src/js/translations/sv/availability_viewer.json +0 -14
- package/src/js/translations/sv/calendar_sync.json +0 -14
- package/src/js/translations/sv/core.json +0 -15
- package/src/js/translations/sv/date_time_picker.json +0 -14
- package/src/js/translations/sv/slot_picker.json +0 -9
- package/src/js/translations/sv/time_zones.json +0 -136
- package/tests/AvailabilityRules/AvailabilityRules.test.js +0 -39
- package/tests/AvailabilityRules/__snapshots__/AvailabilityRules.test.js.snap +0 -1045
- package/tests/AvailabilityViewer/Navigation.test.js +0 -130
- package/tests/AvailabilityViewer/contexts/page-reducer.test.js +0 -87
- package/tests/AvailabilityViewer/reducer.test.js +0 -73
- package/tests/CalendarSync/Active.test.js +0 -25
- package/tests/CalendarSync/AddToggle.test.js +0 -57
- package/tests/CalendarSync/EditToggle.test.js +0 -57
- package/tests/CalendarSync/Inactive.test.js +0 -26
- package/tests/CalendarSync/Pending.test.js +0 -25
- package/tests/CalendarSync/ProviderLogo.test.js +0 -95
- package/tests/CalendarSync/__snapshots__/Active.test.js.snap +0 -61
- package/tests/CalendarSync/__snapshots__/Inactive.test.js.snap +0 -78
- package/tests/CalendarSync/__snapshots__/Pending.test.js.snap +0 -90
- package/tests/CalendarSync/__snapshots__/ProviderLogo.test.js.snap +0 -267
- package/tests/CalendarSync/init.CalendarSync.test.js +0 -302
- package/tests/CalendarSync/mocks/theme.js +0 -14
- package/tests/CalendarSync/status-reducer.test.js +0 -435
- package/tests/DateTimePicker/SequencedSlotButton.test.js +0 -157
- package/tests/DateTimePicker/SlotButton.test.js +0 -118
- package/tests/DateTimePicker/contexts/status-reducer.test.js +0 -1036
- package/tests/DateTimePicker/dummy-data.js +0 -883
- package/tests/DateTimePicker/utils.test.js +0 -515
- package/tests/colors.test.js +0 -70
- package/tests/components/TimezoneSelector.test.js +0 -124
- package/tests/components/main.test.js +0 -203
- package/tests/components/rtl-utils.js +0 -32
- package/tests/connections.test.js +0 -684
- package/tests/events.test.js +0 -472
- package/tests/generator.test.js +0 -74
- package/tests/i18n.test.js +0 -255
- package/tests/init.Agenda.test.js +0 -122
- package/tests/init.AvailabilityRules.test.js +0 -279
- package/tests/init.AvailabilityViewer.test.js +0 -740
- package/tests/init.SlotPicker.test.js +0 -166
- package/tests/init.test.js +0 -231
- package/tests/logging.test.js +0 -235
- package/tests/mocks/i18n.js +0 -3
- package/tests/mocks/theme.js +0 -3
- package/tests/setupJest.js +0 -8
- package/tests/slots.rules.test.js +0 -195
- package/tests/slots.test.js +0 -278
- package/tests/utils.AvailabilityRules.test.js +0 -221
- package/tests/utils.AvailabilityViewer.test.js +0 -1800
- package/tests/utils.CalendarSync.test.js +0 -277
- package/tests/utils.test.js +0 -119
- package/webpack.config.js +0 -114
package/demo/server.js
DELETED
|
@@ -1,425 +0,0 @@
|
|
|
1
|
-
require("@babel/polyfill");
|
|
2
|
-
const fetch = require("node-fetch");
|
|
3
|
-
const express = require("express");
|
|
4
|
-
const app = express();
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const moment = require("moment");
|
|
7
|
-
|
|
8
|
-
const url = require("url");
|
|
9
|
-
const querystring = require("querystring");
|
|
10
|
-
|
|
11
|
-
const env = require("../src/js/env");
|
|
12
|
-
let apiDomain = env.API_DOMAIN || "https://api.cronofy.com";
|
|
13
|
-
let rawApiDomain = apiDomain;
|
|
14
|
-
const appDomain = env.APP_DOMAIN || "https://app.cronofy.com";
|
|
15
|
-
|
|
16
|
-
if (env.API_DOMAIN) {
|
|
17
|
-
// The the "domain" starts with a protocol, we can assume it is
|
|
18
|
-
// a full path. Otherwise assume it is a pure domain, so add our
|
|
19
|
-
// protocol (everyone should be using HTTPS)
|
|
20
|
-
apiDomain = env.API_DOMAIN.startsWith("http")
|
|
21
|
-
? env.API_DOMAIN
|
|
22
|
-
: `https://${env.API_DOMAIN}`;
|
|
23
|
-
rawApiDomain = env.API_DOMAIN;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
console.log("Firing up server...");
|
|
27
|
-
|
|
28
|
-
const getData = async (url, options) =>
|
|
29
|
-
await fetch(url, options)
|
|
30
|
-
.then(async res => await res.json())
|
|
31
|
-
.catch(err => {
|
|
32
|
-
console.log(err);
|
|
33
|
-
console.error(
|
|
34
|
-
"\x1b[31m",
|
|
35
|
-
"\n┌───────────────────────────────────────────────────┐\n│ ERROR: │\n│ There was a problem generating the element token. │\n│ Check that your CLIENT_ID, CLIENT_SECRET, and SUB │\n│ environment variables are correct. │\n└───────────────────────────────────────────────────┘\n",
|
|
36
|
-
"\x1b[0m"
|
|
37
|
-
);
|
|
38
|
-
return { element_token: { token: "invalid" } };
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
const baseUrl = `${apiDomain}/v1/element_tokens`;
|
|
42
|
-
|
|
43
|
-
const singleTokenOptions = {
|
|
44
|
-
method: "POST",
|
|
45
|
-
headers: {
|
|
46
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
47
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
48
|
-
},
|
|
49
|
-
body: JSON.stringify({
|
|
50
|
-
version: "1",
|
|
51
|
-
permissions: [
|
|
52
|
-
"agenda",
|
|
53
|
-
"availability",
|
|
54
|
-
"managed_availability",
|
|
55
|
-
"account_management"
|
|
56
|
-
],
|
|
57
|
-
subs: [env.SUB],
|
|
58
|
-
origin: "http://localhost:8080"
|
|
59
|
-
})
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const calendarSyncTokenOptions = {
|
|
63
|
-
method: "POST",
|
|
64
|
-
headers: {
|
|
65
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
66
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
67
|
-
},
|
|
68
|
-
body: JSON.stringify({
|
|
69
|
-
version: "1",
|
|
70
|
-
permissions: ["account_management"],
|
|
71
|
-
subs: [env.SUB],
|
|
72
|
-
origin: "http://localhost:8080"
|
|
73
|
-
})
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const rulesTokenOptions = {
|
|
77
|
-
method: "POST",
|
|
78
|
-
headers: {
|
|
79
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
80
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
81
|
-
},
|
|
82
|
-
body: JSON.stringify({
|
|
83
|
-
version: "1",
|
|
84
|
-
permissions: ["managed_availability"],
|
|
85
|
-
subs: [env.SUB],
|
|
86
|
-
origin: "http://localhost:8080"
|
|
87
|
-
})
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
const agendaTokenOptions = {
|
|
91
|
-
method: "POST",
|
|
92
|
-
headers: {
|
|
93
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
94
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
95
|
-
},
|
|
96
|
-
body: JSON.stringify({
|
|
97
|
-
version: "1",
|
|
98
|
-
permissions: ["agenda"],
|
|
99
|
-
subs: [env.SUB],
|
|
100
|
-
origin: "http://localhost:8080"
|
|
101
|
-
})
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const availabilityViewerTokenOptions = {
|
|
105
|
-
method: "POST",
|
|
106
|
-
headers: {
|
|
107
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
108
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
109
|
-
},
|
|
110
|
-
body: JSON.stringify({
|
|
111
|
-
version: "1",
|
|
112
|
-
permissions: ["availability"],
|
|
113
|
-
subs: [env.SUB],
|
|
114
|
-
origin: "http://localhost:8080"
|
|
115
|
-
})
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const slotPickerTokenOptions = {
|
|
119
|
-
method: "POST",
|
|
120
|
-
headers: {
|
|
121
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
122
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
123
|
-
},
|
|
124
|
-
body: JSON.stringify({
|
|
125
|
-
version: "1",
|
|
126
|
-
permissions: ["availability"],
|
|
127
|
-
subs: [env.SUB],
|
|
128
|
-
origin: "http://localhost:8080"
|
|
129
|
-
})
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
const dateTimePickerTokenOptions = {
|
|
133
|
-
method: "POST",
|
|
134
|
-
headers: {
|
|
135
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
136
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
137
|
-
},
|
|
138
|
-
body: JSON.stringify({
|
|
139
|
-
version: "1",
|
|
140
|
-
permissions: ["availability"],
|
|
141
|
-
subs: [env.SUB],
|
|
142
|
-
origin: "http://localhost:8080"
|
|
143
|
-
})
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
function localMiddleware (req, res, next) {
|
|
147
|
-
if (req.query.locale !== undefined) {
|
|
148
|
-
req.locale = req.query.locale;
|
|
149
|
-
} else {
|
|
150
|
-
req.locale = 'en';
|
|
151
|
-
}
|
|
152
|
-
// keep executing the router middleware
|
|
153
|
-
next()
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
app.set("query parser", "extended");
|
|
157
|
-
app.use(express.static(__dirname + "/../"));
|
|
158
|
-
app.use(localMiddleware)
|
|
159
|
-
app.set("view engine", "ejs");
|
|
160
|
-
app.set("views", path.join(__dirname, "/../demo"));
|
|
161
|
-
|
|
162
|
-
app.get("/", async (req, res) => {
|
|
163
|
-
const codeQuery = req.query.code;
|
|
164
|
-
|
|
165
|
-
if (codeQuery) {
|
|
166
|
-
console.log("there is a `code` query:", codeQuery);
|
|
167
|
-
const codeResponse = await getData(`${apiDomain}/oauth/token`, {
|
|
168
|
-
method: "POST",
|
|
169
|
-
headers: {
|
|
170
|
-
"Content-Type": "application/json; charset=utf-8"
|
|
171
|
-
},
|
|
172
|
-
body: JSON.stringify({
|
|
173
|
-
client_id: env.CLIENT_ID,
|
|
174
|
-
client_secret: env.CLIENT_SECRET,
|
|
175
|
-
grant_type: "authorization_code",
|
|
176
|
-
code: codeQuery,
|
|
177
|
-
redirect_uri: "http://localhost:8080/"
|
|
178
|
-
})
|
|
179
|
-
});
|
|
180
|
-
console.log("codeResponse", codeResponse);
|
|
181
|
-
return res.redirect("/");
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const single_token = await getData(baseUrl, singleTokenOptions);
|
|
185
|
-
|
|
186
|
-
return res.render("index", {
|
|
187
|
-
single_token: single_token.element_token.token,
|
|
188
|
-
api_domain: rawApiDomain,
|
|
189
|
-
app_domain: appDomain,
|
|
190
|
-
sub: env.SUB,
|
|
191
|
-
locale: req.locale,
|
|
192
|
-
client_id: env.CLIENT_ID
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
app.get("/availability-viewer", async (req, res) => {
|
|
197
|
-
const availability_token = await getData(
|
|
198
|
-
baseUrl,
|
|
199
|
-
availabilityViewerTokenOptions
|
|
200
|
-
);
|
|
201
|
-
console.log("Rendering with " + req.locale);
|
|
202
|
-
return res.render("availability-viewer", {
|
|
203
|
-
availability_token: availability_token.element_token.token,
|
|
204
|
-
api_domain: rawApiDomain,
|
|
205
|
-
app_domain: appDomain,
|
|
206
|
-
sub: env.SUB,
|
|
207
|
-
locale: req.locale,
|
|
208
|
-
client_id: env.CLIENT_ID
|
|
209
|
-
});
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
app.get("/rules", async (req, res) => {
|
|
213
|
-
const rules_token = await getData(baseUrl, rulesTokenOptions);
|
|
214
|
-
return res.render("rules", {
|
|
215
|
-
rules_token: rules_token.element_token.token,
|
|
216
|
-
api_domain: rawApiDomain,
|
|
217
|
-
app_domain: appDomain,
|
|
218
|
-
sub: env.SUB,
|
|
219
|
-
locale: req.locale,
|
|
220
|
-
client_id: env.CLIENT_ID
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
app.get("/agenda", async (req, res) => {
|
|
225
|
-
const agenda_token = await getData(baseUrl, agendaTokenOptions);
|
|
226
|
-
return res.render("agenda", {
|
|
227
|
-
agenda_token: agenda_token.element_token.token,
|
|
228
|
-
locale: req.locale,
|
|
229
|
-
api_domain: rawApiDomain
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
app.get("/integration", async (req, res) => {
|
|
234
|
-
const availability_token = await getData(
|
|
235
|
-
baseUrl,
|
|
236
|
-
availabilityViewerTokenOptions
|
|
237
|
-
);
|
|
238
|
-
const agenda_token = await getData(baseUrl, agendaTokenOptions);
|
|
239
|
-
const rules_token = await getData(baseUrl, rulesTokenOptions);
|
|
240
|
-
const slot_picker_token = await getData(baseUrl, slotPickerTokenOptions);
|
|
241
|
-
const cal_sync_token = await getData(baseUrl, calendarSyncTokenOptions);
|
|
242
|
-
return res.render("integration", {
|
|
243
|
-
agenda_token: agenda_token.element_token.token,
|
|
244
|
-
availability_token: availability_token.element_token.token,
|
|
245
|
-
rules_token: rules_token.element_token.token,
|
|
246
|
-
slot_picker_token: slot_picker_token.element_token.token,
|
|
247
|
-
cal_sync_token: cal_sync_token.element_token.token,
|
|
248
|
-
api_domain: rawApiDomain,
|
|
249
|
-
app_domain: appDomain,
|
|
250
|
-
sub: env.SUB,
|
|
251
|
-
locale: req.locale,
|
|
252
|
-
client_id: env.CLIENT_ID
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
app.get("/crossbrowser", async (req, res) => {
|
|
257
|
-
const availability_token = await getData(
|
|
258
|
-
baseUrl,
|
|
259
|
-
availabilityViewerTokenOptions
|
|
260
|
-
);
|
|
261
|
-
const agenda_token = await getData(baseUrl, agendaTokenOptions);
|
|
262
|
-
const rules_token = await getData(baseUrl, rulesTokenOptions);
|
|
263
|
-
const slot_picker_token = await getData(baseUrl, slotPickerTokenOptions);
|
|
264
|
-
const cal_sync_token = await getData(baseUrl, calendarSyncTokenOptions);
|
|
265
|
-
return res.render("crossbrowser", {
|
|
266
|
-
agenda_token: agenda_token.element_token.token,
|
|
267
|
-
availability_token: availability_token.element_token.token,
|
|
268
|
-
rules_token: rules_token.element_token.token,
|
|
269
|
-
slot_picker_token: slot_picker_token.element_token.token,
|
|
270
|
-
cal_sync_token: cal_sync_token.element_token.token,
|
|
271
|
-
api_domain: rawApiDomain,
|
|
272
|
-
app_domain: appDomain,
|
|
273
|
-
sub: env.SUB,
|
|
274
|
-
locale: req.locale,
|
|
275
|
-
client_id: env.CLIENT_ID
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
const slotTimes = function(days, time) {
|
|
280
|
-
const timeString = `${moment().utc().format("YYYY-MM-DD")}T${time}:00Z`;
|
|
281
|
-
const output = moment(timeString)
|
|
282
|
-
.add(days, "days");
|
|
283
|
-
return output.utc().format();
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
app.get("/slot-picker", async (req, res) => {
|
|
287
|
-
let bookable_event_ids = [];
|
|
288
|
-
|
|
289
|
-
const createBookableEvents = req.query.bookable_events;
|
|
290
|
-
|
|
291
|
-
if (createBookableEvents) {
|
|
292
|
-
const example_bookable_events = [
|
|
293
|
-
{
|
|
294
|
-
"bookable_event_id": "BOOKABLE_EVENT_1",
|
|
295
|
-
"start": slotTimes(1,"10:00"),
|
|
296
|
-
"end": slotTimes(1,"11:00"),
|
|
297
|
-
"status": "confirmed",
|
|
298
|
-
"registration": {
|
|
299
|
-
"capacity": 5
|
|
300
|
-
}
|
|
301
|
-
},
|
|
302
|
-
{
|
|
303
|
-
"bookable_event_id": "BOOKABLE_EVENT_2",
|
|
304
|
-
"start": slotTimes(1,"12:00"),
|
|
305
|
-
"end": slotTimes(1,"13:30"),
|
|
306
|
-
"status": "confirmed",
|
|
307
|
-
"registration": {
|
|
308
|
-
"capacity": 5
|
|
309
|
-
}
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
"bookable_event_id": "BOOKABLE_EVENT_3",
|
|
313
|
-
"start": slotTimes(1,"15:00"),
|
|
314
|
-
"end": slotTimes(1,"17:00"),
|
|
315
|
-
"status": "confirmed",
|
|
316
|
-
"registration": {
|
|
317
|
-
"capacity": 5
|
|
318
|
-
}
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
"bookable_event_id": "BOOKABLE_EVENT_4",
|
|
322
|
-
"start": slotTimes(2,"12:00"),
|
|
323
|
-
"end": slotTimes(2,"13:30"),
|
|
324
|
-
"status": "confirmed",
|
|
325
|
-
"registration": {
|
|
326
|
-
"capacity": 5
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
];
|
|
330
|
-
|
|
331
|
-
const bookableEventsUrl = `${apiDomain}/v1/bookable_events`;
|
|
332
|
-
const eventCreationOptions = {
|
|
333
|
-
method: "POST",
|
|
334
|
-
headers: {
|
|
335
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
336
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
337
|
-
}
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
bookable_event_ids = await Promise.all(example_bookable_events.map(async event => {
|
|
341
|
-
const options = {
|
|
342
|
-
...eventCreationOptions,
|
|
343
|
-
body: JSON.stringify(event)
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
const bookable_event = await getData(bookableEventsUrl, options);
|
|
347
|
-
console.log("New bookable event created:");
|
|
348
|
-
console.log({eventId: bookable_event.bookable_event.bookable_event_id});
|
|
349
|
-
|
|
350
|
-
return bookable_event.bookable_event.bookable_event_id;
|
|
351
|
-
}));
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
const tokenOptions = () => {
|
|
355
|
-
let options = {
|
|
356
|
-
version: "1",
|
|
357
|
-
permissions: ["availability"],
|
|
358
|
-
origin: "http://localhost:8080"
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
if(bookable_event_ids.length > 0){
|
|
362
|
-
options.bookable_event_ids = bookable_event_ids;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return options;
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
const bookableEventsSlotPickerTokenOptions = {
|
|
369
|
-
method: "POST",
|
|
370
|
-
headers: {
|
|
371
|
-
"Content-Type": "application/json; charset=utf-8",
|
|
372
|
-
Authorization: `Bearer ${env.CLIENT_SECRET}`
|
|
373
|
-
},
|
|
374
|
-
body: JSON.stringify(tokenOptions()),
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
const slot_picker_token = await getData(baseUrl, slotPickerTokenOptions);
|
|
378
|
-
const bookable_events_token = await getData(baseUrl, bookableEventsSlotPickerTokenOptions);
|
|
379
|
-
return res.render("slot-picker", {
|
|
380
|
-
bookable_event_ids: bookable_event_ids,
|
|
381
|
-
slot_picker_token: slot_picker_token.element_token.token,
|
|
382
|
-
bookable_events_token: bookable_events_token.element_token.token,
|
|
383
|
-
api_domain: rawApiDomain,
|
|
384
|
-
app_domain: appDomain,
|
|
385
|
-
sub: env.SUB,
|
|
386
|
-
locale: req.locale,
|
|
387
|
-
client_id: env.CLIENT_ID
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
app.get("/date-time-picker", async (req, res) => {
|
|
392
|
-
const date_time_picker_token = await getData(baseUrl, dateTimePickerTokenOptions);
|
|
393
|
-
return res.render("date-time-picker", {
|
|
394
|
-
date_time_picker_token: date_time_picker_token.element_token.token,
|
|
395
|
-
api_domain: rawApiDomain,
|
|
396
|
-
app_domain: appDomain,
|
|
397
|
-
sub: env.SUB,
|
|
398
|
-
locale: req.locale,
|
|
399
|
-
client_id: env.CLIENT_ID
|
|
400
|
-
});
|
|
401
|
-
});
|
|
402
|
-
|
|
403
|
-
app.get("/calendar-sync", async (req, res) => {
|
|
404
|
-
const cal_sync_token = await getData(baseUrl, calendarSyncTokenOptions);
|
|
405
|
-
return res.render("calendar-sync", {
|
|
406
|
-
cal_sync_token: cal_sync_token.element_token.token,
|
|
407
|
-
api_domain: rawApiDomain,
|
|
408
|
-
app_domain: appDomain,
|
|
409
|
-
sub: env.SUB,
|
|
410
|
-
locale: req.locale,
|
|
411
|
-
client_id: env.CLIENT_ID
|
|
412
|
-
});
|
|
413
|
-
});
|
|
414
|
-
|
|
415
|
-
app.listen(8080);
|
|
416
|
-
|
|
417
|
-
console.log(
|
|
418
|
-
"\x1b[32m\n",
|
|
419
|
-
"┌─────────────────────────────────────────────────┐\n",
|
|
420
|
-
"│ │\n",
|
|
421
|
-
"│ serving on port 8080 - http://localhost:8080/ │\n",
|
|
422
|
-
"│ │\n",
|
|
423
|
-
"└─────────────────────────────────────────────────┘\n",
|
|
424
|
-
"\x1b[0m"
|
|
425
|
-
);
|
package/demo/slot-picker.ejs
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
7
|
-
<title>Embedding demo: availability viewer</title>
|
|
8
|
-
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
|
|
9
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
|
|
10
|
-
<link href="/demo/demo-styles.css" rel="stylesheet">
|
|
11
|
-
<%- include('load-elements.ejs', { mode: 'dev'}) %>
|
|
12
|
-
</head>
|
|
13
|
-
|
|
14
|
-
<body class="trouble">
|
|
15
|
-
<% var slug = 'slot-picker'; %>
|
|
16
|
-
<%- include nav.ejs %>
|
|
17
|
-
|
|
18
|
-
<h1>Slot Picker</h1>
|
|
19
|
-
<div id="cronofy-error-message"></div>
|
|
20
|
-
<div id="cronofy-slot-picker"></div>
|
|
21
|
-
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Recusandae, doloribus eaque? Animi, velit culpa nostrum omnis vitae rem placeat ut mollitia autem porro! Qui molestiae porro rerum similique, aliquid deleniti!</p>
|
|
22
|
-
<div id="cronofy-slot-picker-two"></div>
|
|
23
|
-
<hr>
|
|
24
|
-
<h3>Slot Picker: bookable events</h3>
|
|
25
|
-
<div id="cronofy-slot-picker-bookable-events"></div>
|
|
26
|
-
<p><a href="http://localhost:8080/slot-picker?locale=en&bookable_events=true">Create some bookable events</a></p>
|
|
27
|
-
<hr>
|
|
28
|
-
<div class="wrapper">
|
|
29
|
-
<div class="column">
|
|
30
|
-
<h2>Consectetur adipisicing elit</h2>
|
|
31
|
-
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. <a href="/">Voluptate sed ex totam odit</a> quae hic voluptatibus, quisquam dicta animi laborum velit laboriosam, placeat suscipit tenetur voluptates! Illo tempora minus animi.</p>
|
|
32
|
-
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quidem consequuntur repudiandae nesciunt, totam dicta earum deleniti magnam eveniet eligendi sunt adipisci veniam esse aliquid aperiam corporis optio fuga tempora sit!</p>
|
|
33
|
-
</div>
|
|
34
|
-
<div class="column">
|
|
35
|
-
<h2>Est deserunt non quis do quis nostrud ad exercitation proident incididunt.</h2>
|
|
36
|
-
<p>Excepturi dicta neque ut, a expedita quaerat, tempore dolor placeat quibusdam cumque ipsam cum officia voluptate, ea fuga optio necessitatibus inventore tempora?</p>
|
|
37
|
-
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Natus nisi eveniet voluptas provident esse beatae minus at error dignissimos neque? Temporibus velit numquam aut labore porro neque ipsum, deleniti a?</p>
|
|
38
|
-
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Eum sunt eligendi, error quos nulla dolorem alias corrupti iste fugiat deleniti nam unde, porro provident a voluptatem at voluptates, dolores sed!</p>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Natus nisi eveniet voluptas provident esse beatae minus at error dignissimos neque? Temporibus velit numquam aut labore porro neque ipsum, deleniti a?</p>
|
|
42
|
-
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Debitis saepe maxime corporis nemo hic rerum porro in repudiandae? Libero eligendi impedit reiciendis exercitationem fuga ex eos aliquid itaque facere corrupti.</p>
|
|
43
|
-
<hr>
|
|
44
|
-
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Eum sunt eligendi, error quos nulla dolorem alias corrupti iste fugiat deleniti nam unde, porro provident a voluptatem at voluptates, dolores sed!</p>
|
|
45
|
-
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum commodi fuga laboriosam? Quas officiis doloremque iure modi, ipsam dolore ad illum saepe et voluptatum quis tempore ullam dolor, sequi nulla!</p>
|
|
46
|
-
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Eum sunt eligendi, error quos nulla dolorem alias corrupti iste fugiat deleniti nam unde, porro provident a voluptatem at voluptates, dolores sed!</p>
|
|
47
|
-
|
|
48
|
-
<script>
|
|
49
|
-
const locale = "<%= locale %>";
|
|
50
|
-
|
|
51
|
-
if ("<%= slot_picker_token %>" === "invalid") {
|
|
52
|
-
const errorMessageWrapper = document.querySelector('#cronofy-error-message');
|
|
53
|
-
errorMessageWrapper.innerHTML = "<span class='error'>There was a problem generating the element token. Check that your <code>CLIENT_ID</code>, <code>CLIENT_SECRET</code>, and <code>SUB</code> environment variables are correct.</span>"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const display = {
|
|
57
|
-
// 0 = don't show the element
|
|
58
|
-
// 1 = show the element
|
|
59
|
-
one: 1,
|
|
60
|
-
two: 1,
|
|
61
|
-
three: 1
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (display.one) {
|
|
65
|
-
const slotTimes = function(days, time) {
|
|
66
|
-
const timeString = `${moment().utc().format("YYYY-MM-DD")}T${time}:00Z`;
|
|
67
|
-
const output = moment(timeString)
|
|
68
|
-
.add(days, "days");
|
|
69
|
-
return output.utc().format();
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
CronofyElements.SlotPicker({
|
|
73
|
-
element_token: "<%= slot_picker_token %>",
|
|
74
|
-
target_id: 'cronofy-slot-picker',
|
|
75
|
-
api_domain:"<%= api_domain %>",
|
|
76
|
-
availability_query: {
|
|
77
|
-
participants: [
|
|
78
|
-
{
|
|
79
|
-
required: "all",
|
|
80
|
-
members: [
|
|
81
|
-
{
|
|
82
|
-
sub: "<%= sub %>",
|
|
83
|
-
// managed_availability: true,
|
|
84
|
-
// availability_rule_ids: ["weekly_work_hours"]
|
|
85
|
-
}
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
],
|
|
89
|
-
required_duration: { minutes: 60 },
|
|
90
|
-
query_periods: [
|
|
91
|
-
{ start: slotTimes(1,"07:00"), end: slotTimes(1,"12:00") },
|
|
92
|
-
{ start: slotTimes(2,"09:00"), end: slotTimes(2,"13:00") },
|
|
93
|
-
{ start: slotTimes(2,"14:00"), end: slotTimes(2,"17:00") },
|
|
94
|
-
{ start: slotTimes(3,"09:00"), end: slotTimes(3,"13:00") },
|
|
95
|
-
{ start: slotTimes(3,"14:00"), end: slotTimes(3,"17:00") },
|
|
96
|
-
{ start: slotTimes(4,"09:00"), end: slotTimes(5,"17:00") }
|
|
97
|
-
]
|
|
98
|
-
},
|
|
99
|
-
// tzid: "America/Mexico_City",
|
|
100
|
-
// tzid: "Asia/Katmandu",
|
|
101
|
-
styles: {
|
|
102
|
-
prefix: "SP1"
|
|
103
|
-
},
|
|
104
|
-
config: {
|
|
105
|
-
logs: 'info'
|
|
106
|
-
},
|
|
107
|
-
// locale: 'keys',
|
|
108
|
-
// translations: {
|
|
109
|
-
// en: {
|
|
110
|
-
// slot_picker: {
|
|
111
|
-
// select_day: 'Override select_day'
|
|
112
|
-
// }
|
|
113
|
-
// }
|
|
114
|
-
// },
|
|
115
|
-
callback: slot => console.log('callback',slot),
|
|
116
|
-
locale: locale
|
|
117
|
-
// demo: true
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (display.two) {
|
|
122
|
-
const slotTimes = function(days, time) {
|
|
123
|
-
const timeString = `${moment().utc().format("YYYY-MM-DD")}T${time}:00Z`;
|
|
124
|
-
const output = moment(timeString)
|
|
125
|
-
.add(days, "days");
|
|
126
|
-
return output.utc().format();
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
CronofyElements.SlotPicker({
|
|
130
|
-
element_token: "<%= slot_picker_token %>",
|
|
131
|
-
target_id: 'cronofy-slot-picker-two',
|
|
132
|
-
api_domain:"<%= api_domain %>",
|
|
133
|
-
availability_query: {
|
|
134
|
-
participants: [
|
|
135
|
-
{
|
|
136
|
-
required: "all",
|
|
137
|
-
members: [
|
|
138
|
-
{ sub: "<%= sub %>" }
|
|
139
|
-
]
|
|
140
|
-
}
|
|
141
|
-
],
|
|
142
|
-
required_duration: { minutes: 30 },
|
|
143
|
-
query_periods: [
|
|
144
|
-
{ start: slotTimes(1,"23:00"), end: slotTimes(2,"01:00") },
|
|
145
|
-
{ start: slotTimes(2,"23:00"), end: slotTimes(3,"01:00") }
|
|
146
|
-
]
|
|
147
|
-
},
|
|
148
|
-
config: {
|
|
149
|
-
mode: 'no_confirm'
|
|
150
|
-
},
|
|
151
|
-
styles: {
|
|
152
|
-
prefix: "SP2",
|
|
153
|
-
padding: "20px"
|
|
154
|
-
},
|
|
155
|
-
callback: slot => console.log('callback',slot),
|
|
156
|
-
locale: locale,
|
|
157
|
-
locale_modifiers: {
|
|
158
|
-
"ja": {"dates": "western"},
|
|
159
|
-
}
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (display.three) {
|
|
164
|
-
|
|
165
|
-
const events = <%- JSON.stringify(bookable_event_ids) %>.map(event => ({
|
|
166
|
-
bookable_event_id: event
|
|
167
|
-
}));
|
|
168
|
-
|
|
169
|
-
CronofyElements.SlotPicker({
|
|
170
|
-
element_token: "<%= bookable_events_token %>",
|
|
171
|
-
target_id: 'cronofy-slot-picker-bookable-events',
|
|
172
|
-
api_domain:"<%= api_domain %>",
|
|
173
|
-
availability_query: {
|
|
174
|
-
"bookable_events": events
|
|
175
|
-
// "bookable_events": [
|
|
176
|
-
// {
|
|
177
|
-
// "bookable_event_id": "UNKNOWN_ID"
|
|
178
|
-
// }
|
|
179
|
-
// ]
|
|
180
|
-
// "bookable_events": []
|
|
181
|
-
},
|
|
182
|
-
config: {
|
|
183
|
-
mode: 'no_confirm'
|
|
184
|
-
},
|
|
185
|
-
styles: {
|
|
186
|
-
prefix: "SP3",
|
|
187
|
-
},
|
|
188
|
-
callback: slot => console.log('callback',slot),
|
|
189
|
-
locale: locale,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
console.log('done.');
|
|
194
|
-
</script>
|
|
195
|
-
|
|
196
|
-
</body>
|
|
197
|
-
</html>
|
package/git.README.md
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Cronofy UI Elements
|
|
2
|
-
|
|
3
|
-
A suite of embeddable components that access the Cronofy API.
|
|
4
|
-
|
|
5
|
-
Full documentation can be found here: [docs.cronofy.com/developers/ui-elements](https://docs.cronofy.com/developers/ui-elements/)
|
|
6
|
-
|
|
7
|
-
Information about installing via npm can be found here: [npm.README.md](./npm.README.md)
|
|
8
|
-
|
|
9
|
-
## Developer documentation
|
|
10
|
-
|
|
11
|
-
To setup the development environment, run:
|
|
12
|
-
|
|
13
|
-
make init
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
You will need to ensure `/src/js/env.js` is updated with your local development settings. See `/src/js/env.example.js` for an example of this.
|
|
17
|
-
|
|
18
|
-
To start development, run:
|
|
19
|
-
|
|
20
|
-
make dev
|
|
21
|
-
|
|
22
|
-
If using powprox for local API hosting (our default) you can set an environment variable to tell Node about a custom root CA in your `.bash_profile` or equivalent:
|
|
23
|
-
|
|
24
|
-
export NODE_EXTRA_CA_CERTS="$HOME/.powprox/ssl/ca/pow-root-ca.crt"
|
|
25
|
-
|
|
26
|
-
Alternatively, though not recommended, you can disable all TLS verification:
|
|
27
|
-
|
|
28
|
-
NODE_TLS_REJECT_UNAUTHORIZED=0 make dev
|
|
29
|
-
|
|
30
|
-
This will watch the source files and rebuild whenever you save changes. It will also host the demo app (`demo/index.ejs`) on port `8080`
|
|
31
|
-
|
|
32
|
-
You can make a one-off development build (without watching the files or serving the demo) using:
|
|
33
|
-
|
|
34
|
-
make build_dev
|
|
35
|
-
|
|
36
|
-
You can make a production build with:
|
|
37
|
-
|
|
38
|
-
make build
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
To bump a patch version (e.g. from `0.0.1` to `0.0.2`) and make a production build, run:
|
|
42
|
-
|
|
43
|
-
bump_patch
|
|
44
|
-
|
|
45
|
-
To bump a minor version (e.g. from `0.1.0` to `0.2.0`) and make a production build, run:
|
|
46
|
-
|
|
47
|
-
bump_minor
|
|
48
|
-
|
|
49
|
-
To bump a major version (e.g. from `1.0.0` to `2.0.0`) and make a production build, run:
|
|
50
|
-
|
|
51
|
-
bump_major
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
### Releasing
|
|
55
|
-
|
|
56
|
-
> Since moving UI Elements into the monorepo, the npm update flow has been, shall we say, janky. This is because the npm tooling assumes it's always going to be in the root of whatever repo it lives in. These are the new steps needed to account for this jankiness:
|
|
57
|
-
|
|
58
|
-
You find yourself in the UI Elements root folder (`cronofy/js/elements`) inside the monorepo. You have made changes, and your PR has been approved. You want to cut a new version before releasing changes...
|
|
59
|
-
|
|
60
|
-
- Run `make bump_patch` (or `bump_minor` or `bump_major` depending on the type of change you've made)
|
|
61
|
-
- That task no longer commits its changes automatically - it will have changed the version number in `package-lock.json` and `package.json` and the changes will be unstaged. Commit these changes ("version bump" or similar is fine for a commit-message).
|
|
62
|
-
- You then need to run `git tag -a vTHE_NEW_VERSION -m "overview of changes"` (so if you've gone from v1.12.0 to v1.12.1, the tag version should look like `tag -a v1.12.1`) *For consistency, run the tag on the branch that contains the changes.*
|
|
63
|
-
- Then `git push` and `git push --tags` (if you haven't pushed the tag, the deployment will fail)
|
|
64
|
-
- Now you can merge your PR and ask someone to deploy the changes for you (make sure you tell them the number of the version you want to be released, e.g. `v1.12.1` - they'll need this to run the deployment). *Note: a UI Elements deployment is not the same thing as a normal app deployment - they are different steps, and need to be initiated independently.*
|
|
65
|
-
|
|
66
|
-
### Things that need to be published in order to call a UI Element change "done"
|
|
67
|
-
|
|
68
|
-
- new build file added to S3 bucket (so that it shows up at this URL: `https://elements.cronofy.com/js/CronofyElements.vNEW_VERSION_NUMBER.js`)
|
|
69
|
-
- publish changes to NPM (checkable here: [https://www.npmjs.com/package/cronofy-elements](https://www.npmjs.com/package/cronofy-elements))
|
|
70
|
-
- Add changes to docs if user-facing API has changed
|
|
71
|
-
- Update v# and changelog in the docs (only do this *after* the S3 URL is available)
|