@nylas/web-elements 2.5.0-canary-20260306042320 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +3417 -3413
- package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +370 -370
- package/dist/cjs/checkmark-icon_15.cjs.entry.js +3 -0
- package/dist/cjs/checkmark-icon_15.cjs.entry.js.map +1 -1
- package/dist/cjs/feedbackSync-CwO9ANWC.js.map +1 -1
- package/dist/cjs/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.cjs.js.map +1 -1
- package/dist/cjs/google-logo-icon_6.cjs.entry.js +19 -11
- package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
- package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +1 -1
- package/dist/cjs/nylas-scheduling.cjs.entry.js +5 -1
- package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
- package/dist/cjs/nylas-scheduling.entry.cjs.js.map +1 -1
- package/dist/cjs/{version-Co332DgG.js → version-DGl1NcN3.js} +3 -3
- package/dist/{esm/version-ClDvNLDf.js.map → cjs/version-DGl1NcN3.js.map} +1 -1
- package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js +3 -0
- package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js.map +1 -1
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +12 -5
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js.map +1 -1
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js +6 -5
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js.map +1 -1
- package/dist/collection/connector/shared/api/scheduler.js +4 -0
- package/dist/collection/connector/shared/api/scheduler.js.map +1 -1
- package/dist/collection/types/index.js.map +1 -1
- package/dist/collection/version.js +1 -1
- package/dist/collection/version.js.map +1 -1
- package/dist/components/nylas-additional-participants.js +1 -1
- package/dist/components/nylas-editor-tabs-group.js +1 -1
- package/dist/components/nylas-editor-tabs.js +1 -1
- package/dist/components/nylas-event-calendar.js +1 -1
- package/dist/components/nylas-scheduler-editor.js +5 -5
- package/dist/components/nylas-scheduling.js +5 -1
- package/dist/components/nylas-scheduling.js.map +1 -1
- package/dist/components/{p-G4bkKoDi.js → p-BGmb8YG2.js} +3 -3
- package/dist/components/{p-G4bkKoDi.js.map → p-BGmb8YG2.js.map} +1 -1
- package/dist/components/{p-D2ELUj7W.js → p-Bt9X-jsP.js} +11 -10
- package/dist/components/p-Bt9X-jsP.js.map +1 -0
- package/dist/components/p-C1VNIgoH.js.map +1 -1
- package/dist/components/{p-BI99l5Mr.js → p-CHvPIGe5.js} +3 -3
- package/dist/components/{p-BI99l5Mr.js.map → p-CHvPIGe5.js.map} +1 -1
- package/dist/components/{p-DqM3uP9H.js → p-Cuf3Ml16.js} +5 -2
- package/dist/components/p-Cuf3Ml16.js.map +1 -0
- package/dist/components/{p-D1kxrvKw.js → p-DBJIEtRG.js} +16 -9
- package/dist/components/p-DBJIEtRG.js.map +1 -0
- package/dist/esm/checkmark-icon_15.entry.js +3 -0
- package/dist/esm/checkmark-icon_15.entry.js.map +1 -1
- package/dist/esm/feedbackSync-CquJ7U5v.js.map +1 -1
- package/dist/esm/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.js.map +1 -1
- package/dist/esm/google-logo-icon_6.entry.js +19 -11
- package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
- package/dist/esm/nylas-scheduler-editor.entry.js +1 -1
- package/dist/esm/nylas-scheduling.entry.js +5 -1
- package/dist/esm/nylas-scheduling.entry.js.map +1 -1
- package/dist/esm/{version-ClDvNLDf.js → version-x_nQ-XLO.js} +3 -3
- package/dist/{cjs/version-Co332DgG.js.map → esm/version-x_nQ-XLO.js.map} +1 -1
- package/dist/nylas-web-elements/google-logo-icon.microsoft-logo-icon.nylas-editor-tabs.nylas-editor-tabs-group.nylas-list-configurations.nylas-select-event-type.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-scheduling.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
- package/dist/nylas-web-elements/{p-12a29e9d.entry.js → p-06949fd1.entry.js} +2 -2
- package/dist/nylas-web-elements/p-1dbfb2bb.entry.js +2 -0
- package/dist/nylas-web-elements/p-1dbfb2bb.entry.js.map +1 -0
- package/dist/nylas-web-elements/p-1e6e74bb.entry.js +2 -0
- package/dist/nylas-web-elements/p-1e6e74bb.entry.js.map +1 -0
- package/dist/nylas-web-elements/p-38ff3353.entry.js +2 -0
- package/dist/nylas-web-elements/p-38ff3353.entry.js.map +1 -0
- package/dist/nylas-web-elements/p-CquJ7U5v.js.map +1 -1
- package/dist/nylas-web-elements/p-x_nQ-XLO.js +2 -0
- package/dist/nylas-web-elements/{p-ClDvNLDf.js.map → p-x_nQ-XLO.js.map} +1 -1
- package/dist/types/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.d.ts +1 -0
- package/dist/types/types/index.d.ts +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/components/p-D1kxrvKw.js.map +0 -1
- package/dist/components/p-D2ELUj7W.js.map +0 -1
- package/dist/components/p-DqM3uP9H.js.map +0 -1
- package/dist/nylas-web-elements/p-913511c9.entry.js +0 -2
- package/dist/nylas-web-elements/p-913511c9.entry.js.map +0 -1
- package/dist/nylas-web-elements/p-ClDvNLDf.js +0 -2
- package/dist/nylas-web-elements/p-bafa8e30.entry.js +0 -2
- package/dist/nylas-web-elements/p-bafa8e30.entry.js.map +0 -1
- package/dist/nylas-web-elements/p-d2f6e3d9.entry.js +0 -2
- package/dist/nylas-web-elements/p-d2f6e3d9.entry.js.map +0 -1
- /package/dist/nylas-web-elements/{p-12a29e9d.entry.js.map → p-06949fd1.entry.js.map} +0 -0
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
var u = /* @__PURE__ */ ((r) => (r.Error = "error", r.Warning = "warning", r.Info = "info", r.Success = "success", r))(u || {});
|
|
4
4
|
const o = (r) => r !== null && typeof r == "object" && "error" in r;
|
|
5
5
|
|
|
6
|
-
const version = '2.5.0
|
|
6
|
+
const version = '2.5.0';
|
|
7
7
|
|
|
8
8
|
exports.o = o;
|
|
9
9
|
exports.u = u;
|
|
10
10
|
exports.version = version;
|
|
11
|
-
//# sourceMappingURL=version-
|
|
11
|
+
//# sourceMappingURL=version-DGl1NcN3.js.map
|
|
12
12
|
|
|
13
|
-
//# sourceMappingURL=version-
|
|
13
|
+
//# sourceMappingURL=version-DGl1NcN3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-
|
|
1
|
+
{"version":3,"file":"version-DGl1NcN3.js","sources":["../nylas-js-core/dist/index.es.js","src/version.ts"],"sourcesContent":["var t = Object.defineProperty;\nvar c = (r, n, s) => n in r ? t(r, n, { enumerable: !0, configurable: !0, writable: !0, value: s }) : r[n] = s;\nvar a = (r, n, s) => (c(r, typeof n != \"symbol\" ? n + \"\" : n, s), s);\nvar u = /* @__PURE__ */ ((r) => (r.Error = \"error\", r.Warning = \"warning\", r.Info = \"info\", r.Success = \"success\", r))(u || {});\nconst e = (r) => r !== null && typeof r == \"object\" && \"data\" in r, o = (r) => r !== null && typeof r == \"object\" && \"error\" in r;\nclass E extends Error {\n constructor(s) {\n super(s == null ? void 0 : s.message);\n a(this, \"apiError\");\n this.name = \"NylasAPIError\", this.stack = new Error().stack, this.apiError = s;\n }\n}\nexport {\n u as NotificationType,\n E as NylasAPIError,\n o as isNylasErrorResponse,\n e as isNylasSuccessResponse\n};\n","export const version = '2.5.0';\n"],"names":[],"mappings":";;AAGG,IAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE;AACzH,MAA+D,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,QAAQ,IAAI,OAAO,IAAI;;ACJzH,MAAM,OAAO,GAAG;;;;;;"}
|
|
@@ -207,6 +207,9 @@ export class NylasAdditionalParticipants {
|
|
|
207
207
|
? { calendar_id: participant.calendars[0].id }
|
|
208
208
|
: undefined;
|
|
209
209
|
this.participants[index].name = participant?.name || value;
|
|
210
|
+
if (participant?.grant_id) {
|
|
211
|
+
this.participants[index].grant_id = participant.grant_id;
|
|
212
|
+
}
|
|
210
213
|
this.participants = [...this.participants];
|
|
211
214
|
this.updateFormValue();
|
|
212
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nylas-additional-participants.js","sourceRoot":"","sources":["../../../../../src/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.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, Host, Prop, State, Watch, h, Element, Listen, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Event } from '@stencil/core';\nimport { AdditionalParticipant, Calendar, Configuration, ThemeConfig } from '@nylas/core';\nimport { User } from '@/common/nylas-api-request';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\ntype Participant = {\n name?: string;\n email: string;\n is_valid?: boolean;\n is_organizer?: boolean;\n availability?: Availability;\n booking?: Booking;\n};\ntype Availability = {\n calendar_ids: string[];\n};\ntype Booking = {\n calendar_id: string;\n};\n\n/**\n * The `nylas-additional-participants` component is a form input for adding additional participants to an event.\n *\n * @part nadtnlpart__title - The title of the component.\n * @part nadtnlpart__subtitle - The subtitle of the component.\n * @part nadtnlpart__content - The content of the component.\n * @part nadtnlpart__input_group - The input group of the component.\n * @part nadtnlpart__input_wrapper - The input wrapper of the component.\n * @part nadtnlpart__input - The input of the component.\n * @part nadtnlpart__remove-participant - The remove participant button of the component.\n * @part nadtnlpart__add-participant - The add participant button of the component.\n *\n */\n@Component({\n tag: 'nylas-additional-participants',\n styleUrl: 'nylas-additional-participants.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAdditionalParticipants {\n @Element() host!: HTMLNylasAdditionalParticipantsElement;\n /**\n * @standalone\n * The name of the component\n */\n @Prop() name: string = 'participants';\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * @standalone\n * The logged in user\n */\n @Prop() currentUser?: User;\n /**\n * @standalone\n * The list of user's calendars.\n */\n @Prop() currentUserCalendars?: Calendar[];\n /**\n * @standalone\n * The additional participants options from the config\n */\n @Prop() participantOptions?: AdditionalParticipant[];\n /**\n * @standalone\n * The event participants\n */\n @Prop() eventParticipants?: Participant[];\n /**\n * @standalone\n * If the config is round robin\n */\n @Prop() roundRobinConfig?: boolean;\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n /**\n * @standalone\n * Callback to search participants by query for autocomplete.\n */\n @Prop() participantSearch?: (query: string) => Promise<AdditionalParticipant[]>;\n\n @AttachInternals() internals!: ElementInternals;\n @State() participants: Participant[] = this.eventParticipants ?? [];\n @State() participantErrors: { [key: string]: string } = {};\n @State() includeOrganizerAsParticipant: boolean = true;\n @State() isRoundRobinConfig: boolean = false;\n @State() error: string = '';\n @State() requiredError: string = '';\n @State() patternError: string = '';\n @State() participantSearchResults: AdditionalParticipant[] = [];\n @State() participantSearchLoading: boolean = false;\n @State() activeSearchInputIndex: number | null = null;\n\n private participantSearchDebounceTimer?: ReturnType<typeof setTimeout>;\n private readonly PARTICIPANT_SEARCH_DEBOUNCE_MS = 300;\n\n /**\n * This event is fired when the selected participants change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * This event is fired when a participant from search results is selected\n * that is not already in the participantOptions list.\n */\n @Event() participantSearchResultSelected!: EventEmitter<AdditionalParticipant>;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-additional-participants', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('currentUser')\n @Watch('selectedConfiguration')\n selectedConfigurationAndCurrentUserChangedHandler(newValue: unknown, _oldValue: unknown, propName: string) {\n debug('nylas-additional-participants', 'selectedConfigurationAndCurrentUserChangedHandler', newValue, this.currentUser);\n\n if (propName === 'selectedConfiguration') {\n this.updateState(newValue as Configuration, this.currentUser, false);\n } else if (propName === 'currentUser') {\n this.updateState(this.selectedConfiguration, newValue as User, false);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n this.requiredError = i18next.t('fieldRequired', { field: i18next.t('email') });\n this.patternError = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n if (this.error) {\n this.error = i18next.t('nylasAdditionalParticipants.error');\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n connectedCallback() {\n debug('nylas-additional-participants', 'connectedCallback');\n // Use queueMicrotask to defer theme application until after React has set props.\n // This fixes the timing issue where connectedCallback fires before React sets themeConfig.\n queueMicrotask(() => {\n if (this.themeConfig) {\n this.applyThemeConfig(this.themeConfig);\n this.host.setAttribute('data-themed', '');\n }\n });\n }\n\n componentWillLoad() {\n debug('nylas-additional-participants', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-additional-participants', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.updateState(this.selectedConfiguration, this.currentUser, false);\n } else if (this.eventParticipants) {\n this.participants = this.eventParticipants || [];\n this.isRoundRobinConfig = this.roundRobinConfig || false;\n this.updateFormValue(true);\n }\n }\n\n disconnectedCallback() {\n debug('nylas-additional-participants', 'disconnectedCallback');\n }\n\n private updateState(selectedConfig?: Configuration, currentUser?: User, valueChanged: boolean = true) {\n this.isRoundRobinConfig = selectedConfig?.availability?.availability_rules?.availability_method\n ? selectedConfig?.availability?.availability_rules?.availability_method !== 'collective'\n : false;\n const sourceParticipants = selectedConfig?.participants || this.eventParticipants || [];\n // Shallow-clone to avoid mutating frozen config objects.\n // For round-robin, the API doesn't store is_organizer, so flag the current user as organizer.\n this.participants = sourceParticipants.map(p => {\n if (this.isRoundRobinConfig && currentUser?.email && p.email === currentUser.email) {\n return { ...p, is_organizer: true };\n }\n return { ...p };\n });\n this.includeOrganizerAsParticipant = this.isRoundRobinConfig && this.participants.find(p => p.email === currentUser?.email) ? true : false;\n this.updateOrganizerAsParticipant(valueChanged);\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 private getParticipantLookupSources(): AdditionalParticipant[] {\n const fromOptions = this.participantOptions || [];\n const fromSearch = this.participantSearchResults || [];\n const seen = new Set<string>();\n return [...fromSearch, ...fromOptions].filter(p => {\n if (seen.has(p.email)) return false;\n seen.add(p.email);\n return true;\n });\n }\n\n private getDropdownOptions(index: number): { value: string; label: string }[] {\n const sources = this.participantSearch ? this.getParticipantLookupSources() : this.participantOptions || [];\n return this.getArrayDifference(sources, this.participants, index);\n }\n\n private async runParticipantSearch(query: string, index: number) {\n if (!this.participantSearch || !query.trim()) {\n this.participantSearchResults = [];\n this.participantSearchLoading = false;\n return;\n }\n this.activeSearchInputIndex = index;\n this.participantSearchLoading = true;\n this.participantSearchResults = [];\n try {\n const results = await this.participantSearch(query.trim());\n if (this.activeSearchInputIndex === index) {\n this.participantSearchResults = results || [];\n }\n } catch (err) {\n debug('nylas-additional-participants', 'participantSearch failed', err);\n } finally {\n if (this.activeSearchInputIndex === index) {\n this.participantSearchLoading = false;\n }\n }\n }\n\n @Listen('inputOptionChanged')\n onInputOptionChanged(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-additional-participants', 'onInputOptionChanged');\n const EMAIL_REGEX = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n const index = event.detail.name;\n const value = event.detail.value;\n const lookupSources = this.getParticipantLookupSources();\n const participant = lookupSources.find(p => p.email === value);\n\n if (this.participantSearch && value) {\n clearTimeout(this.participantSearchDebounceTimer);\n if (participant) {\n // Don't clear participantSearchResults here — this handler fires both when\n // the user types a value that happens to match an existing search result AND\n // when the user clicks a dropdown option. Clearing results on a typed match\n // empties the dropdown while the user is still interacting with it, causing\n // \"no results\" to appear. The results are naturally replaced on the next search.\n const alreadyInOptions = this.participantOptions?.some(p => p.email === participant.email);\n if (!alreadyInOptions) {\n this.participantSearchResultSelected.emit(participant);\n }\n } else {\n this.participantSearchDebounceTimer = setTimeout(() => {\n this.runParticipantSearch(value, parseInt(String(index), 10));\n }, this.PARTICIPANT_SEARCH_DEBOUNCE_MS);\n }\n }\n\n this.participants[index].email = value;\n\n // Check for duplicate emails\n if (value) {\n const duplicateIndex = this.participants.findIndex((p, i) => i !== parseInt(String(index), 10) && p.email === value);\n if (duplicateIndex !== -1) {\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, i18next.t('nylasAdditionalParticipants.error_duplicate'));\n this.participantErrors[index] = i18next.t('nylasAdditionalParticipants.error_duplicate');\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n }\n }\n\n if (!participant && this.isRoundRobinConfig) {\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, 'For round robin configuration, participant should be selected from the dropdown.');\n this.participantErrors[index] = 'For round robin page, participant should be selected from the dropdown.';\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n } else if (!participant && !EMAIL_REGEX.test(value)) {\n if (this.participantSearch && (this.participantSearchLoading || !value.includes('@'))) {\n this.participants = [...this.participants];\n return;\n }\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, i18next.t('nylasAdditionalParticipants.error_email'));\n this.participantErrors[index] = i18next.t('nylasAdditionalParticipants.error_email');\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n } else {\n this.participantErrors[index] = '';\n this.participants[index].is_valid = true;\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n // Default to the is_primary calendar if available, otherwise first calendar for all participants\n const primaryCalendar = participant?.calendars?.find(calendar => calendar.is_primary);\n this.participants[index].availability =\n participant && primaryCalendar?.id ? { calendar_ids: [primaryCalendar.id] } : participant?.calendars[0]?.id ? { calendar_ids: [participant.calendars[0].id] } : undefined;\n // If round-robin config, set booking calendar to is_primary if available, otherwise first calendar for all participants\n this.participants[index].booking =\n participant && this.isRoundRobinConfig && primaryCalendar?.id\n ? { calendar_id: primaryCalendar.id }\n : this.isRoundRobinConfig && participant?.calendars[0]?.id\n ? { calendar_id: participant.calendars[0].id }\n : undefined;\n this.participants[index].name = participant?.name || value;\n this.participants = [...this.participants];\n this.updateFormValue();\n }\n\n updateOrganizerAsParticipant(valueChanged: boolean = true) {\n const findCurrentUserInParticipants = this.participants.find(p => p.email === this.currentUser?.email);\n if (this.isRoundRobinConfig && !findCurrentUserInParticipants && this.currentUser?.email) {\n const bookingCalendarDefault = this.currentUserCalendars?.find(calendar => calendar.is_primary)?.id || this.currentUserCalendars?.[0]?.id || 'primary';\n this.participants = [\n {\n name: this.currentUser?.name,\n email: this.currentUser?.email,\n is_organizer: true,\n availability: {\n calendar_ids: [bookingCalendarDefault],\n },\n booking: {\n calendar_id: bookingCalendarDefault,\n },\n },\n ...this.participants,\n ];\n }\n this.updateFormValue(valueChanged);\n }\n\n addParticipant() {\n debug('nylas-additional-participants', 'addParticipant');\n this.participants = [...this.participants, { name: '', email: '', is_organizer: false }];\n this.updateFormValue();\n }\n removeParticipant(index: number) {\n debug('nylas-additional-participants', 'removeParticipant');\n this.participants = this.participants.filter((_, i) => i !== index);\n this.updateFormValue();\n }\n\n updateFormValue(valueChanged = true) {\n debug('nylas-additional-participants', 'updateFormValue');\n const participants = this.isRoundRobinConfig ? (this.includeOrganizerAsParticipant ? this.participants : this.participants.filter(p => !p.is_organizer)) : this.participants;\n if (participants.length === 0) {\n this.error = i18next.t('nylasAdditionalParticipants.error');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.isInternalsAvailable && this.internals.setValidity({});\n this.error = '';\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(participants), this.name);\n if (valueChanged) {\n this.valueChanged.emit({ value: JSON.stringify(participants), name: this.name });\n }\n }\n }\n\n // Filter out the participants that are already added, optionally excluding a specific index\n // (the participant currently being edited) from the duplicate check.\n getArrayDifference(array1: AdditionalParticipant[], array2: Participant[], excludeIndex?: number) {\n const filtered = array1.filter(participant1 => !array2.some((participant2, i) => i !== excludeIndex && participant1.email === participant2.email));\n return filtered.map(participant => {\n return { value: participant.email, label: participant.email };\n });\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n @RegisterComponent<NylasAdditionalParticipants, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-additional-participants',\n stateToProps: new Map([\n ['schedulerConfig.additionalParticipants', 'participantOptions'],\n ['schedulerConfig.participantSearch', 'participantSearch'],\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.currentUser', 'currentUser'],\n ['schedulerConfig.calendars', 'currentUserCalendars'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {\n participantSearchResultSelected: async (event: CustomEvent<AdditionalParticipant>, nylasSchedulerConfigConnector: NylasSchedulerConfigConnector) => {\n const newParticipant = event.detail;\n if (!newParticipant?.email) return;\n const store = nylasSchedulerConfigConnector.schedulerConfigStore;\n const existing = store.state.additionalParticipants || [];\n if (existing.some(p => p.email === newParticipant.email)) return;\n store.set('additionalParticipants', [...existing, newParticipant]);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"nadtnlpart\">\n <nylas-form-card exportparts=\"nfc, nfc__header\" themeConfig={this.themeConfig}>\n <h3 slot=\"header-title\" class=\"nylas-additional-participants__title\" part=\"nadtnlpart__title\">\n {i18next.t('nylasAdditionalParticipants.headerTitle')}\n </h3>\n <p slot=\"header-subtitle\" class=\"nylas-additional-participants__subtitle\" part=\"nadtnlpart__subtitle\">\n {i18next.t('nylasAdditionalParticipants.headerSubTitle')}\n </p>\n <div slot=\"content\" class=\"nylas-additional-participants__content\" part=\"nadtnlpart__content\">\n <div>\n {this.participants.map((participant, index) => {\n return (\n <div class={'nylas-additional-participants__input_group'} part=\"nadtnlpart__input_group\">\n {!participant.is_organizer && <label>{`${i18next.t('nylasAdditionalParticipants.participant')} ${index}`}</label>}\n <div\n part=\"nadtnlpart__input_wrapper\"\n class={{\n 'nylas-additional-participants__input_wrapper': true,\n 'nylas-additional-participants__input_wrapper_organizer': participant?.is_organizer === true,\n 'nylas-additional-participants__input_wrapper_invalid': participant.is_valid === false,\n 'error': participant.is_valid === false,\n }}\n >\n <div class={{ 'nylas-additional-participants__input': true, 'organizer': participant?.is_organizer === true }} part=\"nadtnlpart__input\">\n {participant.is_organizer ? (\n <input-component\n class={'label-input'}\n name={`${index}`}\n key={index}\n label={i18next.t('nylasAdditionalParticipants.organizer')}\n required={false}\n requiredError={this.requiredError}\n patternError={this.patternError}\n readOnly={participant.is_organizer}\n defaultValue={participant.email}\n themeConfig={this.themeConfig}\n >\n {this.isRoundRobinConfig && (\n <div class=\"required-input\" slot=\"additional-input\">\n <input\n type=\"checkbox\"\n name={`organizer_participant`}\n id={`organizer_participant`}\n onClick={() => {\n this.includeOrganizerAsParticipant = !this.includeOrganizerAsParticipant;\n this.updateFormValue();\n }}\n checked={this.includeOrganizerAsParticipant}\n />\n <label htmlFor={`organizer_participant`} aria-label=\"Include as participant\">\n <span class=\"org-as-participant\" part=\"nadtnlpart__org-as-participant\">\n {i18next.t('nylasAdditionalParticipants.organizerAsParticipant')}\n </span>\n <tooltip-component id=\"organizer_participant_tooltip\">\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n <strong>{i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizer')}:</strong>{' '}\n {i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizerDesc')} <br />\n <strong>{i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizer')}:</strong>{' '}\n {i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizerDesc')}\n </span>\n </tooltip-component>\n </label>\n </div>\n )}\n </input-component>\n ) : (\n <div class=\"nylas-additional-participants__input-with-loading\">\n <input-dropdown\n id={`${index}`}\n name={`${index}`}\n filterable={!this.participantSearch}\n inputValue={participant.email}\n options={this.getDropdownOptions(index)}\n noResultsText={\n this.participantSearch &&\n !this.participantSearchLoading &&\n this.activeSearchInputIndex === index &&\n participant.email?.trim() &&\n this.getDropdownOptions(index).length === 0\n ? i18next.t('nylasAdditionalParticipants.noResults')\n : undefined\n }\n themeConfig={this.themeConfig}\n />\n {this.participantSearch && this.participantSearchLoading && this.activeSearchInputIndex === index && (\n <span class=\"nylas-additional-participants__loading\" part=\"nadtnlpart__loading\" aria-live=\"polite\">\n {i18next.t('nylasAdditionalParticipants.searching')}\n </span>\n )}\n </div>\n )}\n {!participant.is_organizer && (\n <button onClick={() => this.removeParticipant(index)} part=\"nadtnlpart__remove-participant\">\n <close-icon />\n </button>\n )}\n </div>\n </div>\n {!participant.is_valid && (\n <p class=\"nylas-additional-participants__error\" part=\"nadtnlpart__error\">\n {this.participantErrors[index]}\n </p>\n )}\n </div>\n );\n })}\n <p class=\"nylas-additional-participants__error\" part=\"nadtnlpart__error\">\n {this.error}\n </p>\n </div>\n <button class=\"nylas-additional-participants__add\" part=\"nadtnlpart__add-participant\" onClick={() => this.addParticipant()}>\n <add-circle-icon />{' '}\n <span>\n {this.participants.length > 1\n ? i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'next' })\n : i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'first' })}\n </span>\n </button>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nylas-additional-participants.js","sourceRoot":"","sources":["../../../../../src/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.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, Host, Prop, State, Watch, h, Element, Listen, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Event } from '@stencil/core';\nimport { AdditionalParticipant, Calendar, Configuration, ThemeConfig } from '@nylas/core';\nimport { User } from '@/common/nylas-api-request';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\ntype Participant = {\n name?: string;\n email: string;\n grant_id?: string;\n is_valid?: boolean;\n is_organizer?: boolean;\n availability?: Availability;\n booking?: Booking;\n};\ntype Availability = {\n calendar_ids: string[];\n};\ntype Booking = {\n calendar_id: string;\n};\n\n/**\n * The `nylas-additional-participants` component is a form input for adding additional participants to an event.\n *\n * @part nadtnlpart__title - The title of the component.\n * @part nadtnlpart__subtitle - The subtitle of the component.\n * @part nadtnlpart__content - The content of the component.\n * @part nadtnlpart__input_group - The input group of the component.\n * @part nadtnlpart__input_wrapper - The input wrapper of the component.\n * @part nadtnlpart__input - The input of the component.\n * @part nadtnlpart__remove-participant - The remove participant button of the component.\n * @part nadtnlpart__add-participant - The add participant button of the component.\n *\n */\n@Component({\n tag: 'nylas-additional-participants',\n styleUrl: 'nylas-additional-participants.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAdditionalParticipants {\n @Element() host!: HTMLNylasAdditionalParticipantsElement;\n /**\n * @standalone\n * The name of the component\n */\n @Prop() name: string = 'participants';\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * @standalone\n * The logged in user\n */\n @Prop() currentUser?: User;\n /**\n * @standalone\n * The list of user's calendars.\n */\n @Prop() currentUserCalendars?: Calendar[];\n /**\n * @standalone\n * The additional participants options from the config\n */\n @Prop() participantOptions?: AdditionalParticipant[];\n /**\n * @standalone\n * The event participants\n */\n @Prop() eventParticipants?: Participant[];\n /**\n * @standalone\n * If the config is round robin\n */\n @Prop() roundRobinConfig?: boolean;\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n /**\n * @standalone\n * Callback to search participants by query for autocomplete.\n */\n @Prop() participantSearch?: (query: string) => Promise<AdditionalParticipant[]>;\n\n @AttachInternals() internals!: ElementInternals;\n @State() participants: Participant[] = this.eventParticipants ?? [];\n @State() participantErrors: { [key: string]: string } = {};\n @State() includeOrganizerAsParticipant: boolean = true;\n @State() isRoundRobinConfig: boolean = false;\n @State() error: string = '';\n @State() requiredError: string = '';\n @State() patternError: string = '';\n @State() participantSearchResults: AdditionalParticipant[] = [];\n @State() participantSearchLoading: boolean = false;\n @State() activeSearchInputIndex: number | null = null;\n\n private participantSearchDebounceTimer?: ReturnType<typeof setTimeout>;\n private readonly PARTICIPANT_SEARCH_DEBOUNCE_MS = 300;\n\n /**\n * This event is fired when the selected participants change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * This event is fired when a participant from search results is selected\n * that is not already in the participantOptions list.\n */\n @Event() participantSearchResultSelected!: EventEmitter<AdditionalParticipant>;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-additional-participants', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('currentUser')\n @Watch('selectedConfiguration')\n selectedConfigurationAndCurrentUserChangedHandler(newValue: unknown, _oldValue: unknown, propName: string) {\n debug('nylas-additional-participants', 'selectedConfigurationAndCurrentUserChangedHandler', newValue, this.currentUser);\n\n if (propName === 'selectedConfiguration') {\n this.updateState(newValue as Configuration, this.currentUser, false);\n } else if (propName === 'currentUser') {\n this.updateState(this.selectedConfiguration, newValue as User, false);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n this.requiredError = i18next.t('fieldRequired', { field: i18next.t('email') });\n this.patternError = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n if (this.error) {\n this.error = i18next.t('nylasAdditionalParticipants.error');\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n connectedCallback() {\n debug('nylas-additional-participants', 'connectedCallback');\n // Use queueMicrotask to defer theme application until after React has set props.\n // This fixes the timing issue where connectedCallback fires before React sets themeConfig.\n queueMicrotask(() => {\n if (this.themeConfig) {\n this.applyThemeConfig(this.themeConfig);\n this.host.setAttribute('data-themed', '');\n }\n });\n }\n\n componentWillLoad() {\n debug('nylas-additional-participants', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-additional-participants', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.updateState(this.selectedConfiguration, this.currentUser, false);\n } else if (this.eventParticipants) {\n this.participants = this.eventParticipants || [];\n this.isRoundRobinConfig = this.roundRobinConfig || false;\n this.updateFormValue(true);\n }\n }\n\n disconnectedCallback() {\n debug('nylas-additional-participants', 'disconnectedCallback');\n }\n\n private updateState(selectedConfig?: Configuration, currentUser?: User, valueChanged: boolean = true) {\n this.isRoundRobinConfig = selectedConfig?.availability?.availability_rules?.availability_method\n ? selectedConfig?.availability?.availability_rules?.availability_method !== 'collective'\n : false;\n const sourceParticipants = selectedConfig?.participants || this.eventParticipants || [];\n // Shallow-clone to avoid mutating frozen config objects.\n // For round-robin, the API doesn't store is_organizer, so flag the current user as organizer.\n this.participants = sourceParticipants.map(p => {\n if (this.isRoundRobinConfig && currentUser?.email && p.email === currentUser.email) {\n return { ...p, is_organizer: true };\n }\n return { ...p };\n });\n this.includeOrganizerAsParticipant = this.isRoundRobinConfig && this.participants.find(p => p.email === currentUser?.email) ? true : false;\n this.updateOrganizerAsParticipant(valueChanged);\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 private getParticipantLookupSources(): AdditionalParticipant[] {\n const fromOptions = this.participantOptions || [];\n const fromSearch = this.participantSearchResults || [];\n const seen = new Set<string>();\n return [...fromSearch, ...fromOptions].filter(p => {\n if (seen.has(p.email)) return false;\n seen.add(p.email);\n return true;\n });\n }\n\n private getDropdownOptions(index: number): { value: string; label: string }[] {\n const sources = this.participantSearch ? this.getParticipantLookupSources() : this.participantOptions || [];\n return this.getArrayDifference(sources, this.participants, index);\n }\n\n private async runParticipantSearch(query: string, index: number) {\n if (!this.participantSearch || !query.trim()) {\n this.participantSearchResults = [];\n this.participantSearchLoading = false;\n return;\n }\n this.activeSearchInputIndex = index;\n this.participantSearchLoading = true;\n this.participantSearchResults = [];\n try {\n const results = await this.participantSearch(query.trim());\n if (this.activeSearchInputIndex === index) {\n this.participantSearchResults = results || [];\n }\n } catch (err) {\n debug('nylas-additional-participants', 'participantSearch failed', err);\n } finally {\n if (this.activeSearchInputIndex === index) {\n this.participantSearchLoading = false;\n }\n }\n }\n\n @Listen('inputOptionChanged')\n onInputOptionChanged(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-additional-participants', 'onInputOptionChanged');\n const EMAIL_REGEX = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n const index = event.detail.name;\n const value = event.detail.value;\n const lookupSources = this.getParticipantLookupSources();\n const participant = lookupSources.find(p => p.email === value);\n\n if (this.participantSearch && value) {\n clearTimeout(this.participantSearchDebounceTimer);\n if (participant) {\n // Don't clear participantSearchResults here — this handler fires both when\n // the user types a value that happens to match an existing search result AND\n // when the user clicks a dropdown option. Clearing results on a typed match\n // empties the dropdown while the user is still interacting with it, causing\n // \"no results\" to appear. The results are naturally replaced on the next search.\n const alreadyInOptions = this.participantOptions?.some(p => p.email === participant.email);\n if (!alreadyInOptions) {\n this.participantSearchResultSelected.emit(participant);\n }\n } else {\n this.participantSearchDebounceTimer = setTimeout(() => {\n this.runParticipantSearch(value, parseInt(String(index), 10));\n }, this.PARTICIPANT_SEARCH_DEBOUNCE_MS);\n }\n }\n\n this.participants[index].email = value;\n\n // Check for duplicate emails\n if (value) {\n const duplicateIndex = this.participants.findIndex((p, i) => i !== parseInt(String(index), 10) && p.email === value);\n if (duplicateIndex !== -1) {\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, i18next.t('nylasAdditionalParticipants.error_duplicate'));\n this.participantErrors[index] = i18next.t('nylasAdditionalParticipants.error_duplicate');\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n }\n }\n\n if (!participant && this.isRoundRobinConfig) {\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, 'For round robin configuration, participant should be selected from the dropdown.');\n this.participantErrors[index] = 'For round robin page, participant should be selected from the dropdown.';\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n } else if (!participant && !EMAIL_REGEX.test(value)) {\n if (this.participantSearch && (this.participantSearchLoading || !value.includes('@'))) {\n this.participants = [...this.participants];\n return;\n }\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, i18next.t('nylasAdditionalParticipants.error_email'));\n this.participantErrors[index] = i18next.t('nylasAdditionalParticipants.error_email');\n this.participants[index].is_valid = false;\n this.participants = [...this.participants];\n return;\n } else {\n this.participantErrors[index] = '';\n this.participants[index].is_valid = true;\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n // Default to the is_primary calendar if available, otherwise first calendar for all participants\n const primaryCalendar = participant?.calendars?.find(calendar => calendar.is_primary);\n this.participants[index].availability =\n participant && primaryCalendar?.id ? { calendar_ids: [primaryCalendar.id] } : participant?.calendars[0]?.id ? { calendar_ids: [participant.calendars[0].id] } : undefined;\n // If round-robin config, set booking calendar to is_primary if available, otherwise first calendar for all participants\n this.participants[index].booking =\n participant && this.isRoundRobinConfig && primaryCalendar?.id\n ? { calendar_id: primaryCalendar.id }\n : this.isRoundRobinConfig && participant?.calendars[0]?.id\n ? { calendar_id: participant.calendars[0].id }\n : undefined;\n this.participants[index].name = participant?.name || value;\n if (participant?.grant_id) {\n this.participants[index].grant_id = participant.grant_id;\n }\n this.participants = [...this.participants];\n this.updateFormValue();\n }\n\n updateOrganizerAsParticipant(valueChanged: boolean = true) {\n const findCurrentUserInParticipants = this.participants.find(p => p.email === this.currentUser?.email);\n if (this.isRoundRobinConfig && !findCurrentUserInParticipants && this.currentUser?.email) {\n const bookingCalendarDefault = this.currentUserCalendars?.find(calendar => calendar.is_primary)?.id || this.currentUserCalendars?.[0]?.id || 'primary';\n this.participants = [\n {\n name: this.currentUser?.name,\n email: this.currentUser?.email,\n is_organizer: true,\n availability: {\n calendar_ids: [bookingCalendarDefault],\n },\n booking: {\n calendar_id: bookingCalendarDefault,\n },\n },\n ...this.participants,\n ];\n }\n this.updateFormValue(valueChanged);\n }\n\n addParticipant() {\n debug('nylas-additional-participants', 'addParticipant');\n this.participants = [...this.participants, { name: '', email: '', is_organizer: false }];\n this.updateFormValue();\n }\n removeParticipant(index: number) {\n debug('nylas-additional-participants', 'removeParticipant');\n this.participants = this.participants.filter((_, i) => i !== index);\n this.updateFormValue();\n }\n\n updateFormValue(valueChanged = true) {\n debug('nylas-additional-participants', 'updateFormValue');\n const participants = this.isRoundRobinConfig ? (this.includeOrganizerAsParticipant ? this.participants : this.participants.filter(p => !p.is_organizer)) : this.participants;\n if (participants.length === 0) {\n this.error = i18next.t('nylasAdditionalParticipants.error');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.isInternalsAvailable && this.internals.setValidity({});\n this.error = '';\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(participants), this.name);\n if (valueChanged) {\n this.valueChanged.emit({ value: JSON.stringify(participants), name: this.name });\n }\n }\n }\n\n // Filter out the participants that are already added, optionally excluding a specific index\n // (the participant currently being edited) from the duplicate check.\n getArrayDifference(array1: AdditionalParticipant[], array2: Participant[], excludeIndex?: number) {\n const filtered = array1.filter(participant1 => !array2.some((participant2, i) => i !== excludeIndex && participant1.email === participant2.email));\n return filtered.map(participant => {\n return { value: participant.email, label: participant.email };\n });\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n @RegisterComponent<NylasAdditionalParticipants, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-additional-participants',\n stateToProps: new Map([\n ['schedulerConfig.additionalParticipants', 'participantOptions'],\n ['schedulerConfig.participantSearch', 'participantSearch'],\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.currentUser', 'currentUser'],\n ['schedulerConfig.calendars', 'currentUserCalendars'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {\n participantSearchResultSelected: async (event: CustomEvent<AdditionalParticipant>, nylasSchedulerConfigConnector: NylasSchedulerConfigConnector) => {\n const newParticipant = event.detail;\n if (!newParticipant?.email) return;\n const store = nylasSchedulerConfigConnector.schedulerConfigStore;\n const existing = store.state.additionalParticipants || [];\n if (existing.some(p => p.email === newParticipant.email)) return;\n store.set('additionalParticipants', [...existing, newParticipant]);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"nadtnlpart\">\n <nylas-form-card exportparts=\"nfc, nfc__header\" themeConfig={this.themeConfig}>\n <h3 slot=\"header-title\" class=\"nylas-additional-participants__title\" part=\"nadtnlpart__title\">\n {i18next.t('nylasAdditionalParticipants.headerTitle')}\n </h3>\n <p slot=\"header-subtitle\" class=\"nylas-additional-participants__subtitle\" part=\"nadtnlpart__subtitle\">\n {i18next.t('nylasAdditionalParticipants.headerSubTitle')}\n </p>\n <div slot=\"content\" class=\"nylas-additional-participants__content\" part=\"nadtnlpart__content\">\n <div>\n {this.participants.map((participant, index) => {\n return (\n <div class={'nylas-additional-participants__input_group'} part=\"nadtnlpart__input_group\">\n {!participant.is_organizer && <label>{`${i18next.t('nylasAdditionalParticipants.participant')} ${index}`}</label>}\n <div\n part=\"nadtnlpart__input_wrapper\"\n class={{\n 'nylas-additional-participants__input_wrapper': true,\n 'nylas-additional-participants__input_wrapper_organizer': participant?.is_organizer === true,\n 'nylas-additional-participants__input_wrapper_invalid': participant.is_valid === false,\n 'error': participant.is_valid === false,\n }}\n >\n <div class={{ 'nylas-additional-participants__input': true, 'organizer': participant?.is_organizer === true }} part=\"nadtnlpart__input\">\n {participant.is_organizer ? (\n <input-component\n class={'label-input'}\n name={`${index}`}\n key={index}\n label={i18next.t('nylasAdditionalParticipants.organizer')}\n required={false}\n requiredError={this.requiredError}\n patternError={this.patternError}\n readOnly={participant.is_organizer}\n defaultValue={participant.email}\n themeConfig={this.themeConfig}\n >\n {this.isRoundRobinConfig && (\n <div class=\"required-input\" slot=\"additional-input\">\n <input\n type=\"checkbox\"\n name={`organizer_participant`}\n id={`organizer_participant`}\n onClick={() => {\n this.includeOrganizerAsParticipant = !this.includeOrganizerAsParticipant;\n this.updateFormValue();\n }}\n checked={this.includeOrganizerAsParticipant}\n />\n <label htmlFor={`organizer_participant`} aria-label=\"Include as participant\">\n <span class=\"org-as-participant\" part=\"nadtnlpart__org-as-participant\">\n {i18next.t('nylasAdditionalParticipants.organizerAsParticipant')}\n </span>\n <tooltip-component id=\"organizer_participant_tooltip\">\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n <strong>{i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizer')}:</strong>{' '}\n {i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizerDesc')} <br />\n <strong>{i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizer')}:</strong>{' '}\n {i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizerDesc')}\n </span>\n </tooltip-component>\n </label>\n </div>\n )}\n </input-component>\n ) : (\n <div class=\"nylas-additional-participants__input-with-loading\">\n <input-dropdown\n id={`${index}`}\n name={`${index}`}\n filterable={!this.participantSearch}\n inputValue={participant.email}\n options={this.getDropdownOptions(index)}\n noResultsText={\n this.participantSearch &&\n !this.participantSearchLoading &&\n this.activeSearchInputIndex === index &&\n participant.email?.trim() &&\n this.getDropdownOptions(index).length === 0\n ? i18next.t('nylasAdditionalParticipants.noResults')\n : undefined\n }\n themeConfig={this.themeConfig}\n />\n {this.participantSearch && this.participantSearchLoading && this.activeSearchInputIndex === index && (\n <span class=\"nylas-additional-participants__loading\" part=\"nadtnlpart__loading\" aria-live=\"polite\">\n {i18next.t('nylasAdditionalParticipants.searching')}\n </span>\n )}\n </div>\n )}\n {!participant.is_organizer && (\n <button onClick={() => this.removeParticipant(index)} part=\"nadtnlpart__remove-participant\">\n <close-icon />\n </button>\n )}\n </div>\n </div>\n {!participant.is_valid && (\n <p class=\"nylas-additional-participants__error\" part=\"nadtnlpart__error\">\n {this.participantErrors[index]}\n </p>\n )}\n </div>\n );\n })}\n <p class=\"nylas-additional-participants__error\" part=\"nadtnlpart__error\">\n {this.error}\n </p>\n </div>\n <button class=\"nylas-additional-participants__add\" part=\"nadtnlpart__add-participant\" onClick={() => this.addParticipant()}>\n <add-circle-icon />{' '}\n <span>\n {this.participants.length > 1\n ? i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'next' })\n : i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'first' })}\n </span>\n </button>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -73,6 +73,9 @@ export class NylasEditorTabs {
|
|
|
73
73
|
name: organizer?.name ?? this.currentUser?.name ?? '',
|
|
74
74
|
email: organizer?.email ?? this.currentUser?.email ?? '',
|
|
75
75
|
is_organizer: true,
|
|
76
|
+
...(organizer?.grant_id || this.selectedConfiguration?.participants?.find(sp => sp.is_organizer)?.grant_id
|
|
77
|
+
? { grant_id: organizer?.grant_id || this.selectedConfiguration?.participants?.find(sp => sp.is_organizer)?.grant_id }
|
|
78
|
+
: {}),
|
|
76
79
|
timezone: availability?.timezone ?? Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
77
80
|
availability: {
|
|
78
81
|
calendar_ids: bookingCalendar && bookingCalendar !== '' ? [bookingCalendar] : ['primary'],
|
|
@@ -135,10 +138,12 @@ export class NylasEditorTabs {
|
|
|
135
138
|
? organizerCalendars
|
|
136
139
|
: ['primary'];
|
|
137
140
|
const isPartAvailabilityCalendarsPrimaryOnly = orgpartAvailabilityCalendars.length === 1 && orgpartAvailabilityCalendars[0] === 'primary';
|
|
141
|
+
const organizerGrantId = p.grant_id || this.selectedConfiguration?.participants?.find(sp => sp.email === p.email)?.grant_id;
|
|
138
142
|
return {
|
|
139
143
|
name: p.name ?? '',
|
|
140
144
|
email: p.email,
|
|
141
145
|
is_organizer: true,
|
|
146
|
+
...(organizerGrantId ? { grant_id: organizerGrantId } : {}),
|
|
142
147
|
timezone,
|
|
143
148
|
availability: {
|
|
144
149
|
calendar_ids: isPartAvailabilityCalendarsPrimaryOnly ? [orgPartBookingCalendar] : orgpartAvailabilityCalendars,
|
|
@@ -154,8 +159,10 @@ export class NylasEditorTabs {
|
|
|
154
159
|
const partBooking = participantBookingCalendars?.[p.email] ? { calendar_id: participantBookingCalendars?.[p.email] } : p?.booking ?? undefined;
|
|
155
160
|
const partAvailabilityCalendars = participantCalendars?.[p.email] ?? p.availability?.calendar_ids ?? ['primary'];
|
|
156
161
|
const isPartAvailabilityCalendarsPrimaryOnly = partAvailabilityCalendars.length === 1 && partAvailabilityCalendars[0] === 'primary';
|
|
162
|
+
const partGrantId = p.grant_id || this.selectedConfiguration?.participants?.find(sp => sp.email === p.email)?.grant_id;
|
|
157
163
|
return {
|
|
158
164
|
...p,
|
|
165
|
+
...(partGrantId ? { grant_id: partGrantId } : {}),
|
|
159
166
|
timezone,
|
|
160
167
|
availability: p.availability
|
|
161
168
|
? {
|
|
@@ -683,10 +690,10 @@ export class NylasEditorTabs {
|
|
|
683
690
|
}
|
|
684
691
|
render() {
|
|
685
692
|
debug('[nylas-editor-tabs]', 'render', this.formState);
|
|
686
|
-
return (h(Host, { key: '
|
|
693
|
+
return (h(Host, { key: '46306ea000b14a1790ed4d072e936683af6eafa4' }, h("nylas-notification", { key: '7ecc7c50ef6144a8e2cc9e0b36ba86f253c754d8' }), h("form", { key: '35fb3ac7301c4a284404b9a47f17d7efd28637b1', onSubmit: this.formSubmissionHandler, class: "scheduler-editor", ref: el => (this.formRef = el), noValidate: true }, this.mode === 'app' ? (h("div", { class: "form-contents", part: "editor__form-contents net__form-contents" }, h("div", { class: "tabs", part: "editor__tabs net__tabs" }, h("button", { name: Tab.EventInfo, class: { tab: true, active: this.activeTab == Tab.EventInfo, hide: this.hideTab(Tab.EventInfo) }, part: "editortab__event-info net__tab-event-info", onClick: e => this.setActiveTab(e, Tab.EventInfo) }, h("calendar-info-icon", { width: "16", height: "16" }), i18next.t('eventInfoTab')), h("button", { name: Tab.Availability, class: { tab: true, active: this.activeTab == Tab.Availability, hide: this.hideTab(Tab.Availability) }, part: "editortab__availability net__tab-availability", onClick: e => this.setActiveTab(e, Tab.Availability) }, h("calendar-patterns-icon", { width: "16", height: "16" }), i18next.t('availabilityTab')), h("button", { name: Tab.Participants, class: { tab: true, active: this.activeTab == Tab.Participants, hide: this.hideTab(Tab.Participants) }, part: "editortab__participants net__tab-participants", onClick: e => this.setActiveTab(e, Tab.Participants) }, h("people-icon", { width: "16", height: "16" }), i18next.t('participantsTab')), h("button", { name: Tab.BookingOptions, class: { tab: true, active: this.activeTab == Tab.BookingOptions, hide: this.hideTab(Tab.BookingOptions) }, part: "editortab__booking-options net__tab-booking-options", onClick: e => this.setActiveTab(e, Tab.BookingOptions) }, h("flow-icon", { width: "16", height: "16" }), i18next.t('bookingOptionsTab')), h("button", { name: Tab.BookingForm, class: { tab: true, active: this.activeTab == 'bookingForm', hide: this.hideTab(Tab.BookingForm) }, part: "editortab__booking-form net__tab-booking-form", onClick: e => this.setActiveTab(e, Tab.BookingForm) }, this.activeTab == Tab.BookingForm ? h("calendar-agenda-fill-icon", { width: "16", height: "16" }) : h("calendar-agenda-icon", { width: "16", height: "16" }), i18next.t('bookingFormTab')), h("button", { name: Tab.Communications, class: { tab: true, active: this.activeTab == 'communications', hide: this.hideTab(Tab.Communications) }, onClick: e => this.setActiveTab(e, Tab.Communications), part: "editortab__communications net__tab-communications" }, this.activeTab == Tab.Communications ? h("envelope-fill-icon", { width: "16", height: "16" }) : h("envelope-icon", { width: "16", height: "16" }), i18next.t('communicationsTab')), h("button", { name: Tab.PageStyles, class: { tab: true, active: this.activeTab == 'pageStyles', hide: this.hideTab(Tab.PageStyles) }, onClick: e => this.setActiveTab(e, Tab.PageStyles), part: "editortab__page-styles net__tab-page-styles" }, this.activeTab == Tab.PageStyles ? h("paintbrush-fill-icon", { width: "16", height: "16" }) : h("paintbrush-icon", { width: "16", height: "16" }), i18next.t('pageStylesTab'))), h("div", { class: {
|
|
687
694
|
'tab-content': true,
|
|
688
695
|
'fadeIn': this.loaded,
|
|
689
|
-
}, part: "editor__tab-content net__tab-content" }, h(TabContents, { formState: this.formState, activeTab: this.activeTab, currentUser: this.currentUser, calendars: this.calendars, id: this.selectedConfiguration?.id ?? 'new', i18next: i18next, enableNotetaker: this.enableNotetaker, themeConfig: this.themeConfig })))) : (h("div", { class: "composable", key: this.selectedConfiguration?.id }, h("slot", null))), h("div", { key: '
|
|
696
|
+
}, part: "editor__tab-content net__tab-content" }, h(TabContents, { formState: this.formState, activeTab: this.activeTab, currentUser: this.currentUser, calendars: this.calendars, id: this.selectedConfiguration?.id ?? 'new', i18next: i18next, enableNotetaker: this.enableNotetaker, themeConfig: this.themeConfig })))) : (h("div", { class: "composable", key: this.selectedConfiguration?.id }, h("slot", null))), h("div", { key: 'b61928e8e4fa0d78e121226f6a3e99f8340ebdf1', class: "footer", part: "editor__footer net__footer" }, h("div", { key: '30803ab0e07ac02d0e004ebc39ac1bc6131de951', class: "preview", part: "editor__footer-preview net__footer-preview" }, this.enableUserFeedback && (h("button-component", { key: 'e42cf772df7a638f49c0e1ac60e8eec3240047c6', title: "Share your feedback", id: "report-issue", variant: 'basic', onClick: e => this.onFeedbackClick(e) }, h("feedback-icon", { key: '764cf3d070fe637dc9cab215aec1a6c44a23cf43' })))), h("div", { key: 'd269f4b7298212e2ccf7970df6df28473ee45441', class: "buttons", part: "editor__footer-buttons net__footer-buttons" }, h("p", { key: '884f123523f28ee72f107559d72a898e443890ae', class: {
|
|
690
697
|
'unsaved-changes': this.hasUnsavedChanges && !this.changesSaved,
|
|
691
698
|
'saved-changes': this.changesSaved,
|
|
692
699
|
'error': this.error?.message !== '',
|
|
@@ -695,17 +702,17 @@ export class NylasEditorTabs {
|
|
|
695
702
|
? i18next.t('unsavedChangesLabel')
|
|
696
703
|
: this.error?.message == '' && this.changesSaved
|
|
697
704
|
? `${i18next.t('changesSavedLabel')}!`
|
|
698
|
-
: ''), this.schedulerPreviewLink !== '' && this.action === 'edit' && (h("button-component", { key: '
|
|
705
|
+
: ''), this.schedulerPreviewLink !== '' && this.action === 'edit' && (h("button-component", { key: 'c4376c424d66bacf9be8ca1ae93982a2c4da029f', title: "Preview", type: "button", disabled: this.isLoading, clickHandler: event => {
|
|
699
706
|
event.preventDefault();
|
|
700
707
|
const previewEvent = this.previewButtonClicked.emit(this.host);
|
|
701
708
|
if (!previewEvent.defaultPrevented) {
|
|
702
709
|
window.open(parsePreviewLink(this.schedulerPreviewLink, this.selectedConfiguration), '_blank');
|
|
703
710
|
}
|
|
704
|
-
}, variant: 'basic' }, h("eye-icon", { key: '
|
|
711
|
+
}, variant: 'basic' }, h("eye-icon", { key: '9ace0c0e799278af36a06c5f741aa0804c2bc24f' }))), h("button-component", { key: '7142cb4bfc7e6b724f752b35e35e0f32a58b91f2', type: "button", disabled: this.isLoading, clickHandler: event => {
|
|
705
712
|
event.preventDefault();
|
|
706
713
|
this.cancelButtonClick.emit();
|
|
707
714
|
this.host.resetError();
|
|
708
|
-
}, variant: 'basic', part: "editor__footer-cancel net__footer-cancel" }, i18next.t('cancelButton')), h("button-component", { key: '
|
|
715
|
+
}, variant: 'basic', part: "editor__footer-cancel net__footer-cancel" }, i18next.t('cancelButton')), h("button-component", { key: '6ee330cc1981b2163ff6df25294bf6b26b99ef2c', class: { 'save-changes': this.action === 'edit' }, type: "submit", disabled: this.isLoading, part: "editor__footer-cta, net__footer-cta" }, this.isLoading ? (h("span", null, i18next.t('savingButtonText'), h("loading-icon", null), ' ')) : this.action === 'create' ? (`${i18next.t('createButtonText')}`) : (`${i18next.t('saveChangesButtonText')}`))))), this.showFeedbackModal && h("nylas-feedback-form", { key: 'fc6f589e35859d2424e7af5660cf8a130cc84c9c' })));
|
|
709
716
|
}
|
|
710
717
|
static get is() { return "nylas-editor-tabs"; }
|
|
711
718
|
static get encapsulation() { return "scoped"; }
|