From bef0142db590da1988800a9b34a9f1459f8725de Mon Sep 17 00:00:00 2001 From: Dominik Pschenitschni Date: Fri, 18 Feb 2022 13:24:23 +0100 Subject: [PATCH 1/3] feat: create KanbanBucket from ListKanban --- .../tasks/partials/KanbanBucket.vue | 439 +++++++ .../{kanban-card.vue => KanbanCard.vue} | 0 src/models/bucket.ts | 13 +- src/views/list/ListKanban.vue | 1065 +++++------------ 4 files changed, 763 insertions(+), 754 deletions(-) create mode 100644 src/components/tasks/partials/KanbanBucket.vue rename src/components/tasks/partials/{kanban-card.vue => KanbanCard.vue} (100%) diff --git a/src/components/tasks/partials/KanbanBucket.vue b/src/components/tasks/partials/KanbanBucket.vue new file mode 100644 index 000000000..4c924c9cd --- /dev/null +++ b/src/components/tasks/partials/KanbanBucket.vue @@ -0,0 +1,439 @@ + + + + + \ No newline at end of file diff --git a/src/components/tasks/partials/kanban-card.vue b/src/components/tasks/partials/KanbanCard.vue similarity index 100% rename from src/components/tasks/partials/kanban-card.vue rename to src/components/tasks/partials/KanbanCard.vue diff --git a/src/models/bucket.ts b/src/models/bucket.ts index 2e0552491..0514d5b9e 100644 --- a/src/models/bucket.ts +++ b/src/models/bucket.ts @@ -7,13 +7,13 @@ import type {ITask} from '@/modelTypes/ITask' import type {IUser} from '@/modelTypes/IUser' export default class BucketModel extends AbstractModel implements IBucket { - id = 0 - title = '' - listId = '' - limit = 0 + id: number = 0 + title: string = '' + listId: number = '' + limit: number = 0 tasks: ITask[] = [] - isDoneBucket = false - position = 0 + isDoneBucket: boolean = false + position: boolean = 0 createdBy: IUser = null created: Date = null @@ -24,7 +24,6 @@ export default class BucketModel extends AbstractModel implements IBuck this.assignData(data) this.tasks = this.tasks.map(t => new TaskModel(t)) - this.createdBy = new UserModel(this.createdBy) this.created = new Date(this.created) this.updated = new Date(this.updated) diff --git a/src/views/list/ListKanban.vue b/src/views/list/ListKanban.vue index 45fdc3d45..2a93fab00 100644 --- a/src/views/list/ListKanban.vue +++ b/src/views/list/ListKanban.vue @@ -1,7 +1,7 @@ - + + + + \ No newline at end of file -- 2.40.1 From 193212ad054b554b8447acd698d08dd5ec120eb5 Mon Sep 17 00:00:00 2001 From: Dominik Pschenitschni Date: Mon, 21 Feb 2022 16:48:59 +0100 Subject: [PATCH 2/3] feat: Kanban Buckets # Conflicts: # src/features/kanban/TaskCard.vue # src/helpers/saveCollapsedBucketState.ts --- .../kanban/Bucket.vue} | 234 ++++------- src/features/kanban/BucketNew.vue | 73 ++++ .../kanban/TaskCard.vue} | 2 +- src/features/kanban/TaskNew.vue | 94 +++++ src/helpers/saveCollapsedBucketState.ts | 24 +- src/models/task.ts | 2 + src/views/list/ListKanban.vue | 368 +++++++++--------- 7 files changed, 438 insertions(+), 359 deletions(-) rename src/{components/tasks/partials/KanbanBucket.vue => features/kanban/Bucket.vue} (65%) create mode 100644 src/features/kanban/BucketNew.vue rename src/{components/tasks/partials/KanbanCard.vue => features/kanban/TaskCard.vue} (98%) create mode 100644 src/features/kanban/TaskNew.vue diff --git a/src/components/tasks/partials/KanbanBucket.vue b/src/features/kanban/Bucket.vue similarity index 65% rename from src/components/tasks/partials/KanbanBucket.vue rename to src/features/kanban/Bucket.vue index 4c924c9cd..917211750 100644 --- a/src/components/tasks/partials/KanbanBucket.vue +++ b/src/features/kanban/Bucket.vue @@ -3,15 +3,15 @@ import {ref, computed, nextTick} from 'vue' import {useStore} from 'vuex' import {useI18n} from 'vue-i18n' import Draggable from 'vuedraggable' +import { useVModels } from '@vueuse/core' import {success} from '@/message' import BucketModel from '@/models/bucket' import TaskModel from '@/models/task' -import {getCollapsedBucketState, saveCollapsedBucketState} from '@/helpers/saveCollapsedBucketState' - import Dropdown from '@/components/misc/dropdown.vue' -import KanbanCard from '@/components/tasks/partials/KanbanCard.vue' +import KanbanCard from '@/feature/kanban/KanbanCard.vue' +import KanbanTaskNew from '@/feature/kanban/KanbanTaskNew.vue' const MIN_SCROLL_HEIGHT_PERCENT = 0.25 @@ -25,33 +25,19 @@ const props = defineProps<{ params: Object shouldAcceptDrop: boolean isDraggingTask: boolean + tasksUpdating: { [taskId: TaskModel['id']]: boolean }, }>() -const emit = defineEmits(['openDeleteBucketModal', 'dragstart', 'updateTaskPosition']) +const emit = defineEmits([ + 'openDeleteBucketModal', + 'dragstart', + 'dragend', + 'update:isCollapsed', +]) const {t} = useI18n() const store = useStore() -const loading = computed(() => - store.state.loading && store.state.loadingModule === 'kanban', -) - - -const isCollapsed = ref(false) -function collapseBucket() { - isCollapsed.value = true - // TODO: - // saveCollapsedBucketState(this.listId, this.collapsedBuckets) -} -function unCollapseBucket() { - if (!isCollapsed.value) { - return - } - - isCollapsed.value = false - - // TODO: - // saveCollapsedBucketState(this.listId, this.collapsedBuckets) -} +const { isCollapsed } = useVModels(props, emit) const bucketTitleEditable = ref(true) async function saveBucketTitle(bucketTitle: string) { @@ -138,30 +124,7 @@ function scrollTaskContainerToBottom() { taskContainer.value.scrollTop = taskContainer.value.scrollHeight } -const hasNewTaskInput = ref(false) -function toggleShowNewTaskInput() { - hasNewTaskInput.value = !hasNewTaskInput.value -} -const newTaskText = ref('') -const newTaskError = ref(false) - -async function addTaskToBucket() { - if (newTaskText.value === '') { - newTaskError.value = true - return - } - newTaskError.value = false - - const task = await store.dispatch('tasks/createNewTask', { - title: newTaskText.value, - bucketId: props.bucket.id, - listId: props.bucket.listId, - }) - newTaskText.value = '' - store.commit('kanban/addTaskToBucket', task) - scrollTaskContainerToBottom() -}