feat(kanban): add setting for default bucket

This commit is contained in:
kolaente 2023-09-03 16:08:21 +02:00
parent 3373b5fc45
commit c803020537
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
5 changed files with 39 additions and 16 deletions

View File

@ -1,21 +1,26 @@
<template>
<BaseButton class="dropdown-item">
<span class="icon" v-if="icon">
<span
v-if="icon"
class="icon is-small"
:class="iconClass"
>
<Icon :icon="icon"/>
</span>
<span>
<slot />
<slot/>
</span>
</BaseButton>
</template>
<script lang="ts" setup>
import BaseButton, { type BaseButtonProps } from '@/components/base//BaseButton.vue'
import BaseButton, {type BaseButtonProps} from '@/components/base//BaseButton.vue'
import Icon from '@/components/misc/Icon'
import type { IconProp } from '@fortawesome/fontawesome-svg-core'
import type {IconProp} from '@fortawesome/fontawesome-svg-core'
export interface DropDownItemProps extends /* @vue-ignore */ BaseButtonProps {
icon?: IconProp,
iconClass?: object | string,
}
defineProps<DropDownItemProps>()
@ -24,7 +29,6 @@ defineProps<DropDownItemProps>()
<style scoped lang="scss">
.dropdown-item {
color: var(--text);
display: block;
font-size: 0.875rem;
line-height: 1.5;
padding: $item-padding;
@ -52,10 +56,7 @@ defineProps<DropDownItemProps>()
.icon {
padding-right: .5rem;
&:not(.has-text-success) {
color: var(--grey-300) !important;
}
color: var(--grey-300);
}
.has-text-danger .icon {

View File

@ -334,6 +334,9 @@
"doneBucketHint": "All tasks moved into this bucket will automatically marked as done.",
"doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.",
"doneBucketSavedSuccess": "The done bucket has been saved successfully.",
"defaultBucket": "Default bucket",
"defaultBucketHint": "When creating tasks without specifying a bucket, they will be added to this bucket.",
"defaultBucketSavedSuccess": "The default bucket has been saved successfully.",
"deleteLast": "You cannot remove the last bucket.",
"addTaskPlaceholder": "Enter the new task title…",
"addTask": "Add a task",

View File

@ -20,6 +20,7 @@ export interface IProject extends IAbstract {
backgroundBlurHash: string
parentProjectId: number
doneBucketId: number
defaultBucketId: number
created: Date
updated: Date

View File

@ -24,6 +24,7 @@ export default class ProjectModel extends AbstractModel<IProject> implements IPr
backgroundBlurHash = ''
parentProjectId = 0
doneBucketId = 0
defaultBucketId = 0
created: Date = null
updated: Date = null

View File

@ -97,12 +97,19 @@
<dropdown-item
@click.stop="toggleDoneBucket(bucket)"
v-tooltip="$t('project.kanban.doneBucketHintExtended')"
:icon-class="{'has-text-success': bucket.id === project.doneBucketId}"
icon="check-double"
>
<span class="icon is-small" :class="{'has-text-success': bucket.id === project.doneBucketId}">
<icon icon="check-double"/>
</span>
{{ $t('project.kanban.doneBucket') }}
</dropdown-item>
<dropdown-item
@click.stop="toggleDefaultBucket(bucket)"
v-tooltip="$t('project.kanban.defaultBucketHint')"
:icon-class="{'has-text-primary': bucket.id === project.defaultBucketId}"
icon="th"
>
{{ $t('project.kanban.defaultBucket') }}
</dropdown-item>
<dropdown-item
@click.stop="() => collapseBucket(bucket)"
>
@ -111,12 +118,10 @@
<dropdown-item
:class="{'is-disabled': buckets.length <= 1}"
@click.stop="() => deleteBucketModal(bucket.id)"
class="has-text-danger"
v-tooltip="buckets.length <= 1 ? $t('project.kanban.deleteLast') : ''"
icon-class="has-text-danger"
icon="trash-alt"
>
<span class="icon is-small">
<icon icon="trash-alt"/>
</span>
{{ $t('misc.delete') }}
</dropdown-item>
</dropdown>
@ -597,6 +602,18 @@ function dragstart(bucket: IBucket) {
sourceBucket.value = bucket.id
}
async function toggleDefaultBucket(bucket: IBucket) {
const defaultBucketId = project.value.defaultBucketId === bucket.id
? 0
: bucket.id
await projectStore.updateProject({
...project.value,
defaultBucketId,
})
success({message: t('project.kanban.defaultBucketSavedSuccess')})
}
async function toggleDoneBucket(bucket: IBucket) {
const doneBucketId = project.value.doneBucketId === bucket.id
? 0