From 41a2de2b3dd42ce3eec507497017dc7754393537 Mon Sep 17 00:00:00 2001 From: Sebastian Krupinski Date: Tue, 7 Jul 2026 20:48:20 -0400 Subject: [PATCH] refactor: code clean up Signed-off-by: Sebastian Krupinski --- src/components/EventEditor.vue | 15 +++-- src/components/TaskEditor.vue | 14 +++-- src/pages/ChronoPage.vue | 105 ++++++++++++++++----------------- src/stores/chronoUiStore.ts | 56 ++++-------------- 4 files changed, 82 insertions(+), 108 deletions(-) diff --git a/src/components/EventEditor.vue b/src/components/EventEditor.vue index 4c65cb5..739fb53 100644 --- a/src/components/EventEditor.vue +++ b/src/components/EventEditor.vue @@ -49,6 +49,10 @@ const calendarOptions = computed(() => })) ) +const selectedCalendar = computed(() => + (props.calendars || []).find(calendar => calendar.identifier === selectedCollectionId.value) ?? null +) + // Permissions const isExternalEvent = computed(() => { return false @@ -77,13 +81,12 @@ const cancelEdit = () => { } const saveEntity = async () => { - if (!editableEntity.value) { + if (!editableEntity.value || !selectedCalendar.value) { return } saving.value = true - const targetCollection = (props.calendars || []).find(cal => cal.identifier === selectedCollectionId.value) - emit('save', editableEntity.value as EntityObject, targetCollection || props.collection) + emit('save', editableEntity.value as EntityObject, selectedCalendar.value) saving.value = false } @@ -127,7 +130,7 @@ watch( (newEntity) => { const entity = newEntity as EntityObject | null draftEntity.value = entity?.clone ? entity.clone() : null - selectedCollectionId.value = entity?.collection || props.collection?.identifier || props.calendars?.[0]?.identifier || '' + selectedCollectionId.value = entity?.collection || props.collection?.identifier || '' }, { immediate: true }, ) @@ -138,7 +141,7 @@ watch( const entity = props.entity as EntityObject | null if (newMode === 'edit' && entity?.clone) { draftEntity.value = entity.clone() - selectedCollectionId.value = entity.collection || props.collection?.identifier || props.calendars?.[0]?.identifier || '' + selectedCollectionId.value = entity.collection || props.collection?.identifier || '' } }, ) @@ -194,6 +197,7 @@ watch( v-model="selectedCollectionId" :items="calendarOptions" label="Calendar" + :rules="[value => (value !== '' && value != null) || 'Calendar is required']" variant="outlined" density="compact" class="mb-4" @@ -293,6 +297,7 @@ watch( color="primary" variant="elevated" @click="saveEntity" + :disabled="!selectedCalendar" :loading="saving"> Save diff --git a/src/components/TaskEditor.vue b/src/components/TaskEditor.vue index 2c5ef2d..af9f2ea 100644 --- a/src/components/TaskEditor.vue +++ b/src/components/TaskEditor.vue @@ -34,6 +34,7 @@ v-model="selectedCollectionId" :items="listOptions" label="Task List" + :rules="[value => (value !== '' && value != null) || 'Task list is required']" :readonly="!isEditing || !canChangeCollection" :variant="isEditing && canChangeCollection ? 'outlined' : 'plain'" class="mb-4" @@ -243,13 +244,13 @@ watch(() => props.entity, (newEntity) => { startDate.value = ''; } - selectedCollectionId.value = draftEntity.value?.collection || props.collection?.identifier || props.lists[0]?.identifier || ''; + selectedCollectionId.value = draftEntity.value?.collection || props.collection?.identifier || ''; }, { immediate: true }); watch(() => props.mode, (newMode) => { if (newMode === 'edit' && props.entity) { draftEntity.value = cloneEntity(props.entity); - selectedCollectionId.value = draftEntity.value?.collection || props.collection?.identifier || props.lists[0]?.identifier || ''; + selectedCollectionId.value = draftEntity.value?.collection || props.collection?.identifier || ''; } }); @@ -260,6 +261,10 @@ const listOptions = computed(() => })) ); +const selectedTaskList = computed(() => + props.lists.find(list => list.identifier === selectedCollectionId.value) ?? null +); + const priorityOptions = [ { title: 'Low', value: 3 }, { title: 'Medium', value: 2 }, @@ -288,8 +293,9 @@ async function handleSave() { const { valid } = await formRef.value.validate(); if (!valid) return; - const targetCollection = props.lists.find(list => list.identifier === selectedCollectionId.value); - emit('save', editableEntity.value as EntityObject, targetCollection || props.collection); + if (!selectedTaskList.value) return; + + emit('save', editableEntity.value as EntityObject, selectedTaskList.value); } function handleCancel() { diff --git a/src/pages/ChronoPage.vue b/src/pages/ChronoPage.vue index bf468f5..8aa62ef 100644 --- a/src/pages/ChronoPage.vue +++ b/src/pages/ChronoPage.vue @@ -1,4 +1,3 @@ -