fix(project): don't allow archival or deletion of default projects in UI

This commit is contained in:
kolaente 2024-02-27 15:37:30 +01:00
parent 3d39fc3960
commit 8a82093233
Signed by untrusted user: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 14 additions and 3 deletions

View File

@ -1,5 +1,5 @@
<template>
<BaseButton class="dropdown-item">
<BaseButton class="dropdown-item" :class="{'is-disabled': disabled}">
<span
v-if="icon"
class="icon is-small"
@ -21,6 +21,7 @@ import type {IconProp} from '@fortawesome/fontawesome-svg-core'
export interface DropDownItemProps extends /* @vue-ignore */ BaseButtonProps {
icon?: IconProp,
iconClass?: object | string,
disabled?: boolean,
}
defineProps<DropDownItemProps>()

View File

@ -69,6 +69,8 @@
<DropdownItem
:to="{ name: 'project.settings.archive', params: { projectId: project.id } }"
icon="archive"
:disabled="isDefaultProject"
v-tooltip="isDefaultProject ? $t('menu.cantArchiveIsDefault') : ''"
>
{{ $t('menu.archive') }}
</DropdownItem>
@ -98,6 +100,8 @@
:to="{ name: 'project.settings.delete', params: { projectId: project.id } }"
icon="trash-alt"
class="has-text-danger"
:disabled="isDefaultProject"
v-tooltip="isDefaultProject ? $t('menu.cantDeleteIsDefault') : ''"
>
{{ $t('menu.delete') }}
</DropdownItem>
@ -106,7 +110,7 @@
</template>
<script setup lang="ts">
import {ref, computed, watchEffect, type PropType} from 'vue'
import {computed, type PropType, ref, watchEffect} from 'vue'
import BaseButton from '@/components/base/BaseButton.vue'
import Dropdown from '@/components/misc/dropdown.vue'
@ -118,6 +122,7 @@ import type {ISubscription} from '@/modelTypes/ISubscription'
import {isSavedFilter} from '@/services/savedFilter'
import {useConfigStore} from '@/stores/config'
import {useProjectStore} from '@/stores/projects'
import {useAuthStore} from '@/stores/auth'
const props = defineProps({
project: {
@ -146,4 +151,7 @@ function setSubscriptionInStore(sub: ISubscription) {
}
projectStore.setProject(updatedProject)
}
const authStore = useAuthStore()
const isDefaultProject = computed(() => props.project?.id === authStore.settings.defaultProjectId)
</script>

View File

@ -978,7 +978,9 @@
"setBackground": "Set background",
"share": "Share",
"newProject": "New project",
"createProject": "Create project"
"createProject": "Create project",
"cantArchiveIsDefault": "You cannot archive this because it is your default project.",
"cantDeleteIsDefault": "You cannot delete this because it is your default project."
},
"apiConfig": {
"url": "Vikunja URL",