|
|
|
@ -1,9 +1,5 @@
|
|
|
|
|
<template>
|
|
|
|
|
<router-link
|
|
|
|
|
:to="taskDetailRoute"
|
|
|
|
|
:class="{'is-loading': taskService.loading}"
|
|
|
|
|
class="task loader-container"
|
|
|
|
|
>
|
|
|
|
|
<div :class="{'is-loading': taskService.loading}" class="task loader-container" @click.stop.self="openTaskDetail">
|
|
|
|
|
<fancycheckbox
|
|
|
|
|
:disabled="(isArchived || disabled) && !canMarkAsDone"
|
|
|
|
|
@change="markAsDone"
|
|
|
|
@ -16,7 +12,8 @@
|
|
|
|
|
class="mr-1"
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
<router-link
|
|
|
|
|
:to="taskDetailRoute"
|
|
|
|
|
:class="{ 'done': task.done, 'show-list': showList && taskList !== null}"
|
|
|
|
|
class="tasktext"
|
|
|
|
|
>
|
|
|
|
@ -96,7 +93,7 @@
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
<checklist-summary :task="task"/>
|
|
|
|
|
</div>
|
|
|
|
|
</router-link>
|
|
|
|
|
|
|
|
|
|
<progress
|
|
|
|
|
class="progress is-small"
|
|
|
|
@ -117,26 +114,27 @@
|
|
|
|
|
|
|
|
|
|
<BaseButton
|
|
|
|
|
:class="{'is-favorite': task.isFavorite}"
|
|
|
|
|
@click.prevent="toggleFavorite"
|
|
|
|
|
@click="toggleFavorite"
|
|
|
|
|
class="favorite"
|
|
|
|
|
>
|
|
|
|
|
<icon icon="star" v-if="task.isFavorite"/>
|
|
|
|
|
<icon :icon="['far', 'star']" v-else/>
|
|
|
|
|
</BaseButton>
|
|
|
|
|
<slot />
|
|
|
|
|
</router-link>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import {ref, watch, shallowReactive, toRef, type PropType, onMounted, onBeforeUnmount, computed} from 'vue'
|
|
|
|
|
import {useI18n} from 'vue-i18n'
|
|
|
|
|
import {useRouter} from 'vue-router'
|
|
|
|
|
|
|
|
|
|
import TaskModel, { getHexColor } from '@/models/task'
|
|
|
|
|
import type {ITask} from '@/modelTypes/ITask'
|
|
|
|
|
|
|
|
|
|
import PriorityLabel from '@/components/tasks/partials/priorityLabel.vue'
|
|
|
|
|
import Labels from '@/components/tasks/partials//labels.vue'
|
|
|
|
|
import DeferTask from '@/components/tasks/partials//defer-task.vue'
|
|
|
|
|
import Labels from '@/components/tasks/partials/labels.vue'
|
|
|
|
|
import DeferTask from '@/components/tasks/partials/defer-task.vue'
|
|
|
|
|
import ChecklistSummary from '@/components/tasks/partials/checklist-summary.vue'
|
|
|
|
|
|
|
|
|
|
import User from '@/components/misc/user.vue'
|
|
|
|
@ -186,6 +184,7 @@ const props = defineProps({
|
|
|
|
|
const emit = defineEmits(['task-updated'])
|
|
|
|
|
|
|
|
|
|
const {t} = useI18n({useScope: 'global'})
|
|
|
|
|
const router = useRouter()
|
|
|
|
|
|
|
|
|
|
const taskService = shallowReactive(new TaskService())
|
|
|
|
|
const task = ref<ITask>(new TaskModel())
|
|
|
|
@ -275,6 +274,14 @@ function hideDeferDueDatePopup(e) {
|
|
|
|
|
showDefer.value = false
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const taskLink = ref(null)
|
|
|
|
|
function openTaskDetail() {
|
|
|
|
|
const isTextSelected = window.getSelection().toString()
|
|
|
|
|
if (!isTextSelected) {
|
|
|
|
|
router.push(taskDetailRoute.value)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
@ -287,15 +294,19 @@ function hideDeferDueDatePopup(e) {
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
border-radius: $radius;
|
|
|
|
|
border: 2px solid transparent;
|
|
|
|
|
|
|
|
|
|
color: var(--text);
|
|
|
|
|
transition: color ease $transition-duration;
|
|
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
color: var(--grey-900);
|
|
|
|
|
background-color: var(--grey-100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&:focus-within {
|
|
|
|
|
box-shadow: 0 0 0 2px hsla(var(--primary-hsl), 0.5);
|
|
|
|
|
|
|
|
|
|
a.tasktext {
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.tasktext,
|
|
|
|
|
&.tasktext {
|
|
|
|
|
white-space: nowrap;
|
|
|
|
@ -338,6 +349,15 @@ function hideDeferDueDatePopup(e) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a {
|
|
|
|
|
color: var(--text);
|
|
|
|
|
transition: color ease $transition-duration;
|
|
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
color: var(--grey-900);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.favorite {
|
|
|
|
|
opacity: 0;
|
|
|
|
|
text-align: center;
|
|
|
|
@ -354,7 +374,8 @@ function hideDeferDueDatePopup(e) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&:hover .favorite {
|
|
|
|
|
&:hover .favorite,
|
|
|
|
|
.favorite:focus {
|
|
|
|
|
opacity: 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|