diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs index f8c9d46f6..9fd47bb31 100644 --- a/frontend/.eslintrc.cjs +++ b/frontend/.eslintrc.cjs @@ -46,7 +46,8 @@ module.exports = { 'vue/html-indent': ['error', 'tab'], // vue3 - 'vue/no-ref-object-destructure': 'error', + 'vue/no-ref-object-reactivity-loss': 'error', + 'vue/no-setup-props-reactivity-loss': 'warn', // TODO: switch to error after vite `propsDestructure` is removed }, 'parser': 'vue-eslint-parser', 'parserOptions': { diff --git a/frontend/src/components/base/BaseButton.vue b/frontend/src/components/base/BaseButton.vue index abaf85283..209585875 100644 --- a/frontend/src/components/base/BaseButton.vue +++ b/frontend/src/components/base/BaseButton.vue @@ -73,14 +73,16 @@ export interface BaseButtonProps extends /* @vue-ignore */ HTMLAttributes { } export interface BaseButtonEmits { - (e: 'click', payload: MouseEvent): void + click: [payload: MouseEvent] } -const { - type = BASE_BUTTON_TYPES_MAP.BUTTON, - disabled = false, - openExternalInNewTab = true, -} = defineProps() +withDefaults(defineProps(), { + type: BASE_BUTTON_TYPES_MAP.BUTTON, + disabled: false, + to: undefined, + href: undefined, + openExternalInNewTab: true, +}) const emit = defineEmits() diff --git a/frontend/src/components/input/editor/TipTap.vue b/frontend/src/components/input/editor/TipTap.vue index 5bb5040a0..9528508e6 100644 --- a/frontend/src/components/input/editor/TipTap.vue +++ b/frontend/src/components/input/editor/TipTap.vue @@ -443,7 +443,7 @@ if (enableDiscardShortcut) { } const editor = useEditor({ - // eslint-disable-next-line vue/no-ref-object-destructure + // eslint-disable-next-line vue/no-ref-object-reactivity-loss editable: isEditing.value, extensions: extensions, onUpdate: () => { diff --git a/frontend/src/components/sharing/linkSharing.vue b/frontend/src/components/sharing/linkSharing.vue index b63d0805d..184873a2d 100644 --- a/frontend/src/components/sharing/linkSharing.vue +++ b/frontend/src/components/sharing/linkSharing.vue @@ -234,11 +234,10 @@ import {useConfigStore} from '@/stores/config' import {useProjectStore} from '@/stores/projects' import type {IProjectView} from '@/modelTypes/IProjectView' -const props = defineProps({ - projectId: { - default: 0, - required: false, - }, +const props = withDefaults(defineProps<{ + projectId?: IProject['id'], +}>(), { + projectId: 0, }) const {t} = useI18n({useScope: 'global'}) diff --git a/frontend/src/components/tasks/partials/comments.vue b/frontend/src/components/tasks/partials/comments.vue index 3f656b702..acf21d8e6 100644 --- a/frontend/src/components/tasks/partials/comments.vue +++ b/frontend/src/components/tasks/partials/comments.vue @@ -206,6 +206,7 @@ const props = defineProps({ required: true, }, canWrite: { + type: Boolean, default: true, }, }) diff --git a/frontend/src/components/tasks/partials/editAssignees.vue b/frontend/src/components/tasks/partials/editAssignees.vue index 77be58c84..eabdb7b6d 100644 --- a/frontend/src/components/tasks/partials/editAssignees.vue +++ b/frontend/src/components/tasks/partials/editAssignees.vue @@ -56,6 +56,7 @@ const props = defineProps({ required: true, }, disabled: { + type: Boolean, default: false, }, modelValue: { diff --git a/frontend/src/components/tasks/partials/editLabels.vue b/frontend/src/components/tasks/partials/editLabels.vue index 95e59d35b..0b5261bbc 100644 --- a/frontend/src/components/tasks/partials/editLabels.vue +++ b/frontend/src/components/tasks/partials/editLabels.vue @@ -71,6 +71,7 @@ const props = defineProps({ default: 0, }, disabled: { + type: Boolean, default: false, }, creatable: { diff --git a/frontend/src/components/tasks/partials/percentDoneSelect.vue b/frontend/src/components/tasks/partials/percentDoneSelect.vue index 79017db05..0f917f6ec 100644 --- a/frontend/src/components/tasks/partials/percentDoneSelect.vue +++ b/frontend/src/components/tasks/partials/percentDoneSelect.vue @@ -50,6 +50,7 @@ const props = defineProps({ type: Number, }, disabled: { + type: Boolean, default: false, }, }) diff --git a/frontend/src/components/tasks/partials/prioritySelect.vue b/frontend/src/components/tasks/partials/prioritySelect.vue index 3b96d5a01..db2160413 100644 --- a/frontend/src/components/tasks/partials/prioritySelect.vue +++ b/frontend/src/components/tasks/partials/prioritySelect.vue @@ -37,6 +37,7 @@ const props = defineProps({ default: 0, }, disabled: { + type: Boolean, default: false, }, }) diff --git a/frontend/src/components/tasks/partials/relatedTasks.vue b/frontend/src/components/tasks/partials/relatedTasks.vue index af35ebeb9..82c8a1e0f 100644 --- a/frontend/src/components/tasks/partials/relatedTasks.vue +++ b/frontend/src/components/tasks/partials/relatedTasks.vue @@ -115,32 +115,32 @@ {{ rts.title }}
- {{ t.differentProject }} > + {{ task.differentProject }} > - {{ t.title }} + {{ task.title }}
@@ -225,6 +225,7 @@ const props = defineProps({ default: 0, }, editEnabled: { + type: Boolean, default: true, }, }) diff --git a/frontend/src/views/migrate/MigrationHandler.vue b/frontend/src/views/migrate/MigrationHandler.vue index 71bbb8701..f4349d87a 100644 --- a/frontend/src/views/migrate/MigrationHandler.vue +++ b/frontend/src/views/migrate/MigrationHandler.vue @@ -126,7 +126,7 @@ import AbstractMigrationFileService from '@/services/migrator/abstractMigrationF import {formatDateLong} from '@/helpers/time/formatDate' import {parseDateOrNull} from '@/helpers/parseDateOrNull' -import {MIGRATORS, Migrator} from './migrators' +import {MIGRATORS, type Migrator} from './migrators' import {useTitle} from '@/composables/useTitle' import {useProjectStore} from '@/stores/projects' @@ -150,9 +150,9 @@ const migrationJustStarted = ref(false) const migrator = computed(() => MIGRATORS[props.service]) -// eslint-disable-next-line vue/no-ref-object-destructure +// eslint-disable-next-line vue/no-ref-object-reactivity-loss const migrationService = shallowReactive(new AbstractMigrationService(migrator.value.id)) -// eslint-disable-next-line vue/no-ref-object-destructure +// eslint-disable-next-line vue/no-ref-object-reactivity-loss const migrationFileService = shallowReactive(new AbstractMigrationFileService(migrator.value.id)) useTitle(() => t('migrate.titleService', {name: migrator.value.name})) diff --git a/frontend/src/views/tasks/ShowTasks.vue b/frontend/src/views/tasks/ShowTasks.vue index 0a5318051..ca014b0e5 100644 --- a/frontend/src/views/tasks/ShowTasks.vue +++ b/frontend/src/views/tasks/ShowTasks.vue @@ -52,10 +52,10 @@ >