From 4f38f25d11aed82ca81d682345011aa4974da3a9 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 15 Sep 2022 18:04:58 +0200 Subject: [PATCH 01/12] feat: add minimal task wizard --- src/components/misc/create-edit.vue | 6 +- .../quick-actions/quick-actions.vue | 2 +- src/i18n/lang/en.json | 7 +- src/router/index.ts | 10 +++ src/views/tasks/CreateTask.vue | 83 +++++++++++++++++++ 5 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/views/tasks/CreateTask.vue diff --git a/src/components/misc/create-edit.vue b/src/components/misc/create-edit.vue index 35441c32..fe07ed02 100644 --- a/src/components/misc/create-edit.vue +++ b/src/components/misc/create-edit.vue @@ -9,7 +9,7 @@ @close="$router.back()" :loading="loading" > -
+
@@ -72,6 +72,10 @@ defineProps({ type: Boolean, default: false, }, + padding: { + type: Boolean, + default: true, + }, }) const emit = defineEmits(['create', 'primary', 'tertiary']) diff --git a/src/components/quick-actions/quick-actions.vue b/src/components/quick-actions/quick-actions.vue index a9b3058e..dd3dd170 100644 --- a/src/components/quick-actions/quick-actions.vue +++ b/src/components/quick-actions/quick-actions.vue @@ -186,7 +186,7 @@ export default defineComponent({ if (this.selectedCmd !== null) { switch (this.selectedCmd.action) { case CMD_NEW_TASK: - return this.$t('quickActions.newTask') + return this.$t('task.create.title') case CMD_NEW_LIST: return this.$t('quickActions.newList') case CMD_NEW_NAMESPACE: diff --git a/src/i18n/lang/en.json b/src/i18n/lang/en.json index 4674f6e8..41658568 100644 --- a/src/i18n/lang/en.json +++ b/src/i18n/lang/en.json @@ -616,6 +616,12 @@ "select": "Select a date range", "noTasks": "Nothing to do — Have a nice day!" }, + "create": { + "heading": "Create a task in {list}", + "title": "Enter the title of the new task…", + "descriptionPlaceholder": "Enter your description here…", + "description": "Add description…" + }, "detail": { "chooseDueDate": "Click here to set a due date", "chooseStartDate": "Click here to set a start date", @@ -933,7 +939,6 @@ "lists": "Lists", "teams": "Teams", "newList": "Enter the title of the new list…", - "newTask": "Enter the title of the new task…", "newNamespace": "Enter the title of the new namespace…", "newTeam": "Enter the name of the new team…", "createTask": "Create a task in the current list ({title})", diff --git a/src/router/index.ts b/src/router/index.ts index 2d150edf..f36f1025 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -23,6 +23,7 @@ import UpcomingTasksComponent from '../views/tasks/ShowTasks.vue' import LinkShareAuthComponent from '../views/sharing/LinkSharingAuth.vue' import ListNamespaces from '../views/namespaces/ListNamespaces.vue' import TaskDetailView from '../views/tasks/TaskDetailView.vue' +import CreateTask from '../views/tasks/CreateTask.vue' // Team Handling import ListTeamsComponent from '../views/teams/ListTeams.vue' // Label Handling @@ -348,6 +349,15 @@ const router = createRouter({ }, props: route => ({ listId: Number(route.params.listId as string) }), }, + { + path: '/lists/:listId/create-task', + name: 'task.create', + component: CreateTask, + meta: { + showAsModal: true, + }, + props: route => ({ listId: Number(route.params.listId as string) }), + }, { path: '/lists/:listId', name: 'list.index', diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue new file mode 100644 index 00000000..7fc4d05c --- /dev/null +++ b/src/views/tasks/CreateTask.vue @@ -0,0 +1,83 @@ + + + + + From ec01f516a8f20c8bd83e532e27cece0fcb4bd741 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 21 Sep 2022 21:24:03 +0200 Subject: [PATCH 02/12] fix: use pina list store --- src/views/tasks/CreateTask.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index 7fc4d05c..9a97d087 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -31,7 +31,6 @@ From d950aae3a507cab91e55fd980ad2db2d99adae87 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 21 Sep 2022 21:59:37 +0200 Subject: [PATCH 04/12] feat(task wizard): show error message when no title is provided --- src/views/tasks/CreateTask.vue | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index 2edf99f1..9cf0e296 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -12,7 +12,10 @@ v-model="newTask.title" v-focus /> - +

+ {{ errorMessage }} +

+ { : t('task.new') }) +const errorMessage = ref('') const descriptionFormVisible = ref(false) const newTask = ref(new TaskModel({})) const taskService = ref(new TaskService()) @@ -70,6 +74,12 @@ const taskService = ref(new TaskService()) const parsedTask = computed(() => parseTaskText(newTask.value.title, getQuickAddMagicMode())) async function create() { + if (newTask.value.title === '') { + errorMessage.value = t('list.create.addTitleRequired') + return + } + errorMessage.value = '' + newTask.value.listId = props.listId newTask.value.title = parsedTask.value.text const assignees = await findAssignees(parsedTask.value.assignees) From 169f95af337e8d81270b3b48fd7a47a90f0b2cac Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 21 Sep 2022 22:18:35 +0200 Subject: [PATCH 05/12] fix(task wizard): creating new task --- src/services/task.ts | 4 ++-- src/views/tasks/CreateTask.vue | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/task.ts b/src/services/task.ts index bb41b685..15d2d21e 100644 --- a/src/services/task.ts +++ b/src/services/task.ts @@ -51,8 +51,8 @@ export default class TaskService extends AbstractService { model.startDate = parseDate(model.startDate) model.endDate = parseDate(model.endDate) model.doneAt = parseDate(model.doneAt) - model.created = formatISO(new Date(model.created)) - model.updated = formatISO(new Date(model.updated)) + model.created = +(model.created) ? parseDate(model.created) : null + model.updated = +(model.updated) ? parseDate(model.updated) : null // remove all nulls, these would create empty reminders for (const index in model.reminderDates) { diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index 9cf0e296..485f83f4 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -83,7 +83,7 @@ async function create() { newTask.value.listId = props.listId newTask.value.title = parsedTask.value.text const assignees = await findAssignees(parsedTask.value.assignees) - const dueDate = parsedTask.value.date !== null ? formatISO(parsedTask.date) : null + const dueDate = parsedTask.value.date !== null ? formatISO(parsedTask.value.date) : null const finalTask = new TaskModel({ ...newTask.value, From e492ce40d2539d6764cda23370015caf4d58f5c5 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 21 Sep 2022 22:44:42 +0200 Subject: [PATCH 06/12] feat(task wizard): allow setting a due date via popup or quick add magic --- src/components/input/datepicker.vue | 8 +++++--- src/views/tasks/CreateTask.vue | 26 +++++++++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/components/input/datepicker.vue b/src/components/input/datepicker.vue index 733a9fab..89affd4d 100644 --- a/src/components/input/datepicker.vue +++ b/src/components/input/datepicker.vue @@ -1,8 +1,10 @@ From 8c61d99393a18b969881c621864ffc2532254c48 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 22 Sep 2022 18:59:21 +0200 Subject: [PATCH 10/12] feat(task wizard): styling --- src/views/tasks/CreateTask.vue | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index aa61c5d1..ca5157a3 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -30,16 +30,16 @@ :preview-is-default="false" class="m-4" /> -
+
- + {{ date ? formatDateShort(date) : t('task.attributes.dueDate') }} -
+
From bfb8ab407b24cf9caa8fcf505a53c1e396d924e5 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 22 Sep 2022 19:18:16 +0200 Subject: [PATCH 11/12] feat(task wizard): add label removal --- src/views/tasks/CreateTask.vue | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index ca5157a3..798855c1 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -45,6 +45,7 @@ :style="{'background': label.hexColor, 'color': label.textColor}" class="tag mr-2"> {{ label.title }} +
@@ -122,6 +123,16 @@ const realLabels = computed(() => { ] }) +function removeLabel(label: ILabel) { + while (true) { // Using a loop to remove all labels, including possible duplicates added via quick add magic + const index = labels.value.findIndex(el => el.toLowerCase() === label.title.toLowerCase()) + if (index === -1) { + break + } + labels.value.splice(index, 1) + } +} + async function create() { if (newTask.value.title === '') { errorMessage.value = t('list.create.addTitleRequired') From e520cd705341e52b46915129dd553a66994f3258 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 22 Sep 2022 19:24:50 +0200 Subject: [PATCH 12/12] feat(task wizard): add label add button --- src/views/tasks/CreateTask.vue | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/views/tasks/CreateTask.vue b/src/views/tasks/CreateTask.vue index 798855c1..b28843d9 100644 --- a/src/views/tasks/CreateTask.vue +++ b/src/views/tasks/CreateTask.vue @@ -39,6 +39,9 @@ {{ date ? formatDateShort(date) : t('task.attributes.dueDate') }} + + {{ t('task.detail.actions.label') }} +