fix: reactive const assignment (#2692)
continuous-integration/drone/push Build is passing Details

Resolves #2691

Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #2692
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
This commit is contained in:
Dominik Pschenitschni 2022-11-12 16:14:32 +00:00 committed by konrad
parent 06775cf4c7
commit 4c4adfdf4e
3 changed files with 29 additions and 17 deletions

View File

@ -85,9 +85,7 @@ const showSavedMessage = ref(false)
async function save(title: string) { async function save(title: string) {
// We only want to save if the title was actually changed. // We only want to save if the title was actually changed.
// Because the contenteditable does not have a change event // so we only continue if the task title changed.
// we're building it ourselves and only continue
// if the task title changed.
if (title === props.task.title) { if (title === props.task.title) {
return return
} }

View File

@ -2,12 +2,13 @@
<Multiselect <Multiselect
class="control is-expanded" class="control is-expanded"
:placeholder="$t('list.search')" :placeholder="$t('list.search')"
@search="findLists"
:search-results="foundLists" :search-results="foundLists"
@select="select"
label="title" label="title"
v-model="list"
:select-placeholder="$t('list.searchSelect')" :select-placeholder="$t('list.searchSelect')"
:model-value="list"
@update:model-value="Object.assign(list, $event)"
@select="select"
@search="findLists"
> >
<template #searchResult="{option}"> <template #searchResult="{option}">
<span class="list-namespace-title search-result">{{ namespace((option as IList).namespaceId) }} ></span> <span class="list-namespace-title search-result">{{ namespace((option as IList).namespaceId) }} ></span>
@ -20,12 +21,16 @@
import {reactive, ref, watch} from 'vue' import {reactive, ref, watch} from 'vue'
import type {PropType} from 'vue' import type {PropType} from 'vue'
import {useI18n} from 'vue-i18n' import {useI18n} from 'vue-i18n'
import ListModel from '@/models/list'
import type {IList} from '@/modelTypes/IList' import type {IList} from '@/modelTypes/IList'
import Multiselect from '@/components/input/multiselect.vue' import type {INamespace} from '@/modelTypes/INamespace'
import {useListStore} from '@/stores/lists' import {useListStore} from '@/stores/lists'
import {useNamespaceStore} from '@/stores/namespaces' import {useNamespaceStore} from '@/stores/namespaces'
import type { INamespace } from '@/modelTypes/INamespace'
import ListModel from '@/models/list'
import Multiselect from '@/components/input/multiselect.vue'
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {

View File

@ -8,7 +8,12 @@
}" }"
> >
<div class="task-view"> <div class="task-view">
<Heading v-model:task="task" :can-write="canWrite" ref="heading"/> <Heading
:task="task"
@update:task="Object.assign(task, $event)"
:can-write="canWrite"
ref="heading"
/>
<h6 class="subtitle" v-if="parent && parent.namespace && parent.list"> <h6 class="subtitle" v-if="parent && parent.namespace && parent.list">
{{ getNamespaceTitle(parent.namespace) }} > {{ getNamespaceTitle(parent.namespace) }} >
<router-link :to="{ name: 'list.index', params: { listId: parent.list.id } }"> <router-link :to="{ name: 'list.index', params: { listId: parent.list.id } }">
@ -61,14 +66,14 @@
<div class="date-input"> <div class="date-input">
<datepicker <datepicker
v-model="task.dueDate" v-model="task.dueDate"
@close-on-change="() => saveTask()" @close-on-change="saveTask()"
:choose-date-label="$t('task.detail.chooseDueDate')" :choose-date-label="$t('task.detail.chooseDueDate')"
:disabled="taskService.loading || !canWrite" :disabled="taskService.loading || !canWrite"
:ref="e => setFieldRef('dueDate', e)" :ref="e => setFieldRef('dueDate', e)"
/> />
<BaseButton <BaseButton
@click="() => {task.dueDate = null;saveTask()}"
v-if="task.dueDate && canWrite" v-if="task.dueDate && canWrite"
@click="() => {task.dueDate = null;saveTask()}"
class="remove"> class="remove">
<span class="icon is-small"> <span class="icon is-small">
<icon icon="times"></icon> <icon icon="times"></icon>
@ -101,7 +106,7 @@
<div class="date-input"> <div class="date-input">
<datepicker <datepicker
v-model="task.startDate" v-model="task.startDate"
@close-on-change="() => saveTask()" @close-on-change="saveTask()"
:choose-date-label="$t('task.detail.chooseStartDate')" :choose-date-label="$t('task.detail.chooseStartDate')"
:disabled="taskService.loading || !canWrite" :disabled="taskService.loading || !canWrite"
:ref="e => setFieldRef('startDate', e)" :ref="e => setFieldRef('startDate', e)"
@ -128,7 +133,7 @@
<div class="date-input"> <div class="date-input">
<datepicker <datepicker
v-model="task.endDate" v-model="task.endDate"
@close-on-change="() => saveTask()" @close-on-change="saveTask()"
:choose-date-label="$t('task.detail.chooseEndDate')" :choose-date-label="$t('task.detail.chooseEndDate')"
:disabled="taskService.loading || !canWrite" :disabled="taskService.loading || !canWrite"
:ref="e => setFieldRef('endDate', e)" :ref="e => setFieldRef('endDate', e)"
@ -179,8 +184,11 @@
<repeat-after <repeat-after
:disabled="!canWrite" :disabled="!canWrite"
:ref="e => setFieldRef('repeatAfter', e)" :ref="e => setFieldRef('repeatAfter', e)"
v-model="task" :model-value="task"
@update:model-value="saveTask" @update:model-value="(newTask) => {
Object.assign(task, newTask)
saveTask()
}"
/> />
</div> </div>
</transition> </transition>
@ -219,7 +227,8 @@
<!-- Description --> <!-- Description -->
<div class="details content description"> <div class="details content description">
<description <description
v-model="task" :model-value="task"
@update:modelValue="Object.assign(task, $event)"
:can-write="canWrite" :can-write="canWrite"
:attachment-upload="attachmentUpload" :attachment-upload="attachmentUpload"
/> />