@nylas/web-elements 0.0.0-test-20250320205845 → 0.0.0-test-20250327161320

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 (76) hide show
  1. package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +10 -11
  2. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js +6 -9
  3. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js.map +1 -1
  4. package/dist/cjs/google-logo-icon_6.cjs.entry.js +5 -5
  5. package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js.map +1 -1
  7. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  8. package/dist/cjs/nylas-transcript.cjs.entry.js +4 -4
  9. package/dist/cjs/nylas-transcript.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nylas-video-player.cjs.entry.js +2 -2
  11. package/dist/cjs/nylas-video-player.cjs.entry.js.map +1 -1
  12. package/dist/cjs/scheduler-store-461fd2ff.js.map +1 -1
  13. package/dist/collection/components/nylas-notebook/nylas-transcript/nylas-transcript.css +5 -0
  14. package/dist/collection/components/nylas-notebook/nylas-transcript/nylas-transcript.js +3 -3
  15. package/dist/collection/components/nylas-notebook/nylas-transcript/nylas-transcript.js.map +1 -1
  16. package/dist/collection/components/nylas-notebook/nylas-video-player/nylas-video-player.css +0 -3
  17. package/dist/collection/components/nylas-notebook/nylas-video-player/nylas-video-player.js +1 -1
  18. package/dist/collection/components/nylas-notebook/nylas-video-player/nylas-video-player.js.map +1 -1
  19. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +1 -1
  20. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
  21. package/dist/collection/components/scheduler-editor/nylas-booking-form-config/nylas-booking-form-config.js +3 -5
  22. package/dist/collection/components/scheduler-editor/nylas-booking-form-config/nylas-booking-form-config.js.map +1 -1
  23. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js +5 -5
  24. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js.map +1 -1
  25. package/dist/collection/components/scheduler-editor/nylas-event-duration/test/nylas-event-duration-with-config-2.spec.js +58 -0
  26. package/dist/collection/components/scheduler-editor/nylas-event-duration/test/nylas-event-duration-with-config-2.spec.js.map +1 -0
  27. package/dist/collection/components/scheduler-editor/nylas-event-duration/test/nylas-event-duration-with-config.spec.js +0 -32
  28. package/dist/collection/components/scheduler-editor/nylas-event-duration/test/nylas-event-duration-with-config.spec.js.map +1 -1
  29. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js +3 -4
  30. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js.map +1 -1
  31. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/test/nylas-participants-custom-availability.spec.js +12 -0
  32. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/test/nylas-participants-custom-availability.spec.js.map +1 -1
  33. package/dist/collection/connector/shared/api/scheduler-config.js.map +1 -1
  34. package/dist/collection/types/index.js.map +1 -1
  35. package/dist/components/nylas-booking-form-config2.js +3 -5
  36. package/dist/components/nylas-booking-form-config2.js.map +1 -1
  37. package/dist/components/nylas-editor-tabs-group2.js +5 -5
  38. package/dist/components/nylas-editor-tabs-group2.js.map +1 -1
  39. package/dist/components/nylas-participants-custom-availability2.js +3 -4
  40. package/dist/components/nylas-participants-custom-availability2.js.map +1 -1
  41. package/dist/components/nylas-scheduler-editor.js.map +1 -1
  42. package/dist/components/nylas-scheduling.js.map +1 -1
  43. package/dist/components/nylas-transcript.js +4 -4
  44. package/dist/components/nylas-transcript.js.map +1 -1
  45. package/dist/components/nylas-video-player.js +2 -2
  46. package/dist/components/nylas-video-player.js.map +1 -1
  47. package/dist/components/scheduler-store.js.map +1 -1
  48. package/dist/esm/calendar-agenda-fill-icon_36.entry.js +6 -9
  49. package/dist/esm/calendar-agenda-fill-icon_36.entry.js.map +1 -1
  50. package/dist/esm/google-logo-icon_6.entry.js +5 -5
  51. package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
  52. package/dist/esm/nylas-scheduler-editor.entry.js.map +1 -1
  53. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  54. package/dist/esm/nylas-transcript.entry.js +4 -4
  55. package/dist/esm/nylas-transcript.entry.js.map +1 -1
  56. package/dist/esm/nylas-video-player.entry.js +2 -2
  57. package/dist/esm/nylas-video-player.entry.js.map +1 -1
  58. package/dist/esm/scheduler-store-755ced0b.js.map +1 -1
  59. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  60. package/dist/nylas-web-elements/p-4b48f29a.entry.js.map +1 -1
  61. package/dist/nylas-web-elements/p-68608216.entry.js.map +1 -1
  62. package/dist/nylas-web-elements/{p-f12cd991.entry.js → p-7fcdad32.entry.js} +2 -2
  63. package/dist/nylas-web-elements/p-7fcdad32.entry.js.map +1 -0
  64. package/dist/nylas-web-elements/{p-b1c57792.entry.js → p-c3f848d7.entry.js} +2 -2
  65. package/dist/nylas-web-elements/{p-b1c57792.entry.js.map → p-c3f848d7.entry.js.map} +1 -1
  66. package/dist/nylas-web-elements/p-d1053aa8.entry.js +2 -0
  67. package/dist/nylas-web-elements/p-d1053aa8.entry.js.map +1 -0
  68. package/dist/nylas-web-elements/p-d36ad6ef.js.map +1 -1
  69. package/dist/nylas-web-elements/{p-11d7062d.entry.js → p-f4881c71.entry.js} +2 -2
  70. package/dist/nylas-web-elements/p-f4881c71.entry.js.map +1 -0
  71. package/dist/types/connector/shared/api/scheduler-config.d.ts +2 -2
  72. package/package.json +4 -4
  73. package/dist/nylas-web-elements/p-11d7062d.entry.js.map +0 -1
  74. package/dist/nylas-web-elements/p-3d93df74.entry.js +0 -2
  75. package/dist/nylas-web-elements/p-3d93df74.entry.js.map +0 -1
  76. package/dist/nylas-web-elements/p-f12cd991.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-participants-custom-availability.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration, OpenHours, Participant, ParticipantAvailability } from '@nylas/core';\nimport { DEFAULT_OPEN_HOURS } from '@/common/constants';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\n/**\n * The `nylas-participants-custom-availability` component is a form input for setting custom availability for participants.\n *\n * @part npca - The participants custom availability container\n * @part npca__header - The header of the participants custom availability\n * @part npca__content - The content of the participants custom availability\n * @part npca__participant-container - The participant container\n * @part npca__participant-title - The title of the participant\n * @part npca__participant-toggle--container - The toggle container for the participant\n * @part npca__toggle-label - The label of the toggle\n * @part npca_toggle-input - The input of the toggle\n * @part npca_toggle-slider - The slider of the toggle\n */\n@Component({\n tag: 'nylas-participants-custom-availability',\n styleUrl: 'nylas-participants-custom-availability.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasParticipantsCustomAvailability {\n @Element() host!: HTMLNylasParticipantsCustomAvailabilityElement;\n private participantFormRef!: HTMLFormElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the participants custom availability.\n */\n @Prop() name: string = 'participant-custom-availability';\n\n /**\n * @standalone\n * The participants selected in the add participants section.\n */\n @Prop() participants: Participant[] = this.selectedConfiguration?.participants || [];\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * This event is fired when the participants custom availability changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The state to store the custom availability setting for participants.\n */\n @State() selectedParticipants: {\n [key: string]: {\n setCustom: boolean;\n isOpen: boolean;\n openHours: OpenHours[];\n name: string;\n availability?: ParticipantAvailability;\n timezone?: string;\n };\n } = this.setParticipants(this.participants);\n\n // Watchers\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-participants-custom-availability', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('participants')\n participantsChangedHandler(newValue: Participant[], oldValue: Participant[]) {\n debug('nylas-participants-custom-availability', 'participantsChangedHandler', newValue, oldValue);\n if (!newValue || !oldValue || JSON.stringify(newValue) === JSON.stringify(oldValue)) {\n return;\n }\n this.selectedParticipants = this.setParticipants(newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration, oldValue: Configuration) {\n debug('nylas-participants-custom-availability', 'selectedConfigurationChangedHandler', newValue, oldValue);\n if (!newValue || !oldValue || JSON.stringify(newValue) === JSON.stringify(oldValue)) {\n return;\n }\n if (newValue?.participants) {\n this.selectedParticipants = this.setParticipants(newValue?.participants);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n }\n\n // Lifecycle Methods\n connectedCallback() {\n debug('nylas-participants-custom-availability', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-participants-custom-availability', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-participants-custom-availability', 'componentWillLoad');\n }\n\n componentDidLoad() {\n debug('nylas-participants-custom-availability', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedParticipants = this.setParticipants(this.selectedConfiguration?.participants);\n } else {\n this.selectedParticipants = this.setParticipants(this.participants);\n }\n }\n\n // Event Handlers\n @Listen('nylasFormSwitchToggled')\n nylasFormSwitchToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: boolean }>) {\n debug('nylas-participants-custom-availability', 'nylasFormSwitchToggledHandler', event.detail);\n const existingParticipant = this.selectedConfiguration?.participants.find(participant => participant.email === event.detail.name);\n const existingOpenHours = existingParticipant?.availability?.open_hours || [];\n const openHours = existingOpenHours?.length > 0 ? existingOpenHours : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours || [];\n const timeZone =\n existingOpenHours && existingOpenHours.length > 0\n ? existingParticipant?.timezone\n : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours?.at(0)?.timezone ||\n this.selectedConfiguration?.event_booking?.timezone ||\n window.Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n this.selectedParticipants[event.detail.name]['isOpen'] = event.detail.checked;\n this.selectedParticipants[event.detail.name]['setCustom'] = event.detail.checked;\n this.selectedParticipants[event.detail.name]['openHours'] = event.detail.checked ? (openHours?.length > 0 ? openHours : DEFAULT_OPEN_HOURS) : [];\n this.selectedParticipants[event.detail.name]['timezone'] = event.detail.checked ? timeZone : undefined;\n this.selectedParticipants = { ...this.selectedParticipants };\n this.updateFormValue();\n }\n\n @Listen('valueChanged')\n handleValueChanged(event: CustomEvent) {\n debug('[nylas-editor-tabs]', 'handleValueChanged', event);\n const { name, value } = event.detail;\n if (!name.startsWith('participant-')) {\n return;\n }\n // Validate the form\n if (this.isInternalsAvailable) {\n if (!this.participantFormRef.checkValidity()) {\n this.internals.setValidity({ customError: true }, 'Please fix the overlapping time ranges.');\n return;\n } else {\n this.internals.setValidity({});\n }\n }\n\n const jsonValue = JSON.parse(value);\n\n const key = name.split('-')[2];\n if (!this.selectedParticipants[key]) return;\n const existingOpenHours = jsonValue.openHours || [];\n const openHours = existingOpenHours?.length > 0 ? existingOpenHours : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours || [];\n this.selectedParticipants[key]['openHours'] = openHours;\n this.selectedParticipants = { ...this.selectedParticipants };\n\n this.updateFormValue();\n }\n\n updateFormValue() {\n const participantOpenHours = {};\n const participants = this.selectedConfiguration?.participants || this.participants;\n participants.forEach(participant => {\n participantOpenHours[participant.email] = this.selectedParticipants[participant.email].openHours;\n });\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(participantOpenHours), this.name);\n this.valueChanged.emit({ value: JSON.stringify(participantOpenHours), name: this.name });\n }\n\n setParticipants(participants: Participant[]) {\n const selectedParticipants = {};\n participants?.forEach(participant => {\n selectedParticipants[participant.email] = {\n isOpen: false,\n setCustom: Boolean(participant.availability?.open_hours),\n openHours: participant.availability?.open_hours || [],\n name: participant.name || participant.email,\n availability: participant.availability,\n timezone: participant.timezone,\n };\n });\n return selectedParticipants;\n }\n\n /**\n * This method is essentially a workaround to check if the internals are available because\n * the unit tests in stencil do not support the internals.\n * @returns boolean\n */\n get isInternalsAvailable() {\n return this.internals !== undefined && typeof this.internals.setFormValue === 'function' && typeof this.internals.setValidity === 'function';\n }\n\n @RegisterComponent<NylasParticipantsCustomAvailability, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-participants-custom-availability',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-participants-custom-availability\" part=\"npca\">\n <div class=\"header\" part=\"npca__header\">\n <h3>{i18next.t('nylasParticipantCustomAvailability.headerTitle')}</h3>\n <p>{i18next.t('nylasParticipantCustomAvailability.headerSubTitle')}</p>\n </div>\n <div class=\"content\" part=\"npca__content\">\n <form ref={el => (this.participantFormRef = el as HTMLFormElement)}>\n {Object.keys(this.selectedParticipants).map((key, index) => {\n const participant = this.selectedParticipants[key];\n const participantOpenHours = participant.availability?.open_hours || [];\n if (!participant || !participant.name || !participant.availability) return;\n return (\n <div class=\"participant-container\" part=\"npca__participant-container\" key={`participant-conatiner-${index}`}>\n <div class=\"participant-title\" part=\"npca__participant-title\">\n <p>{i18next.t('nylasParticipantCustomAvailability.participantOpenHoursTitle', { participantName: participant.name })}</p>\n <div class=\"participant-toggle\" part=\"npca__participant-toggle--container\">\n <toggle-switch\n exportparts=\"ts_label: npca__toggle-label, ts_input: npca_toggle-input, ts_slider: npca_toggle-slider\"\n name={key}\n checked={!!participant?.openHours && participant?.openHours.length > 0}\n />\n <span\n class={`chevron ${participant.isOpen ? 'open' : 'closed'} ${participant.setCustom ? '' : 'disabled'}`}\n onClick={() => {\n if (!participant.setCustom) return;\n this.selectedParticipants[key].isOpen = !participant.isOpen;\n this.selectedParticipants = { ...this.selectedParticipants };\n }}\n >\n <chevron-icon width=\"24\" height=\"24\" />\n </span>\n </div>\n </div>\n {participant.isOpen && (\n <nylas-availability-picker\n key={index}\n name={`participant-${index}-${key}`}\n openHours={participantOpenHours}\n defaultTimezone={participant.timezone}\n hideHeader={true}\n />\n )}\n </div>\n );\n })}\n </form>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-participants-custom-availability.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration, OpenHours, Participant, ParticipantAvailability } from '@nylas/core';\nimport { DEFAULT_OPEN_HOURS } from '@/common/constants';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\n/**\n * The `nylas-participants-custom-availability` component is a form input for setting custom availability for participants.\n *\n * @part npca - The participants custom availability container\n * @part npca__header - The header of the participants custom availability\n * @part npca__content - The content of the participants custom availability\n * @part npca__participant-container - The participant container\n * @part npca__participant-title - The title of the participant\n * @part npca__participant-toggle--container - The toggle container for the participant\n * @part npca__toggle-label - The label of the toggle\n * @part npca_toggle-input - The input of the toggle\n * @part npca_toggle-slider - The slider of the toggle\n */\n@Component({\n tag: 'nylas-participants-custom-availability',\n styleUrl: 'nylas-participants-custom-availability.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasParticipantsCustomAvailability {\n @Element() host!: HTMLNylasParticipantsCustomAvailabilityElement;\n private participantFormRef!: HTMLFormElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the participants custom availability.\n */\n @Prop() name: string = 'participant-custom-availability';\n\n /**\n * @standalone\n * The participants selected in the add participants section.\n */\n @Prop() participants: Participant[] = this.selectedConfiguration?.participants || [];\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * This event is fired when the participants custom availability changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The state to store the custom availability setting for participants.\n */\n @State() selectedParticipants: {\n [key: string]: {\n setCustom: boolean;\n isOpen: boolean;\n openHours: OpenHours[];\n name: string;\n availability?: ParticipantAvailability;\n timezone?: string;\n };\n } = this.setParticipants(this.participants);\n\n // Watchers\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-participants-custom-availability', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('participants')\n participantsChangedHandler(newValue: Participant[], oldValue: Participant[]) {\n debug('nylas-participants-custom-availability', 'participantsChangedHandler', newValue, oldValue);\n if (!newValue || !oldValue || JSON.stringify(newValue) === JSON.stringify(oldValue)) {\n return;\n }\n this.selectedParticipants = this.setParticipants(newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration, oldValue: Configuration) {\n debug('nylas-participants-custom-availability', 'selectedConfigurationChangedHandler', newValue, oldValue);\n if (!newValue || !oldValue || JSON.stringify(newValue) === JSON.stringify(oldValue)) {\n return;\n }\n if (newValue?.participants) {\n this.selectedParticipants = this.setParticipants(newValue?.participants);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n }\n\n // Lifecycle Methods\n connectedCallback() {\n debug('nylas-participants-custom-availability', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-participants-custom-availability', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-participants-custom-availability', 'componentWillLoad');\n }\n\n componentDidLoad() {\n debug('nylas-participants-custom-availability', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedParticipants = this.setParticipants(this.selectedConfiguration?.participants);\n } else {\n this.selectedParticipants = this.setParticipants(this.participants);\n }\n }\n\n // Event Handlers\n @Listen('nylasFormSwitchToggled')\n nylasFormSwitchToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: boolean }>) {\n debug('nylas-participants-custom-availability', 'nylasFormSwitchToggledHandler', event.detail);\n const existingParticipant = this.selectedConfiguration?.participants.find(participant => participant.email === event.detail.name);\n const existingOpenHours = existingParticipant?.availability?.open_hours || [];\n const openHours = existingOpenHours?.length > 0 ? existingOpenHours : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours || [];\n const timeZone =\n existingOpenHours && existingOpenHours.length > 0\n ? existingParticipant?.timezone\n : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours?.at(0)?.timezone ||\n this.selectedConfiguration?.event_booking?.timezone ||\n window.Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n this.selectedParticipants[event.detail.name]['isOpen'] = event.detail.checked;\n this.selectedParticipants[event.detail.name]['setCustom'] = event.detail.checked;\n this.selectedParticipants[event.detail.name]['openHours'] = event.detail.checked ? (openHours?.length > 0 ? openHours : DEFAULT_OPEN_HOURS) : [];\n this.selectedParticipants[event.detail.name]['timezone'] = event.detail.checked ? timeZone : undefined;\n this.selectedParticipants = { ...this.selectedParticipants };\n this.updateFormValue();\n }\n\n @Listen('valueChanged')\n handleValueChanged(event: CustomEvent) {\n debug('[nylas-editor-tabs]', 'handleValueChanged', event);\n const { name, value } = event.detail;\n if (!name.startsWith('participant-')) {\n return;\n }\n // Validate the form\n if (this.isInternalsAvailable) {\n if (!this.participantFormRef.checkValidity()) {\n this.internals.setValidity({ customError: true }, 'Please fix the overlapping time ranges.');\n return;\n } else {\n this.internals.setValidity({});\n }\n }\n\n const jsonValue = JSON.parse(value);\n\n const key = name.split('-')[2];\n if (!this.selectedParticipants[key]) return;\n const existingOpenHours = jsonValue.openHours || [];\n const openHours = existingOpenHours?.length > 0 ? existingOpenHours : this.selectedConfiguration?.availability?.availability_rules?.default_open_hours || [];\n this.selectedParticipants[key]['openHours'] = openHours;\n this.selectedParticipants = { ...this.selectedParticipants };\n\n this.updateFormValue();\n }\n\n updateFormValue() {\n const participantOpenHours = {};\n Object.keys(this.selectedParticipants).forEach(key => {\n participantOpenHours[key] = this.selectedParticipants[key].openHours;\n });\n\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(participantOpenHours), this.name);\n this.valueChanged.emit({ value: JSON.stringify(participantOpenHours), name: this.name });\n }\n\n setParticipants(participants: Participant[]) {\n const selectedParticipants = {};\n participants?.forEach(participant => {\n selectedParticipants[participant.email] = {\n isOpen: false,\n setCustom: Boolean(participant.availability?.open_hours),\n openHours: participant.availability?.open_hours || [],\n name: participant.name || participant.email,\n availability: participant.availability,\n timezone: participant.timezone,\n };\n });\n return selectedParticipants;\n }\n\n /**\n * This method is essentially a workaround to check if the internals are available because\n * the unit tests in stencil do not support the internals.\n * @returns boolean\n */\n get isInternalsAvailable() {\n return this.internals !== undefined && typeof this.internals.setFormValue === 'function' && typeof this.internals.setValidity === 'function';\n }\n\n @RegisterComponent<NylasParticipantsCustomAvailability, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-participants-custom-availability',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-participants-custom-availability\" part=\"npca\">\n <div class=\"header\" part=\"npca__header\">\n <h3>{i18next.t('nylasParticipantCustomAvailability.headerTitle')}</h3>\n <p>{i18next.t('nylasParticipantCustomAvailability.headerSubTitle')}</p>\n </div>\n <div class=\"content\" part=\"npca__content\">\n <form ref={el => (this.participantFormRef = el as HTMLFormElement)}>\n {Object.keys(this.selectedParticipants).map((key, index) => {\n const participant = this.selectedParticipants[key];\n const participantOpenHours = participant.availability?.open_hours || [];\n if (!participant || !participant.name || !participant.availability) return;\n return (\n <div class=\"participant-container\" part=\"npca__participant-container\" key={`participant-conatiner-${index}`}>\n <div class=\"participant-title\" part=\"npca__participant-title\">\n <p>{i18next.t('nylasParticipantCustomAvailability.participantOpenHoursTitle', { participantName: participant.name })}</p>\n <div class=\"participant-toggle\" part=\"npca__participant-toggle--container\">\n <toggle-switch\n exportparts=\"ts_label: npca__toggle-label, ts_input: npca_toggle-input, ts_slider: npca_toggle-slider\"\n name={key}\n checked={!!participant?.openHours && participant?.openHours.length > 0}\n />\n <span\n class={`chevron ${participant.isOpen ? 'open' : 'closed'} ${participant.setCustom ? '' : 'disabled'}`}\n onClick={() => {\n if (!participant.setCustom) return;\n this.selectedParticipants[key].isOpen = !participant.isOpen;\n this.selectedParticipants = { ...this.selectedParticipants };\n }}\n >\n <chevron-icon width=\"24\" height=\"24\" />\n </span>\n </div>\n </div>\n {participant.isOpen && (\n <nylas-availability-picker\n key={index}\n name={`participant-${index}-${key}`}\n openHours={participantOpenHours}\n defaultTimezone={participant.timezone}\n hideHeader={true}\n />\n )}\n </div>\n );\n })}\n </form>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -96,6 +96,9 @@ describe('nylas-participants-custom-availability', () => {
96
96
  });
97
97
  await page.waitForChanges();
98
98
  const component = page.rootInstance;
99
+ const spy = jest.spyOn(component, 'handleValueChanged');
100
+ const valueChangedSpy = jest.fn();
101
+ page.root?.addEventListener('valueChanged', valueChangedSpy);
99
102
  const event = new CustomEvent('nylasFormSwitchToggled', {
100
103
  detail: { checked: true, name: config.participants[0].email, label: true },
101
104
  });
@@ -113,6 +116,15 @@ describe('nylas-participants-custom-availability', () => {
113
116
  },
114
117
  ]);
115
118
  expect(component.selectedParticipants[config.participants[0].email].timezone).toBe('America/Toronto');
119
+ const participantOpenHours = {
120
+ [config.participants[0].email]: component.selectedParticipants[config.participants[0].email].openHours,
121
+ };
122
+ expect(spy).toHaveBeenCalled();
123
+ expect(spy.mock.calls[0][0].detail.value).toEqual(JSON.stringify(participantOpenHours));
124
+ expect(spy.mock.calls[0][0].detail.name).toEqual(component.name);
125
+ expect(valueChangedSpy).toHaveBeenCalled();
126
+ const emittedEvent = valueChangedSpy.mock.calls[0][0];
127
+ expect(emittedEvent.detail).toEqual({ value: JSON.stringify(participantOpenHours), name: component.name });
116
128
  });
117
129
  });
118
130
  //# sourceMappingURL=nylas-participants-custom-availability.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-participants-custom-availability.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler-editor/nylas-participants-custom-availability/test/nylas-participants-custom-availability.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasParticipantsCustomAvailability } from '../nylas-participants-custom-availability';\nimport { NylasAvailabilityPicker } from '../../nylas-availability-picker/nylas-availability-picker';\nimport { h } from '@stencil/core';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\nimport { selectedConfiguration } from '@/utils/test-utils';\n\ndescribe('nylas-participants-custom-availability', () => {\n beforeEach(() => {\n const originalIntl = Intl;\n\n global.Intl = {\n ...originalIntl,\n DateTimeFormat: jest.fn().mockImplementation(() => ({\n resolvedOptions: () => ({\n timeZone: 'America/New_York',\n }),\n supportedLocalesOf: jest.fn(),\n })) as any,\n };\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('selects default timezone passed as prop', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].timezone = 'Africa/Accra';\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const form = page.root?.shadowRoot?.querySelector('.nylas-participants-custom-availability .content form');\n const participant1 = form?.querySelector('.participant-container');\n const chevron = participant1?.querySelector('.participant-title .chevron');\n chevron?.dispatchEvent(new Event('click'));\n await page.waitForChanges();\n const availabilityPicker = page.root?.shadowRoot?.querySelector('nylas-availability-picker');\n expect(availabilityPicker).not.toBeNull();\n const timezoneDropdown = availabilityPicker?.shadowRoot?.querySelector('.select-timezone select-dropdown')?.shadowRoot;\n const timezoneButton = timezoneDropdown?.querySelector('button');\n expect(timezoneButton).not.toBeNull();\n expect(timezoneButton?.textContent).toEqual('Africa / Accra');\n });\n\n it('handles nylasFormSwitchToggled event correctly when checked is true', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [{ day: 1, start: '09:00', end: '17:00' }] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: true, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual(config.participants[0].availability.open_hours);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBe(config.participants[0].timezone);\n });\n\n it('handles nylasFormSwitchToggled event correctly when checked is false', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [{ day: 1, start: '09:00', end: '17:00' }] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: false, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(false);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(false);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual([]);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBeUndefined();\n });\n\n it('toggles the state correctly', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: true, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual([\n {\n days: [1, 2, 3, 4, 5],\n end: '17:00',\n exdates: null,\n start: '09:00',\n timezone: 'America/Toronto',\n },\n ]);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBe('America/Toronto');\n });\n});\n"]}
1
+ {"version":3,"file":"nylas-participants-custom-availability.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler-editor/nylas-participants-custom-availability/test/nylas-participants-custom-availability.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasParticipantsCustomAvailability } from '../nylas-participants-custom-availability';\nimport { NylasAvailabilityPicker } from '../../nylas-availability-picker/nylas-availability-picker';\nimport { h } from '@stencil/core';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\nimport { selectedConfiguration } from '@/utils/test-utils';\n\ndescribe('nylas-participants-custom-availability', () => {\n beforeEach(() => {\n const originalIntl = Intl;\n\n global.Intl = {\n ...originalIntl,\n DateTimeFormat: jest.fn().mockImplementation(() => ({\n resolvedOptions: () => ({\n timeZone: 'America/New_York',\n }),\n supportedLocalesOf: jest.fn(),\n })) as any,\n };\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('selects default timezone passed as prop', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].timezone = 'Africa/Accra';\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const form = page.root?.shadowRoot?.querySelector('.nylas-participants-custom-availability .content form');\n const participant1 = form?.querySelector('.participant-container');\n const chevron = participant1?.querySelector('.participant-title .chevron');\n chevron?.dispatchEvent(new Event('click'));\n await page.waitForChanges();\n const availabilityPicker = page.root?.shadowRoot?.querySelector('nylas-availability-picker');\n expect(availabilityPicker).not.toBeNull();\n const timezoneDropdown = availabilityPicker?.shadowRoot?.querySelector('.select-timezone select-dropdown')?.shadowRoot;\n const timezoneButton = timezoneDropdown?.querySelector('button');\n expect(timezoneButton).not.toBeNull();\n expect(timezoneButton?.textContent).toEqual('Africa / Accra');\n });\n\n it('handles nylasFormSwitchToggled event correctly when checked is true', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [{ day: 1, start: '09:00', end: '17:00' }] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: true, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual(config.participants[0].availability.open_hours);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBe(config.participants[0].timezone);\n });\n\n it('handles nylasFormSwitchToggled event correctly when checked is false', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [{ day: 1, start: '09:00', end: '17:00' }] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: false, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(false);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(false);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual([]);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBeUndefined();\n });\n\n it('toggles the state correctly', async () => {\n const config = JSON.parse(JSON.stringify(selectedConfiguration));\n config.participants[0].availability = { open_hours: [] };\n const page = await newSpecPage({\n components: [NylasParticipantsCustomAvailability, NylasAvailabilityPicker, SelectDropdown],\n template: () => {\n return (\n <form id=\"availability-picker\">\n <nylas-participants-custom-availability name=\"participant-xyx\" selectedConfiguration={config}></nylas-participants-custom-availability>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const component = page.rootInstance;\n const spy = jest.spyOn(component, 'handleValueChanged');\n\n // Set up event listener to capture valueChanged event\n const valueChangedSpy = jest.fn();\n page.root?.addEventListener('valueChanged', valueChangedSpy);\n\n const event = new CustomEvent('nylasFormSwitchToggled', {\n detail: { checked: true, name: config.participants[0].email, label: true },\n });\n component.nylasFormSwitchToggledHandler(event);\n\n await page.waitForChanges();\n expect(component.selectedParticipants[config.participants[0].email].isOpen).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].setCustom).toBe(true);\n expect(component.selectedParticipants[config.participants[0].email].openHours).toEqual([\n {\n days: [1, 2, 3, 4, 5],\n end: '17:00',\n exdates: null,\n start: '09:00',\n timezone: 'America/Toronto',\n },\n ]);\n expect(component.selectedParticipants[config.participants[0].email].timezone).toBe('America/Toronto');\n\n // Define participantOpenHours\n const participantOpenHours = {\n [config.participants[0].email]: component.selectedParticipants[config.participants[0].email].openHours,\n };\n\n expect(spy).toHaveBeenCalled();\n expect((spy.mock.calls[0][0] as CustomEvent).detail.value).toEqual(JSON.stringify(participantOpenHours));\n expect((spy.mock.calls[0][0] as CustomEvent).detail.name).toEqual(component.name);\n\n // Verify valueChanged event was emitted\n expect(valueChangedSpy).toHaveBeenCalled();\n const emittedEvent = valueChangedSpy.mock.calls[0][0];\n expect(emittedEvent.detail).toEqual({ value: JSON.stringify(participantOpenHours), name: component.name });\n });\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler-config.js","sourceRoot":"","sources":["../../../../src/connector/shared/api/scheduler-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { NylasApiRequest } from '@/common/nylas-api-request';\nimport { NylasSchedulerConfigStoreType } from '@/stores/scheduler-config-store';\nimport { dataResponse, getCalendarRange } from '@/utils/utils';\nimport {\n Calendar,\n Configuration,\n EventDetails,\n GroupConfiguration,\n GroupEvent,\n GroupEventAPIData,\n ImportGroupEventDetails,\n ImportGroupEventResponse,\n NylasResponse,\n RecurrenceDeleteOption,\n RecurrenceUpdateOption,\n isNylasErrorResponse,\n} from '@nylas/core';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\ntype NylasSchedulerConfigAPIConnectorOptions = {\n nylasApiRequest?: NylasApiRequest;\n nylasSchedulerConfigStore: NylasSchedulerConfigStoreType;\n};\n\n/**\n * Nylas Scheduler Config API Connector\n * This class is responsible for making API requests to the Nylas API for Scheduler Configurations.\n */\nexport class NylasSchedulerConfigAPIConnector {\n private nylasApiRequest?: NylasApiRequest;\n private nylasSchedulerConfigStore: NylasSchedulerConfigStoreType;\n\n constructor({ nylasApiRequest, nylasSchedulerConfigStore }: NylasSchedulerConfigAPIConnectorOptions) {\n this.nylasApiRequest = nylasApiRequest;\n this.nylasSchedulerConfigStore = nylasSchedulerConfigStore;\n }\n\n /**\n * Get the current user.\n * @returns The current user or null if the request is not initialized.\n */\n public async currentUser() {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return null;\n }\n\n return this.nylasApiRequest.currentUser();\n }\n\n /**\n * Get the current user's calendars.\n * @returns The current user's calendars or an error if the request is not initialized.\n */\n public async getCalendars() {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching calendars: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Calendar[]>>({\n method: 'GET',\n path: `calendars`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching calendars: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching calendars: ' + response.error?.message,\n });\n }\n\n // Set the new calendars as the current calendars\n this.nylasSchedulerConfigStore.state.calendars = response.data;\n\n return dataResponse(response.data);\n }\n\n /**\n * Get a configuration by its ID.\n * @param configurationId The ID of the configuration to fetch.\n */\n public async getConfigurationById(configurationId: string, forceFetch: boolean = false) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching configuration: Nylas API Request is not initialized',\n });\n }\n\n // If the configuration is already in the store, return it\n if (!forceFetch) {\n const existingConfig = this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configurationId);\n if (existingConfig) {\n this.nylasSchedulerConfigStore.state.selectedConfiguration = existingConfig;\n return dataResponse(existingConfig);\n }\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'GET',\n path: `scheduling/configurations/${configurationId}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // If the configuration was updated, update the list of configurations\n // If it doesn't exist, add it to the list\n if (this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configurationId)) {\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.map(c => (c.id === configurationId ? response.data : c));\n } else {\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Get all configurations.\n * @returns The list of configurations or an error if the request is not initialized.\n */\n public async getConfigurations(cursor?: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching configurations: Nylas API Request is not initialized',\n });\n }\n const limit = 50;\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration[]>>({\n method: 'GET',\n path: `scheduling/configurations?limit=${limit}${cursor ? `&page_token=${cursor}` : ''}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching configurations: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching configurations: ' + response.error?.message,\n });\n }\n\n // Set the configurations in the store\n this.nylasSchedulerConfigStore.state.configurations = response.data;\n this.nylasSchedulerConfigStore.state.listConfigurationsNextCursor = response.next_cursor || null;\n return dataResponse(response.data);\n }\n\n /**\n * Get master event by its ID.\n */\n public async getMasterEventById(masterEventId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching master event: Nylas API Request is not initialized',\n });\n }\n\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const calendar_id = selectedGroupEvent?.event?.calendar_id;\n if (!calendar_id) {\n console.warn('Calendar ID is not present');\n return dataResponse(null, {\n message: 'Error fetching master event: Calendar ID is not present',\n });\n }\n const queryParamsObject = new URLSearchParams();\n queryParamsObject.append('calendar_id', calendar_id);\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<EventDetails>>({\n method: 'GET',\n path: `events/${masterEventId}?${queryParamsObject.toString()}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching master event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching master event: ' + response.error?.message,\n });\n }\n\n const masterGroupEvents = this.nylasSchedulerConfigStore.state.masterGroupEvents;\n // Set the new master event as the current master event\n if (masterGroupEvents[masterEventId]) {\n this.nylasSchedulerConfigStore.state.masterGroupEvents[masterEventId] = response.data;\n } else {\n this.nylasSchedulerConfigStore.state.masterGroupEvents = { ...masterGroupEvents, [masterEventId]: response.data };\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Create a new configuration.\n * @param configuration The configuration to create.\n * @returns The new configuration or an error if the request is not initialized.\n */\n public async createConfiguration(configuration: Omit<Partial<Configuration>, 'id'>) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error creating configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'POST',\n path: `scheduling/configurations`,\n body: configuration,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error creating configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error creating configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // Add the new configuration to the list of configurations\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n\n return dataResponse(response.data);\n }\n\n /**\n * Update an existing configuration.\n * @param configuration The configuration to update.\n * @returns The updated configuration or an error if the request is not initialized.\n */\n public async updateConfiguration(configuration: Partial<Configuration>) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error updating configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'PUT',\n path: `scheduling/configurations/${configuration.id}`,\n body: configuration,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error updating configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error updating configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // If the configuration was updated, update the list of configurations\n // If it doesn't exist, add it to the list\n if (this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configuration.id)) {\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.map(c => (c.id === configuration.id ? response.data : c));\n } else {\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Delete a configuration by its ID.\n * @param configurationId The ID of the configuration to delete.\n * @returns The deleted configuration or an error if the request is not initialized.\n */\n public async deleteConfiguration(configurationId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error deleting configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'DELETE',\n path: `scheduling/configurations/${configurationId}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error deleting configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error deleting configuration: ' + response.error?.message,\n });\n }\n\n // Remove the configuration from the list\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.filter(c => c.id !== configurationId);\n\n // If the deleted configuration was the current configuration, reset it\n if (this.nylasSchedulerConfigStore.state.selectedConfiguration?.id === configurationId) {\n this.nylasSchedulerConfigStore.resetSelectedConfiguration();\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Create a group event.\n * @param eventDetails The group event to create.\n * @returns The group event or an error if the request is not initialized.\n */\n public async createGroupEvent(eventDetails: Omit<Partial<GroupEvent>, 'id'>, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error creating group event: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'POST',\n path: `scheduling/configurations/${configurationId}/group-events`,\n body: eventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error creating group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error creating group event: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedGroupEvent = response.data;\n\n // Get the list of group events\n await this.getGroupEvents(configurationId);\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n\n /**\n * Get a list of group events for a configuration.\n */\n public async getGroupEvents(configurationId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching group events: Nylas API Request is not initialized',\n });\n }\n const queryParamsObject = new URLSearchParams();\n queryParamsObject.append('show_all', 'true');\n\n const calendarViewDateRange = this.nylasSchedulerConfigStore.state.calendarViewDateRange;\n if (calendarViewDateRange) {\n queryParamsObject.append('start_time', calendarViewDateRange.start_time);\n queryParamsObject.append('end_time', calendarViewDateRange.end_time);\n } else {\n const { startTime, endTime } = getCalendarRange(new Date().toISOString(), 'week');\n queryParamsObject.append('start_time', startTime.toString());\n queryParamsObject.append('end_time', endTime.toString());\n }\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData[]>>({\n method: 'GET',\n path: `scheduling/configurations/${configurationId}/group-events?${queryParamsObject.toString()}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching group events: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching group events: ' + response.error?.message,\n });\n }\n\n // Set the group events in the store\n this.nylasSchedulerConfigStore.state.groupEvents = response.data;\n\n return dataResponse(response.data);\n }\n\n /**\n * Update a group event.\n */\n public async updateGroupEventById(groupEventDetails: Partial<GroupEvent>, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error updating group event: Nylas API Request is not initialized',\n });\n }\n const groupEventId = groupEventDetails.id;\n delete groupEventDetails.id;\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'PATCH',\n path: `scheduling/configurations/${configurationId}/group-events/${groupEventId}`,\n body: groupEventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error updating group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error updating group event: ' + response.error?.message,\n });\n }\n\n // Set the new group event as the current group event\n this.nylasSchedulerConfigStore.state.selectedGroupEvent = response.data;\n\n // If the group event was updated, update the list of group events\n await this.getGroupEvents(configurationId);\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n /**\n * Updates a group event based on recurrence logic.\n */\n public async updateGroupEvent(groupEventDetails: GroupEvent, chosenOption: RecurrenceUpdateOption, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const masterEventId = selectedGroupEvent?.event?.master_event_id;\n const selectedGroupEventId = selectedGroupEvent?.event?.id;\n const selectedGroupEventStartTime = selectedGroupEvent?.event?.when?.start_time;\n const rruleString = selectedGroupEvent?.group_event_info?.rrule?.[0];\n const rruleStringWithoutUntil = rruleString\n ? rruleString\n .split(';')\n .filter(s => !s.startsWith('UNTIL'))\n .join(';')\n : '';\n const until = selectedGroupEventStartTime\n ? dayjs(selectedGroupEventStartTime * 1000)\n .subtract(1, 'minute')\n .format('YYYYMMDDTHHmmss[Z]')\n : '';\n if (chosenOption === 'this') {\n // Update only the current event (sub-event)\n return this.updateGroupEventById(\n {\n ...groupEventDetails,\n id: selectedGroupEventId,\n rrule: masterEventId ? undefined : groupEventDetails.rrule,\n },\n configurationId,\n );\n } else if (chosenOption === 'future' && masterEventId) {\n // 1️⃣ Create a new recurrence event with the same recurrence as before\n const newRecurrenceEvent = await this.createGroupEvent(groupEventDetails, configurationId);\n // 2️⃣ Update master event with UNTIL\n const updatedMasterEvent = {\n location: selectedGroupEvent?.event?.location,\n conferencing: selectedGroupEvent?.event?.conferencing,\n title: selectedGroupEvent?.event?.title,\n description: selectedGroupEvent?.event?.description,\n capacity: selectedGroupEvent?.group_event_info?.capacity,\n calendar_id: selectedGroupEvent?.event?.calendar_id,\n rrule: rruleStringWithoutUntil ? [rruleStringWithoutUntil + ';UNTIL=' + until] : [`RRULE:FREQ=DAILY;UNTIL=${until}`],\n };\n await this.updateGroupEventById(\n {\n ...updatedMasterEvent,\n id: masterEventId,\n },\n configurationId,\n );\n return [updatedMasterEvent, newRecurrenceEvent];\n } else if (chosenOption === 'all') {\n // Update the master event\n // Check if the when is different\n const groupEventDetailsWhen = groupEventDetails?.when;\n const selectedGroupEventWhen = selectedGroupEvent?.event?.when;\n const masterEvent = this.nylasSchedulerConfigStore.state.masterGroupEvents?.[masterEventId as string];\n let when = masterEvent?.when;\n\n if (groupEventDetailsWhen?.start_time !== selectedGroupEventWhen?.start_time) {\n when = {\n ...when,\n start_time: groupEventDetailsWhen?.start_time || when?.start_time,\n };\n }\n if (groupEventDetailsWhen?.end_time !== selectedGroupEventWhen?.end_time) {\n when = {\n ...when,\n end_time: groupEventDetailsWhen?.end_time || when?.end_time,\n };\n }\n if (groupEventDetailsWhen?.start_timezone !== selectedGroupEventWhen?.start_timezone) {\n when = {\n ...when,\n start_timezone: groupEventDetailsWhen?.start_timezone || when?.start_timezone,\n };\n }\n if (groupEventDetailsWhen?.end_timezone !== selectedGroupEventWhen?.end_timezone) {\n when = {\n ...when,\n end_timezone: groupEventDetailsWhen?.end_timezone || when?.end_timezone,\n };\n }\n\n return this.updateGroupEventById(\n {\n ...groupEventDetails,\n when: when,\n id: masterEventId,\n },\n configurationId,\n );\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n throw new Error('Invalid option');\n }\n\n /**\n * Delete a group event.\n */\n public async deleteGroupEvent(_groupEventDetails: GroupEvent, chosenOption: RecurrenceDeleteOption, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const masterEventId = selectedGroupEvent?.event?.master_event_id;\n const selectedGroupEventId = selectedGroupEvent?.event?.id;\n const selectedGroupEventStartTime = selectedGroupEvent?.event?.when?.start_time;\n const rruleString = selectedGroupEvent?.group_event_info?.rrule?.[0];\n const rruleStringWithoutUntil = rruleString\n ? rruleString\n .split(';')\n .filter(s => !s.startsWith('UNTIL'))\n .join(';')\n : '';\n const until = selectedGroupEventStartTime ? dayjs(selectedGroupEventStartTime * 1000).format('YYYYMMDDTHHmmss[Z]') : '';\n const updatedMasterEvent = {\n location: selectedGroupEvent?.event?.location,\n conferencing: selectedGroupEvent?.event?.conferencing,\n title: selectedGroupEvent?.event?.title,\n description: selectedGroupEvent?.event?.description,\n capacity: selectedGroupEvent?.group_event_info?.capacity,\n calendar_id: selectedGroupEvent?.event?.calendar_id,\n rrule: rruleStringWithoutUntil ? [rruleStringWithoutUntil + ';UNTIL=' + until] : [`RRULE:UNTIL=${until}`],\n };\n\n if (chosenOption === 'this' && selectedGroupEventId) {\n // Delete only the current event (sub-event)\n return this.deleteGroupEventById(selectedGroupEventId, configurationId);\n } else if (chosenOption === 'future' && masterEventId && selectedGroupEventId) {\n // Delete current event\n await this.deleteGroupEventById(selectedGroupEventId, configurationId);\n // Update master event with UNTIL\n return await this.updateGroupEventById(\n {\n ...updatedMasterEvent,\n id: masterEventId,\n },\n configurationId,\n );\n } else if (chosenOption === 'all' && masterEventId) {\n // Delete all events\n return this.deleteGroupEventById(masterEventId, configurationId);\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n throw new Error('Invalid option');\n }\n\n /**\n * Delete a group event by its ID.\n */\n public async deleteGroupEventById(groupEventId: string, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error deleting group event: Nylas API Request is not initialized',\n });\n }\n\n const queryParamsObject = new URLSearchParams();\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'DELETE',\n path: `scheduling/configurations/${configurationId}/group-events/${groupEventId}?calendar_id=${calendar_id}`,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error deleting group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error deleting group event: ' + response.error?.message,\n });\n }\n\n // If the group event was delete, update the list of group events\n await this.getGroupEvents(configurationId);\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(response.data);\n }\n\n /**\n * Import a group event.\n */\n public async importGroupEvent(groupEventDetails: ImportGroupEventDetails[], configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error importing group event: Nylas API Request is not initialized',\n });\n }\n\n const queryParamsObject = new URLSearchParams();\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<ImportGroupEventResponse>>({\n method: 'POST',\n path: `scheduling/configurations/${configurationId}/import-group-events?${queryParamsObject.toString()}`,\n body: groupEventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error importing group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error importing group event: ' + response.error?.message,\n });\n }\n\n // Update the list of group events\n if (response.data?.imported_events?.length > 0) {\n await this.getGroupEvents(configurationId);\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n}\n"]}
1
+ {"version":3,"file":"scheduler-config.js","sourceRoot":"","sources":["../../../../src/connector/shared/api/scheduler-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { NylasApiRequest } from '../../../common/nylas-api-request';\nimport { NylasSchedulerConfigStoreType } from '@/stores/scheduler-config-store';\nimport { dataResponse, getCalendarRange } from '@/utils/utils';\nimport {\n Calendar,\n Configuration,\n EventDetails,\n GroupConfiguration,\n GroupEvent,\n GroupEventAPIData,\n ImportGroupEventDetails,\n ImportGroupEventResponse,\n NylasResponse,\n RecurrenceDeleteOption,\n RecurrenceUpdateOption,\n isNylasErrorResponse,\n} from '@nylas/core';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\ntype NylasSchedulerConfigAPIConnectorOptions = {\n nylasApiRequest?: NylasApiRequest;\n nylasSchedulerConfigStore: NylasSchedulerConfigStoreType;\n};\n\n/**\n * Nylas Scheduler Config API Connector\n * This class is responsible for making API requests to the Nylas API for Scheduler Configurations.\n */\nexport class NylasSchedulerConfigAPIConnector {\n private nylasApiRequest?: NylasApiRequest;\n private nylasSchedulerConfigStore: NylasSchedulerConfigStoreType;\n\n constructor({ nylasApiRequest, nylasSchedulerConfigStore }: NylasSchedulerConfigAPIConnectorOptions) {\n this.nylasApiRequest = nylasApiRequest;\n this.nylasSchedulerConfigStore = nylasSchedulerConfigStore;\n }\n\n /**\n * Get the current user.\n * @returns The current user or null if the request is not initialized.\n */\n public async currentUser() {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return null;\n }\n\n return this.nylasApiRequest.currentUser();\n }\n\n /**\n * Get the current user's calendars.\n * @returns The current user's calendars or an error if the request is not initialized.\n */\n public async getCalendars() {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching calendars: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Calendar[]>>({\n method: 'GET',\n path: `calendars`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching calendars: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching calendars: ' + response.error?.message,\n });\n }\n\n // Set the new calendars as the current calendars\n this.nylasSchedulerConfigStore.state.calendars = response.data;\n\n return dataResponse(response.data);\n }\n\n /**\n * Get a configuration by its ID.\n * @param configurationId The ID of the configuration to fetch.\n */\n public async getConfigurationById(configurationId: string, forceFetch: boolean = false) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching configuration: Nylas API Request is not initialized',\n });\n }\n\n // If the configuration is already in the store, return it\n if (!forceFetch) {\n const existingConfig = this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configurationId);\n if (existingConfig) {\n this.nylasSchedulerConfigStore.state.selectedConfiguration = existingConfig;\n return dataResponse(existingConfig);\n }\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'GET',\n path: `scheduling/configurations/${configurationId}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // If the configuration was updated, update the list of configurations\n // If it doesn't exist, add it to the list\n if (this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configurationId)) {\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.map(c => (c.id === configurationId ? response.data : c));\n } else {\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Get all configurations.\n * @returns The list of configurations or an error if the request is not initialized.\n */\n public async getConfigurations(cursor?: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching configurations: Nylas API Request is not initialized',\n });\n }\n const limit = 50;\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration[]>>({\n method: 'GET',\n path: `scheduling/configurations?limit=${limit}${cursor ? `&page_token=${cursor}` : ''}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching configurations: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching configurations: ' + response.error?.message,\n });\n }\n\n // Set the configurations in the store\n this.nylasSchedulerConfigStore.state.configurations = response.data;\n this.nylasSchedulerConfigStore.state.listConfigurationsNextCursor = response.next_cursor || null;\n return dataResponse(response.data);\n }\n\n /**\n * Get master event by its ID.\n */\n public async getMasterEventById(masterEventId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching master event: Nylas API Request is not initialized',\n });\n }\n\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const calendar_id = selectedGroupEvent?.event?.calendar_id;\n if (!calendar_id) {\n console.warn('Calendar ID is not present');\n return dataResponse(null, {\n message: 'Error fetching master event: Calendar ID is not present',\n });\n }\n const queryParamsObject = new URLSearchParams();\n queryParamsObject.append('calendar_id', calendar_id);\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<EventDetails>>({\n method: 'GET',\n path: `events/${masterEventId}?${queryParamsObject.toString()}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching master event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching master event: ' + response.error?.message,\n });\n }\n\n const masterGroupEvents = this.nylasSchedulerConfigStore.state.masterGroupEvents;\n // Set the new master event as the current master event\n if (masterGroupEvents[masterEventId]) {\n this.nylasSchedulerConfigStore.state.masterGroupEvents[masterEventId] = response.data;\n } else {\n this.nylasSchedulerConfigStore.state.masterGroupEvents = { ...masterGroupEvents, [masterEventId]: response.data };\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Create a new configuration.\n * @param configuration The configuration to create.\n * @returns The new configuration or an error if the request is not initialized.\n */\n public async createConfiguration(configuration: Omit<Partial<Configuration>, 'id'>) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error creating configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'POST',\n path: `scheduling/configurations`,\n body: configuration,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error creating configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error creating configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // Add the new configuration to the list of configurations\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n\n return dataResponse(response.data);\n }\n\n /**\n * Update an existing configuration.\n * @param configuration The configuration to update.\n * @returns The updated configuration or an error if the request is not initialized.\n */\n public async updateConfiguration(configuration: Partial<Configuration>) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error updating configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'PUT',\n path: `scheduling/configurations/${configuration.id}`,\n body: configuration,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error updating configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error updating configuration: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedConfiguration = response.data;\n\n // If the configuration was updated, update the list of configurations\n // If it doesn't exist, add it to the list\n if (this.nylasSchedulerConfigStore.state.configurations.find(c => c.id === configuration.id)) {\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.map(c => (c.id === configuration.id ? response.data : c));\n } else {\n this.nylasSchedulerConfigStore.state.configurations = [...this.nylasSchedulerConfigStore.state.configurations, response.data];\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Delete a configuration by its ID.\n * @param configurationId The ID of the configuration to delete.\n * @returns The deleted configuration or an error if the request is not initialized.\n */\n public async deleteConfiguration(configurationId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error deleting configuration: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<Configuration>>({\n method: 'DELETE',\n path: `scheduling/configurations/${configurationId}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error deleting configuration: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error deleting configuration: ' + response.error?.message,\n });\n }\n\n // Remove the configuration from the list\n this.nylasSchedulerConfigStore.state.configurations = this.nylasSchedulerConfigStore.state.configurations.filter(c => c.id !== configurationId);\n\n // If the deleted configuration was the current configuration, reset it\n if (this.nylasSchedulerConfigStore.state.selectedConfiguration?.id === configurationId) {\n this.nylasSchedulerConfigStore.resetSelectedConfiguration();\n }\n\n return dataResponse(response.data);\n }\n\n /**\n * Create a group event.\n * @param eventDetails The group event to create.\n * @returns The group event or an error if the request is not initialized.\n */\n public async createGroupEvent(eventDetails: Omit<Partial<GroupEvent>, 'id'>, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error creating group event: Nylas API Request is not initialized',\n });\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'POST',\n path: `scheduling/configurations/${configurationId}/group-events`,\n body: eventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error creating group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error creating group event: ' + response.error?.message,\n });\n }\n\n // Set the new configuration as the current configuration\n this.nylasSchedulerConfigStore.state.selectedGroupEvent = response.data;\n\n // Get the list of group events\n await this.getGroupEvents(configurationId);\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n\n /**\n * Get a list of group events for a configuration.\n */\n public async getGroupEvents(configurationId: string) {\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error fetching group events: Nylas API Request is not initialized',\n });\n }\n const queryParamsObject = new URLSearchParams();\n queryParamsObject.append('show_all', 'true');\n\n const calendarViewDateRange = this.nylasSchedulerConfigStore.state.calendarViewDateRange;\n if (calendarViewDateRange) {\n queryParamsObject.append('start_time', calendarViewDateRange.start_time);\n queryParamsObject.append('end_time', calendarViewDateRange.end_time);\n } else {\n const { startTime, endTime } = getCalendarRange(new Date().toISOString(), 'week');\n queryParamsObject.append('start_time', startTime.toString());\n queryParamsObject.append('end_time', endTime.toString());\n }\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData[]>>({\n method: 'GET',\n path: `scheduling/configurations/${configurationId}/group-events?${queryParamsObject.toString()}`,\n });\n\n if (error) {\n return dataResponse(null, {\n message: 'Error fetching group events: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n return dataResponse(null, {\n message: 'Error fetching group events: ' + response.error?.message,\n });\n }\n\n // Set the group events in the store\n this.nylasSchedulerConfigStore.state.groupEvents = response.data;\n\n return dataResponse(response.data);\n }\n\n /**\n * Update a group event.\n */\n public async updateGroupEventById(groupEventDetails: Partial<GroupEvent>, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error updating group event: Nylas API Request is not initialized',\n });\n }\n const groupEventId = groupEventDetails.id;\n delete groupEventDetails.id;\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'PATCH',\n path: `scheduling/configurations/${configurationId}/group-events/${groupEventId}`,\n body: groupEventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error updating group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error updating group event: ' + response.error?.message,\n });\n }\n\n // Set the new group event as the current group event\n this.nylasSchedulerConfigStore.state.selectedGroupEvent = response.data;\n\n // If the group event was updated, update the list of group events\n await this.getGroupEvents(configurationId);\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n /**\n * Updates a group event based on recurrence logic.\n */\n public async updateGroupEvent(groupEventDetails: GroupEvent, chosenOption: RecurrenceUpdateOption, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const masterEventId = selectedGroupEvent?.event?.master_event_id;\n const selectedGroupEventId = selectedGroupEvent?.event?.id;\n const selectedGroupEventStartTime = selectedGroupEvent?.event?.when?.start_time;\n const rruleString = selectedGroupEvent?.group_event_info?.rrule?.[0];\n const rruleStringWithoutUntil = rruleString\n ? rruleString\n .split(';')\n .filter(s => !s.startsWith('UNTIL'))\n .join(';')\n : '';\n const until = selectedGroupEventStartTime\n ? dayjs(selectedGroupEventStartTime * 1000)\n .subtract(1, 'minute')\n .format('YYYYMMDDTHHmmss[Z]')\n : '';\n if (chosenOption === 'this') {\n // Update only the current event (sub-event)\n return this.updateGroupEventById(\n {\n ...groupEventDetails,\n id: selectedGroupEventId,\n rrule: masterEventId ? undefined : groupEventDetails.rrule,\n },\n configurationId,\n );\n } else if (chosenOption === 'future' && masterEventId) {\n // 1️⃣ Create a new recurrence event with the same recurrence as before\n const newRecurrenceEvent = await this.createGroupEvent(groupEventDetails, configurationId);\n // 2️⃣ Update master event with UNTIL\n const updatedMasterEvent = {\n location: selectedGroupEvent?.event?.location,\n conferencing: selectedGroupEvent?.event?.conferencing,\n title: selectedGroupEvent?.event?.title,\n description: selectedGroupEvent?.event?.description,\n capacity: selectedGroupEvent?.group_event_info?.capacity,\n calendar_id: selectedGroupEvent?.event?.calendar_id,\n rrule: rruleStringWithoutUntil ? [rruleStringWithoutUntil + ';UNTIL=' + until] : [`RRULE:FREQ=DAILY;UNTIL=${until}`],\n };\n await this.updateGroupEventById(\n {\n ...updatedMasterEvent,\n id: masterEventId,\n },\n configurationId,\n );\n return [updatedMasterEvent, newRecurrenceEvent];\n } else if (chosenOption === 'all') {\n // Update the master event\n // Check if the when is different\n const groupEventDetailsWhen = groupEventDetails?.when;\n const selectedGroupEventWhen = selectedGroupEvent?.event?.when;\n const masterEvent = this.nylasSchedulerConfigStore.state.masterGroupEvents?.[masterEventId as string];\n let when = masterEvent?.when;\n\n if (groupEventDetailsWhen?.start_time !== selectedGroupEventWhen?.start_time) {\n when = {\n ...when,\n start_time: groupEventDetailsWhen?.start_time || when?.start_time,\n };\n }\n if (groupEventDetailsWhen?.end_time !== selectedGroupEventWhen?.end_time) {\n when = {\n ...when,\n end_time: groupEventDetailsWhen?.end_time || when?.end_time,\n };\n }\n if (groupEventDetailsWhen?.start_timezone !== selectedGroupEventWhen?.start_timezone) {\n when = {\n ...when,\n start_timezone: groupEventDetailsWhen?.start_timezone || when?.start_timezone,\n };\n }\n if (groupEventDetailsWhen?.end_timezone !== selectedGroupEventWhen?.end_timezone) {\n when = {\n ...when,\n end_timezone: groupEventDetailsWhen?.end_timezone || when?.end_timezone,\n };\n }\n\n return this.updateGroupEventById(\n {\n ...groupEventDetails,\n when: when,\n id: masterEventId,\n },\n configurationId,\n );\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n throw new Error('Invalid option');\n }\n\n /**\n * Delete a group event.\n */\n public async deleteGroupEvent(_groupEventDetails: GroupEvent, chosenOption: RecurrenceDeleteOption, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n const selectedGroupEvent = this.nylasSchedulerConfigStore.state.selectedGroupEvent;\n const masterEventId = selectedGroupEvent?.event?.master_event_id;\n const selectedGroupEventId = selectedGroupEvent?.event?.id;\n const selectedGroupEventStartTime = selectedGroupEvent?.event?.when?.start_time;\n const rruleString = selectedGroupEvent?.group_event_info?.rrule?.[0];\n const rruleStringWithoutUntil = rruleString\n ? rruleString\n .split(';')\n .filter(s => !s.startsWith('UNTIL'))\n .join(';')\n : '';\n const until = selectedGroupEventStartTime ? dayjs(selectedGroupEventStartTime * 1000).format('YYYYMMDDTHHmmss[Z]') : '';\n const updatedMasterEvent = {\n location: selectedGroupEvent?.event?.location,\n conferencing: selectedGroupEvent?.event?.conferencing,\n title: selectedGroupEvent?.event?.title,\n description: selectedGroupEvent?.event?.description,\n capacity: selectedGroupEvent?.group_event_info?.capacity,\n calendar_id: selectedGroupEvent?.event?.calendar_id,\n rrule: rruleStringWithoutUntil ? [rruleStringWithoutUntil + ';UNTIL=' + until] : [`RRULE:UNTIL=${until}`],\n };\n\n if (chosenOption === 'this' && selectedGroupEventId) {\n // Delete only the current event (sub-event)\n return this.deleteGroupEventById(selectedGroupEventId, configurationId);\n } else if (chosenOption === 'future' && masterEventId && selectedGroupEventId) {\n // Delete current event\n await this.deleteGroupEventById(selectedGroupEventId, configurationId);\n // Update master event with UNTIL\n return await this.updateGroupEventById(\n {\n ...updatedMasterEvent,\n id: masterEventId,\n },\n configurationId,\n );\n } else if (chosenOption === 'all' && masterEventId) {\n // Delete all events\n return this.deleteGroupEventById(masterEventId, configurationId);\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n throw new Error('Invalid option');\n }\n\n /**\n * Delete a group event by its ID.\n */\n public async deleteGroupEventById(groupEventId: string, configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error deleting group event: Nylas API Request is not initialized',\n });\n }\n\n const queryParamsObject = new URLSearchParams();\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<GroupEventAPIData>>({\n method: 'DELETE',\n path: `scheduling/configurations/${configurationId}/group-events/${groupEventId}?calendar_id=${calendar_id}`,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error deleting group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error deleting group event: ' + response.error?.message,\n });\n }\n\n // If the group event was delete, update the list of group events\n await this.getGroupEvents(configurationId);\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(response.data);\n }\n\n /**\n * Import a group event.\n */\n public async importGroupEvent(groupEventDetails: ImportGroupEventDetails[], configurationId: string) {\n this.nylasSchedulerConfigStore.state.isLoading = true;\n\n if (!this.nylasApiRequest) {\n console.warn('Nylas API Request is not initialized');\n return dataResponse(null, {\n message: 'Error importing group event: Nylas API Request is not initialized',\n });\n }\n\n const queryParamsObject = new URLSearchParams();\n const calendar_id = (this.nylasSchedulerConfigStore.state.selectedConfiguration as GroupConfiguration)?.group_booking?.calendar_id;\n if (calendar_id) {\n queryParamsObject.append('calendar_id', calendar_id);\n }\n\n const [response, error] = await this.nylasApiRequest.request<NylasResponse<ImportGroupEventResponse>>({\n method: 'POST',\n path: `scheduling/configurations/${configurationId}/import-group-events?${queryParamsObject.toString()}`,\n body: groupEventDetails,\n });\n\n if (error) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error importing group event: ' + error.message,\n });\n }\n\n if (isNylasErrorResponse(response)) {\n this.nylasSchedulerConfigStore.state.isLoading = false;\n return dataResponse(null, {\n message: 'Error importing group event: ' + response.error?.message,\n });\n }\n\n // Update the list of group events\n if (response.data?.imported_events?.length > 0) {\n await this.getGroupEvents(configurationId);\n }\n\n this.nylasSchedulerConfigStore.state.isLoading = false;\n\n return dataResponse(response.data);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AA8FA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,uCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAmWD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAQD,MAAM,CAAN,IAAY,kBAWX;AAXD,WAAY,kBAAkB;IAC5B,qEAA+C,CAAA;IAC/C,yDAAmC,CAAA;IACnC,mEAA6C,CAAA;IAC7C,mEAA6C,CAAA;IAC7C,qDAA+B,CAAA;IAC/B,yCAAmB,CAAA;IACnB,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,2DAAqC,CAAA;IACrC,mDAA6B,CAAA;AAC/B,CAAC,EAXW,kBAAkB,KAAlB,kBAAkB,QAW7B","sourcesContent":["export interface NylasResponse<Data = any> {\n request_id: string;\n data?: Data;\n error?: {\n message: string;\n type: string;\n };\n}\n\n// Avaliability\nexport interface OpenHours {\n days: number[];\n exDates: string[];\n timezone: string;\n start: string;\n end: string;\n}\n\nexport interface MeetingBuffer {\n before: number;\n after: number;\n}\n\n// Scheduling\nexport interface UpdateConfiguration extends Omit<Configuration, 'id'> {}\n\nexport interface ParticipantAvailability {\n calendar_ids: string[];\n open_hours?: OpenHours[];\n}\n\nexport type NylasSchedulerBookingParticipant = { name: string; email: string; nameReadOnly?: boolean; emailReadOnly?: boolean };\n\nexport type NylasSchedulerBookingData = {\n primaryParticipant: NylasSchedulerBookingParticipant;\n startTime?: Date;\n endTime?: Date;\n timezone?: string;\n language?: string;\n guests?: NylasSchedulerBookingParticipant[];\n additionalFields?: Record<\n string,\n {\n value: string;\n type?: string;\n readOnly?: boolean;\n }\n >;\n};\n\nexport type OpenHour = {\n days: number[]; // [1, 2, 3, 4, 5]\n start: string; // \"09:00\"\n end: string; // \"17:00\"\n timezone: string; // \"America/Los_Angeles\"\n};\n\nexport type Timeslot = {\n start_time: Date;\n end_time: Date;\n emails?: string[];\n capacity?: number;\n event_id?: string;\n master_id?: string;\n calendar_id?: string;\n};\n\nexport type ThemeConfig = Partial<{\n '--nylas-primary': string;\n '--nylas-info': string;\n '--nylas-success': string;\n '--nylas-warning': string;\n '--nylas-error': string;\n '--nylas-error-pressed': string;\n '--nylas-base-0': string;\n '--nylas-base-25': string;\n '--nylas-base-50': string;\n '--nylas-base-100': string;\n '--nylas-base-200': string;\n '--nylas-base-300': string;\n '--nylas-base-400': string;\n '--nylas-base-500': string;\n '--nylas-base-600': string;\n '--nylas-base-700': string;\n '--nylas-base-800': string;\n '--nylas-base-900': string;\n '--nylas-base-950': string;\n '--nylas-font-family': string;\n '--nylas-font-size': string;\n '--nylas-border-radius': string;\n '--nylas-border-radius-2x': string;\n '--nylas-border-radius-3x': string;\n}>;\n\nexport enum NotificationType {\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Success = 'success',\n}\n\nexport type Notification = {\n id: string;\n type: NotificationType;\n title: string;\n code?: number;\n category: string;\n description?: string;\n ttl?: number | 'none';\n};\n\nexport type BookingType = 'booking' | 'organizer-confirmation' | 'custom-confirmation';\n\nexport type AvailabilityMethod = 'max-fairness' | 'max-availability' | 'collective';\n\nexport type ConferenceProvider = 'GoogleMeetConferenceProvider' | 'MicrosoftTeamsConferenceProvider' | 'ZoomConferenceProvider' | 'OnlineMeetingProviderMicrosoftTeams';\n\nexport type ReminderMethod = 'email' | 'webhook';\n\nexport interface Rules {\n availability_method: AvailabilityMethod;\n buffer: MeetingBuffer;\n default_open_hours: OpenHours[];\n round_robin_group_id: string;\n}\n\nexport interface ConferenceDetail {\n meeting_code?: string; // zoom, GTM, microsoft teams\n password?: string; // zoom, webex\n url?: string; // zoom, webex, GTM, meet, microsoft teams\n pin?: string; // webex, meet\n phone?: string[]; // GTM, meet, microsoft teams\n}\n\nexport interface Conference {\n provider?: ConferenceProvider;\n details?: ConferenceDetail;\n autocreate?: { [key: string]: any };\n}\n\nexport interface ParticipantBooking {\n calendar_id: string;\n}\n\nexport interface Participant {\n email: string;\n name?: string;\n is_organizer?: boolean;\n availability?: ParticipantAvailability;\n booking?: ParticipantBooking;\n}\n\nexport interface EventReminder {\n type: ReminderMethod;\n minutes_before_event: number;\n recipient?: string;\n email_subject?: string;\n}\n\nexport interface Availability {\n duration_minutes: number;\n interval_minutes?: number;\n round_to?: number;\n availability_rules?: Rules;\n}\n\nexport interface EventBooking {\n title: string;\n description?: string;\n location?: string;\n timezone?: string;\n booking_type: BookingType;\n conferencing?: Conference;\n hide_participants?: boolean;\n disable_emails?: boolean;\n reminders?: EventReminder[];\n}\n\nexport interface Appearance {\n color?: string;\n submit_button_label?: string;\n thank_you_message?: string;\n company_logo_url?: string;\n}\n\nexport interface Scheduler {\n available_days_in_future?: number;\n min_cancellation_notice: number;\n min_booking_notice?: number;\n rescheduling_url?: string;\n cancellation_url?: string;\n organizer_confirmation_url?: string;\n cancellation_policy?: string;\n hide_additional_guests?: boolean;\n hide_cancellation_options?: boolean;\n hide_rescheduling_options?: boolean;\n additional_fields?: Record<string, AdditionalFields>;\n email_template?: EmailTemplate;\n confirmation_redirect_url?: string;\n}\nexport interface AdditionalFields {\n type: string;\n required: boolean;\n order: number;\n options?: string[];\n label?: string;\n default?: string;\n}\n\nexport interface EmailTemplate {\n logo: string;\n booking_confirmed: BookingConfirmed;\n show_nylas_branding: boolean;\n}\n\nexport interface BookingConfirmed {\n title: string;\n body: string;\n}\n\nexport interface Configuration {\n id: string;\n version: string;\n type?: string;\n requires_session_auth?: boolean;\n participants: Participant[];\n availability: Availability;\n event_booking: EventBooking;\n scheduler: Partial<Scheduler>;\n slug: string;\n appearance: Appearance;\n name: string;\n}\n\nexport interface GroupBooking {\n booking_type: BookingType; // Only 'booking' is supported\n disable_emails?: boolean;\n reminders?: EventReminder[];\n conferencing?: Conference;\n calendar_id: string;\n default_capacity: number;\n}\n\nexport interface GroupConfiguration {\n id: string;\n name: string;\n slug: string;\n requires_session_auth?: boolean;\n type: 'group';\n group_booking: GroupBooking;\n scheduler: Scheduler;\n appearance: Appearance;\n}\n\nexport interface Creator {\n name: string;\n email: string;\n}\nexport interface AdditionalParticipant {\n name: string;\n email: string;\n calendars: {\n id: string;\n name: string;\n object?: 'calendar';\n is_primary?: boolean;\n is_owned_by_user?: boolean;\n read_only?: boolean;\n timezone?: string;\n }[];\n}\n\nexport interface GroupEvent {\n id?: string;\n title: string;\n busy: boolean;\n participants: NylasSchedulerBookingParticipant[];\n resources: {\n name: string;\n email: string;\n }[];\n description: string;\n when: {\n start_time: number;\n end_time: number;\n start_timezone?: string;\n end_timezone?: string;\n };\n location: string;\n rrule: string[];\n capacity: number;\n}\n\nexport type RecurrenceUpdateOption = 'this' | 'future' | 'all';\nexport type RecurrenceDeleteOption = 'this' | 'future' | 'all';\n\nexport type Snapshot = {\n busy: boolean;\n calendar_id: string;\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: {\n email: string;\n status: string;\n }[];\n resources: any[];\n read_only: boolean;\n recurrence: string[];\n reminders: {\n use_default: boolean;\n overrides: any[];\n };\n title: string;\n description?: string;\n location?: string;\n conferencing?: Conference;\n visibility: string;\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n grant_id: string;\n id: string;\n object: string;\n status: string;\n when: {\n start_timezone: string;\n end_timezone: string;\n object: string;\n start_time: number; // Unix timestamp\n end_time: number; // Unix timestamp\n };\n created_at: number; // Unix timestamp\n updated_at: number; // Unix timestamp\n};\n\nexport interface GroupEventAPIData {\n event: EventDetails;\n group_event_info?: GroupEventInfo;\n}\n\nexport type EventDetails = {\n busy: boolean;\n calendar_id: string;\n conferencing: {\n provider: ConferenceProvider;\n details: {\n meeting_code: string;\n url: string;\n pin: string;\n phone: string[];\n };\n };\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: Array<{\n email: string;\n status: 'yes' | 'no' | 'noreply';\n comment?: string;\n }>;\n resources: string[];\n read_only: boolean;\n reminders: {\n use_default: boolean;\n overrides: Array<{\n method?: string;\n minutes?: number;\n }>;\n };\n title: string;\n description?: string;\n location?: string;\n visibility: 'default' | 'public' | 'private';\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n master_event_id: string;\n color_id: string;\n grant_id: string;\n id: string;\n object: 'event';\n status: 'confirmed' | 'tentative' | 'cancelled';\n when: {\n start_timezone: string;\n end_timezone: string;\n object: 'timespan';\n start_time: number;\n end_time: number;\n };\n created_at: number;\n updated_at: number;\n original_start_time: number;\n};\n\nexport type GroupEventInfo = {\n event_id: string;\n calendar_id: string;\n master_id: string;\n config_id: string;\n capacity: number;\n type: 'updated_event' | 'single_event' | 'master_event';\n booked: boolean;\n finished: boolean;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n snapshot: any | null;\n snapshot_expires_at: number;\n rrule: string[] | null;\n exceptions: {\n event_id: string;\n capacity: number;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n }[];\n};\n\nexport type ImportGroupEventDetails = {\n event_id: string;\n calendar_id: string;\n capacity: number;\n participants: Participant[];\n organizer: {\n name: string;\n email: string;\n };\n};\n\nexport type ImportGroupEventResponse = {\n imported_events: string[];\n import_failed: {\n event_id: string;\n reason: string;\n }[];\n};\n\nexport enum ErrorCategory {\n Component = 'component',\n Api = 'api',\n Auth = 'auth',\n}\n\nexport interface ErrorDetails {\n title: string;\n message: string;\n category: ErrorCategory;\n}\n\nexport enum ComponentErrorType {\n endtime_not_in_future = 'endtime_not_in_future',\n no_booking_info = 'no_booking_info',\n no_timeslot_selected = 'no_timeslot_selected',\n no_timezone_selected = 'no_timezone_selected',\n no_booking_id = 'no_booking_id',\n no_salt = 'no_salt',\n invalid_start_time = 'invalid_start_time',\n invalid_end_time = 'invalid_end_time',\n invalid_timezone = 'invalid_timezone',\n no_config_id = 'no_config_id',\n}\n\nexport interface KeyPoint {\n time: number;\n text: string;\n active?: boolean;\n}"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AA8FA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,uCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAmWD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAQD,MAAM,CAAN,IAAY,kBAWX;AAXD,WAAY,kBAAkB;IAC5B,qEAA+C,CAAA;IAC/C,yDAAmC,CAAA;IACnC,mEAA6C,CAAA;IAC7C,mEAA6C,CAAA;IAC7C,qDAA+B,CAAA;IAC/B,yCAAmB,CAAA;IACnB,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,2DAAqC,CAAA;IACrC,mDAA6B,CAAA;AAC/B,CAAC,EAXW,kBAAkB,KAAlB,kBAAkB,QAW7B","sourcesContent":["export interface NylasResponse<Data = any> {\n request_id: string;\n data?: Data;\n error?: {\n message: string;\n type: string;\n };\n}\n\n// Avaliability\nexport interface OpenHours {\n days: number[];\n exDates: string[];\n timezone: string;\n start: string;\n end: string;\n}\n\nexport interface MeetingBuffer {\n before: number;\n after: number;\n}\n\n// Scheduling\nexport interface UpdateConfiguration extends Omit<Configuration, 'id'> {}\n\nexport interface ParticipantAvailability {\n calendar_ids: string[];\n open_hours?: OpenHours[];\n}\n\nexport type NylasSchedulerBookingParticipant = { name: string; email: string; nameReadOnly?: boolean; emailReadOnly?: boolean };\n\nexport type NylasSchedulerBookingData = {\n primaryParticipant: NylasSchedulerBookingParticipant;\n startTime?: Date;\n endTime?: Date;\n timezone?: string;\n language?: string;\n guests?: NylasSchedulerBookingParticipant[];\n additionalFields?: Record<\n string,\n {\n value: string;\n type?: string;\n readOnly?: boolean;\n }\n >;\n};\n\nexport type OpenHour = {\n days: number[]; // [1, 2, 3, 4, 5]\n start: string; // \"09:00\"\n end: string; // \"17:00\"\n timezone: string; // \"America/Los_Angeles\"\n};\n\nexport type Timeslot = {\n start_time: Date;\n end_time: Date;\n emails?: string[];\n capacity?: number;\n event_id?: string;\n master_id?: string;\n calendar_id?: string;\n};\n\nexport type ThemeConfig = Partial<{\n '--nylas-primary': string;\n '--nylas-info': string;\n '--nylas-success': string;\n '--nylas-warning': string;\n '--nylas-error': string;\n '--nylas-error-pressed': string;\n '--nylas-base-0': string;\n '--nylas-base-25': string;\n '--nylas-base-50': string;\n '--nylas-base-100': string;\n '--nylas-base-200': string;\n '--nylas-base-300': string;\n '--nylas-base-400': string;\n '--nylas-base-500': string;\n '--nylas-base-600': string;\n '--nylas-base-700': string;\n '--nylas-base-800': string;\n '--nylas-base-900': string;\n '--nylas-base-950': string;\n '--nylas-font-family': string;\n '--nylas-font-size': string;\n '--nylas-border-radius': string;\n '--nylas-border-radius-2x': string;\n '--nylas-border-radius-3x': string;\n}>;\n\nexport enum NotificationType {\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Success = 'success',\n}\n\nexport type Notification = {\n id: string;\n type: NotificationType;\n title: string;\n code?: number;\n category: string;\n description?: string;\n ttl?: number | 'none';\n};\n\nexport type BookingType = 'booking' | 'organizer-confirmation' | 'custom-confirmation';\n\nexport type AvailabilityMethod = 'max-fairness' | 'max-availability' | 'collective';\n\nexport type ConferenceProvider = 'GoogleMeetConferenceProvider' | 'MicrosoftTeamsConferenceProvider' | 'ZoomConferenceProvider' | 'OnlineMeetingProviderMicrosoftTeams';\n\nexport type ReminderMethod = 'email' | 'webhook';\n\nexport interface Rules {\n availability_method: AvailabilityMethod;\n buffer: MeetingBuffer;\n default_open_hours: OpenHours[];\n round_robin_group_id: string;\n}\n\nexport interface ConferenceDetail {\n meeting_code?: string; // zoom, GTM, microsoft teams\n password?: string; // zoom, webex\n url?: string; // zoom, webex, GTM, meet, microsoft teams\n pin?: string; // webex, meet\n phone?: string[]; // GTM, meet, microsoft teams\n}\n\nexport interface Conference {\n provider?: ConferenceProvider;\n details?: ConferenceDetail;\n autocreate?: { [key: string]: any };\n}\n\nexport interface ParticipantBooking {\n calendar_id: string;\n}\n\nexport interface Participant {\n email: string;\n name?: string;\n is_organizer?: boolean;\n availability?: ParticipantAvailability;\n booking?: ParticipantBooking;\n}\n\nexport interface EventReminder {\n type: ReminderMethod;\n minutes_before_event: number;\n recipient?: string;\n email_subject?: string;\n}\n\nexport interface Availability {\n duration_minutes: number;\n interval_minutes?: number;\n round_to?: number;\n availability_rules?: Rules;\n}\n\nexport interface EventBooking {\n title: string;\n description?: string;\n location?: string;\n timezone?: string;\n booking_type: BookingType;\n conferencing?: Conference;\n hide_participants?: boolean;\n disable_emails?: boolean;\n reminders?: EventReminder[];\n}\n\nexport interface Appearance {\n color?: string;\n submit_button_label?: string;\n thank_you_message?: string;\n company_logo_url?: string;\n}\n\nexport interface Scheduler {\n available_days_in_future?: number;\n min_cancellation_notice: number;\n min_booking_notice?: number;\n rescheduling_url?: string;\n cancellation_url?: string;\n organizer_confirmation_url?: string;\n cancellation_policy?: string;\n hide_additional_guests?: boolean;\n hide_cancellation_options?: boolean;\n hide_rescheduling_options?: boolean;\n additional_fields?: Record<string, AdditionalFields>;\n email_template?: EmailTemplate;\n confirmation_redirect_url?: string;\n}\nexport interface AdditionalFields {\n type: string;\n required: boolean;\n order: number;\n options?: string[];\n label?: string;\n default?: string;\n}\n\nexport interface EmailTemplate {\n logo: string;\n booking_confirmed: BookingConfirmed;\n show_nylas_branding: boolean;\n}\n\nexport interface BookingConfirmed {\n title: string;\n body: string;\n}\n\nexport interface Configuration {\n id: string;\n version: string;\n type?: string;\n requires_session_auth?: boolean;\n participants: Participant[];\n availability: Availability;\n event_booking: EventBooking;\n scheduler: Partial<Scheduler>;\n slug: string;\n appearance: Appearance;\n name: string;\n}\n\nexport interface GroupBooking {\n booking_type: BookingType; // Only 'booking' is supported\n disable_emails?: boolean;\n reminders?: EventReminder[];\n conferencing?: Conference;\n calendar_id: string;\n default_capacity: number;\n}\n\nexport interface GroupConfiguration {\n id: string;\n name: string;\n slug: string;\n requires_session_auth?: boolean;\n type: 'group';\n group_booking: GroupBooking;\n scheduler: Scheduler;\n appearance: Appearance;\n}\n\nexport interface Creator {\n name: string;\n email: string;\n}\nexport interface AdditionalParticipant {\n name: string;\n email: string;\n calendars: {\n id: string;\n name: string;\n object?: 'calendar';\n is_primary?: boolean;\n is_owned_by_user?: boolean;\n read_only?: boolean;\n timezone?: string;\n }[];\n}\n\nexport interface GroupEvent {\n id?: string;\n title: string;\n busy: boolean;\n participants: NylasSchedulerBookingParticipant[];\n resources: {\n name: string;\n email: string;\n }[];\n description: string;\n when: {\n start_time: number;\n end_time: number;\n start_timezone?: string;\n end_timezone?: string;\n };\n location: string;\n rrule: string[];\n capacity: number;\n}\n\nexport type RecurrenceUpdateOption = 'this' | 'future' | 'all';\nexport type RecurrenceDeleteOption = 'this' | 'future' | 'all';\n\nexport type Snapshot = {\n busy: boolean;\n calendar_id: string;\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: {\n email: string;\n status: string;\n }[];\n resources: any[];\n read_only: boolean;\n recurrence: string[];\n reminders: {\n use_default: boolean;\n overrides: any[];\n };\n title: string;\n description?: string;\n location?: string;\n conferencing?: Conference;\n visibility: string;\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n grant_id: string;\n id: string;\n object: string;\n status: string;\n when: {\n start_timezone: string;\n end_timezone: string;\n object: string;\n start_time: number; // Unix timestamp\n end_time: number; // Unix timestamp\n };\n created_at: number; // Unix timestamp\n updated_at: number; // Unix timestamp\n};\n\nexport interface GroupEventAPIData {\n event: EventDetails;\n group_event_info?: GroupEventInfo;\n}\n\nexport type EventDetails = {\n busy: boolean;\n calendar_id: string;\n conferencing: {\n provider: ConferenceProvider;\n details: {\n meeting_code: string;\n url: string;\n pin: string;\n phone: string[];\n };\n };\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: Array<{\n email: string;\n status: 'yes' | 'no' | 'noreply';\n comment?: string;\n }>;\n resources: string[];\n read_only: boolean;\n reminders: {\n use_default: boolean;\n overrides: Array<{\n method?: string;\n minutes?: number;\n }>;\n };\n title: string;\n description?: string;\n location?: string;\n visibility: 'default' | 'public' | 'private';\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n master_event_id: string;\n color_id: string;\n grant_id: string;\n id: string;\n object: 'event';\n status: 'confirmed' | 'tentative' | 'cancelled';\n when: {\n start_timezone: string;\n end_timezone: string;\n object: 'timespan';\n start_time: number;\n end_time: number;\n };\n created_at: number;\n updated_at: number;\n original_start_time: number;\n};\n\nexport type GroupEventInfo = {\n event_id: string;\n calendar_id: string;\n master_id: string;\n config_id: string;\n capacity: number;\n type: 'updated_event' | 'single_event' | 'master_event';\n booked: boolean;\n finished: boolean;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n snapshot: any | null;\n snapshot_expires_at: number;\n rrule: string[] | null;\n exceptions: {\n event_id: string;\n capacity: number;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n }[];\n};\n\nexport type ImportGroupEventDetails = {\n event_id: string;\n calendar_id: string;\n capacity: number;\n participants: Participant[];\n organizer: {\n name: string;\n email: string;\n };\n};\n\nexport type ImportGroupEventResponse = {\n imported_events: string[];\n import_failed: {\n event_id: string;\n reason: string;\n }[];\n};\n\nexport enum ErrorCategory {\n Component = 'component',\n Api = 'api',\n Auth = 'auth',\n}\n\nexport interface ErrorDetails {\n title: string;\n message: string;\n category: ErrorCategory;\n}\n\nexport enum ComponentErrorType {\n endtime_not_in_future = 'endtime_not_in_future',\n no_booking_info = 'no_booking_info',\n no_timeslot_selected = 'no_timeslot_selected',\n no_timezone_selected = 'no_timezone_selected',\n no_booking_id = 'no_booking_id',\n no_salt = 'no_salt',\n invalid_start_time = 'invalid_start_time',\n invalid_end_time = 'invalid_end_time',\n invalid_timezone = 'invalid_timezone',\n no_config_id = 'no_config_id',\n}\n\nexport interface KeyPoint {\n time: number;\n text: string;\n active?: boolean;\n}\n"]}
@@ -2871,9 +2871,7 @@ const NylasBookingFormConfig = proxyCustomElement(class NylasBookingFormConfig e
2871
2871
  if (name === 'add-field') {
2872
2872
  const field = FIELD_TYPES.find(f => f.type === value);
2873
2873
  const maxOrder = Math.max(...this.formFields.map(f => f.order));
2874
- const existingFieldKeys = this.formFields
2875
- .filter(f => f.type === field.type && f.key !== undefined)
2876
- .map(f => f.key);
2874
+ const existingFieldKeys = this.formFields.filter(f => f.type === field.type && f.key !== undefined).map(f => f.key);
2877
2875
  const next = this.findNextMissingNumber(existingFieldKeys);
2878
2876
  const newField = { ...field, label: field.label, key: `${field.type}_${field.label.split(' ').join('-')}_${next}`, order: maxOrder + 1 };
2879
2877
  this.formFields = [...this.formFields, newField];
@@ -3007,13 +3005,13 @@ const NylasBookingFormConfig = proxyCustomElement(class NylasBookingFormConfig e
3007
3005
  this.formFieldsChangedHandler(this.formFields);
3008
3006
  }
3009
3007
  render() {
3010
- return (h(Host, { key: '979fb00eb59c917ae078bc7485f2e7a771a80253' }, h("div", { key: '3116eff470816482ad76da6fc0b1ecf815d6a0c0', class: "nylas-booking-form-config", part: "nbfc" }, h("div", { key: '6a9ffc262d6b9c69adb7abb4ca6b6cc3740e0faa', class: "header", part: "nbfc__header" }, h("div", { key: 'fc7a5a618a5e6b5cfc8f228eb70a246a42db6e6c', class: "header_text" }, h("h3", { key: 'c115277fa4a00de5bb0290c15618e763391f083c' }, instance.t('nylasBookingFormConfig.headerTitle')), h("p", { key: '5e2dde9a7cd55433bd5578e832993b9eeed0aacc' }, instance.t('nylasBookingFormConfig.headerSubTitle'))), h("div", { key: '0a4308a32e2c06d5010a8eb9865b1d17e9a78b07', class: "header_action" }, h("select-dropdown", { key: '2ed2353ec43bae53973ff9126dcda12315d7c051', name: "add-field", exportparts: "sd_dropdown: nbfc__add_field, sd_dropdown-button: nbfc__add_field-button, sd_dropdown-content: nbfc__add_field-dropdown-content", options: this.fieldTypes, withSearch: false, withChevron: false, dropdownButtonText: instance.t('nylasBookingFormConfig.dropdownButtonText') }, h("span", { key: '3e1bbe733b46cde957fea99873615eed2f5b9a00', slot: "select-icon" }, h("plus-icon", { key: '7d5b7b9d55ead7f14777cf9c1baab7d7b9509ee8', width: "15", height: "15" }))))), h("div", { key: 'fa3b2480584501e345c2b940d0b3f01d4aeb365a', class: "content" }, h("div", { key: 'e009e7c11d3362f3d7c3e798235c7fb8d97fd2bc', class: "additional_fields static_fields", part: "nbfc__static_fields" }, this.staticFields.map((field, i) => {
3008
+ return (h(Host, { key: 'e0f16996249394ba2712e81a49cf36ea6564ec05' }, h("div", { key: '4dd44f9c72c8d0a3aeee984dfd84f17bff90625a', class: "nylas-booking-form-config", part: "nbfc" }, h("div", { key: '197adcf139b9039a986ddeb041c515094cebfd6c', class: "header", part: "nbfc__header" }, h("div", { key: 'b6c7ee7740f34772de476dd305fed249b44d2de6', class: "header_text" }, h("h3", { key: '47746821f80cde68397416f80082eb7010e7e6f4' }, instance.t('nylasBookingFormConfig.headerTitle')), h("p", { key: 'ca58778afafc99cf229c910c38a6267cb06094c5' }, instance.t('nylasBookingFormConfig.headerSubTitle'))), h("div", { key: '0d1ed1dc651aae41a02f25d4bef8a498a7efea6a', class: "header_action" }, h("select-dropdown", { key: 'be4c11be458c04dae1013cb9f90be5ea60969dd7', name: "add-field", exportparts: "sd_dropdown: nbfc__add_field, sd_dropdown-button: nbfc__add_field-button, sd_dropdown-content: nbfc__add_field-dropdown-content", options: this.fieldTypes, withSearch: false, withChevron: false, dropdownButtonText: instance.t('nylasBookingFormConfig.dropdownButtonText') }, h("span", { key: '2551ed804324718f1a2bf588a331c2c0a651d8c3', slot: "select-icon" }, h("plus-icon", { key: '98cdb1849e4cfa5dd62eb0d25b09018f23d6c55d', width: "15", height: "15" }))))), h("div", { key: 'fe7c1bdba3fc45544f7a9346142051e2626c9f0d', class: "content" }, h("div", { key: 'fd253106a51dd9bdb6745c2775f78d30f8f7a2e1', class: "additional_fields static_fields", part: "nbfc__static_fields" }, this.staticFields.map((field, i) => {
3011
3009
  return (h("div", { class: `form-field draggable ${field.readonly && 'fixed'}`, part: "nbfc__form_field", key: i }, h("div", { class: "form-field_header", part: "nbfc__form_field-header" }, h("span", { class: "dragable" }, h("dragable-icon", { width: "24", height: "25" })), h("div", { class: "form-field_header_text" }, h("h4", null, instance.t(`nylasBookingFormConfig.fieldLabel.${field.fieldLabelKey}`)), h("p", null, field.typeLabel)), h("div", { class: "form-field_header_actions" }, h("span", { class: `is-required` }, field.required ? instance.t('required') : instance.t('optional')), h("span", { class: `chevron ${field.isOpen ? 'open' : 'closed'}`, onClick: () => {
3012
3010
  this.fieldToggle(i);
3013
3011
  } }, h("chevron-icon", { width: "24", height: "24" })))), h("div", { class: `form-field_content ${!field.isOpen && 'hidden'}`, part: "nbfc__form_field-content" }, h("div", { class: "inputs" }, h("input-component", { class: 'label-input', name: `${i}`, key: i, label: instance.t('nylasBookingFormConfig.label'), required: false, readOnly: field.readonly, defaultValue: field.label }, h("div", { class: "required-input", slot: "additional-input" }, h("input", { type: "checkbox", name: `required_${field.order}`, id: `required_${field.order}`, onClick: () => {
3014
3012
  this.fieldRequired(i);
3015
3013
  }, checked: field.required, disabled: field.readonly }), h("label", { htmlFor: `required_${field.order}`, "aria-label": "Required" }, instance.t('required'))))))));
3016
- })), h("div", { key: '6e3e43cef3f490b42eed34b3ad87c82854dd07c8', id: "fields", class: "additional_fields", part: "nbfc__additional_fields" }, this.formFields?.map((field, i) => {
3014
+ })), h("div", { key: '825ca08b506c8016f3d8206489bdeeee4b789c82', id: "fields", class: "additional_fields", part: "nbfc__additional_fields" }, this.formFields?.map((field, i) => {
3017
3015
  return (h("div", { class: `form-field draggable ${field?.readonly ? 'fixed' : ''}`, part: "nbfc__form_field", key: field.key }, h("div", { class: "form-field_header", part: "nbfc__form_field-header" }, h("span", { class: "dragable" }, h("dragable-icon", { width: "24", height: "25" })), h("div", { class: "form-field_header_text" }, h("h4", null, instance.t(`nylasBookingFormConfig.fieldLabel.${field.fieldLabelKey}`)), h("p", null, field.typeLabel)), h("div", { class: "form-field_header_actions" }, h("span", { class: `is-required` }, field.required ? instance.t('required') : instance.t('optional')), !field.readonly && (h("button", { onClick: () => {
3018
3016
  const title = this.watchFields.title;
3019
3017
  const description = this.watchFields.description;