Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 355ebe2f authored by Christoph Wurst's avatar Christoph Wurst
Browse files

Persist the calendar URI for an appointment config

parent c5bdbd4b
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -93,7 +93,10 @@ export default {
			configs: 'allConfigs',
		}),
		defaultConfig() {
			return AppointmentConfig.createDefault(this.$store)
			return AppointmentConfig.createDefault(
				this.calendarUrlToUri(this.$store.getters.sortedCalendars[0].url),
				this.$store.getters.getResolvedTimezone,
			)
		},
		hasAtLeastOneCalendar() {
			return !!this.$store.getters.sortedCalendars[0]
@@ -111,6 +114,12 @@ export default {
		closeModal() {
			this.showModalForNewConfig = false
		},
		calendarUrlToUri(url) {
			// Trim trailing slash and split into URL parts
			const parts = url.replace(/\/$/, '').split('/')
			// The last one is the URI
			return parts[parts.length - 1]
		},
		async deleteConfig(config) {
			logger.info('Deleting config', { config })

+16 −6
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@
						<div class="appointment-config-modal__form__row appointment-config-modal__form__row--wrapped">
							<div class="calendar-select">
								<label>{{ t('calendar', 'Calendar') }}</label>
								<CalendarPicker
								<CalendarPicker v-if="calendar !== undefined"
									:calendar="calendar"
									:calendars="sortedCalendars"
									:show-calendar-on-select="false"
@@ -201,11 +201,14 @@ export default {
				return this.sortedCalendars[0]
			}

			const url = this.editing.targetCalendarUri
			return this.sortedCalendars.find(cal => cal.url === url)
			const uri = this.editing.targetCalendarUri
			return this.sortedCalendars.find(cal => this.calendarUrlToUri(cal.url) === uri)
		},
		defaultConfig() {
			return AppointmentConfig.createDefault(this.$store)
			return AppointmentConfig.createDefault(
				this.calendarUrlToUri(this.$store.getters.sortedCalendars[0].url),
				this.$store.getters.getResolvedTimezone,
			)
		},
	},
	watch: {
@@ -218,13 +221,20 @@ export default {
	},
	methods: {
		reset() {
			this.editing = this.config?.clone() ?? AppointmentConfig.createDefault(this.$store)
			this.editing = this.config.clone()

			this.enablePreparationDuration = !!this.editing.preparationDuration
			this.enableFollowupDuration = !!this.editing.followupDuration
			this.showConfirmation = false
		},
		calendarUrlToUri(url) {
			// Trim trailing slash and split into URL parts
			const parts = url.replace(/\/$/, '').split('/')
			// The last one is the URI
			return parts[parts.length - 1]
		},
		changeCalendar(calendar) {
			this.editing.targetCalendarUri = calendar.url
			this.editing.targetCalendarUri = this.calendarUrlToUri(calendar.url)
		},
		async save() {
			if (!this.enablePreparationDuration) {
+6 −5
Original line number Diff line number Diff line
@@ -111,12 +111,13 @@ export default class AppointmentConfig {
	}

	/**
	 * Create a default appointment config instance from the given vuex store
	 * Create a default appointment config instance
	 *
	 * @param {object} store The vuex store object (e.g. this.$store)
	 * @param {string} targetCalendarUri
	 * @param {string} timezoneId
	 * @return {AppointmentConfig} Default appointment config instance
	 */
	static createDefault(store) {
	static createDefault(targetCalendarUri, timezoneId) {
		// Set default availability to Mo-Fr 9-5
		// TODO: fetch user's working hours if possible
		const tsAtTime = (hours, minutes) => Math.round((new Date()).setHours(hours, minutes, 0, 0) / 1000)
@@ -130,9 +131,9 @@ export default class AppointmentConfig {
			name: '',
			description: '',
			location: '',
			targetCalendarUri: store.getters.sortedCalendars[0].url,
			targetCalendarUri,
			availability: {
				timezoneId: store.getters.getResolvedTimezone,
				timezoneId,
				slots,
			},
			visibility: 'PUBLIC',