[CR] sorting v-select, [bugy]

This commit is contained in:
romankko2 committed 2023-09-15 17:24:53 +02:00
1 parent 7c94f4c576
commit 4ed354904c
16 files changed
+195 -23

No files matched your search

@@ -14,7 +14,7 @@
<tr class="cursor-pointer" v-for="subtask in subtasks" :key="subtask.id" @click.stop="editTask(subtask, false)">
<td>{{ subtask.project_code }}</td>
<td>{{ subtask.title ?? subtask.master_task?.name ?? subtask.master_task }}</td>
<td>{{ subtask.title ?? subtask.master_task }}</td>
<td v-if="subtask?.deadline">{{ getDeadline(subtask) }}</td>
<v-tooltip text="Deadline z Mastertasku" location="end">
<template v-slot:activator="{ props }">
@@ -1,10 +1,10 @@
<template>
<div>
<Z-tasks-search @search="onSearch" @employee-selected="onEmployeeSelected" />
<Z-tasks-search @search="onSearch" @employee-selected="onEmployeeSelected" @update-sort-order="onUpdateSortOrder" />
<W-loadable :content="filteredUnscheduledTasks" :emptyMessage="searchQuery.length ? 'Neboli nájdené žiadne úlohy' : 'Nenašli sa žiadne záznamy'">
<A-unscheduled-table :subtasks="filteredUnscheduledTasks" />
<A-unscheduled-table :subtasks="selectedTasks" />
</W-loadable>
</div>
@@ -23,7 +23,8 @@ export default {
data() {
return {
searchQuery: ''
searchQuery: '',
sortOrder: null
}
},
@@ -32,15 +33,57 @@ export default {
},
computed: {
...mapGetters('tm', ['unscheduledSubtasks']),
...mapGetters('tm', ['unscheduledSubtasks', 'mastertasks']),
filteredUnscheduledTasks() {
if (!this.unscheduledSubtasks)
return null
return this.unscheduledSubtasks.filter(subtask => {
return this.filterParams(this.searchQuery, subtask.master_task?.name || subtask.master_task) || this.filterParams(this.searchQuery, subtask.project_code)
return this.unscheduledSubtasks.filter(subtask => {
return this.filterParams(this.searchQuery, subtask.master_task?.name || subtask.title) || this.filterParams(this.searchQuery, subtask.project_code)
})
},
sortedUnscheduledTasks() {
if (!this.unscheduledSubtasks)
return null
let sortedTasks = this.unscheduledSubtasks
//Sorting by name A-Z
if (this.sortOrder === 'nameAsc') {
sortedTasks.sort((a, b) => {
const nameA = (a.title || a.master_task || '').toLowerCase()
const nameB = (b.title || b.master_task || '').toLowerCase()
return nameA.localeCompare(nameB)
})
//Sorting by name Z-A
} else if (this.sortOrder === 'nameDesc') {
sortedTasks.sort((a, b) => {
const nameA = (a.title || a.master_task || '').toLowerCase()
const nameB = (b.title || b.master_task || '').toLowerCase()
return nameB.localeCompare(nameA)
})
//Sorting by date Newest-Oldest
} else if (this.sortOrder === 'deadlineDesc') {
sortedTasks.sort((a, b) => {
const deadlineA = a.deadline ? new Date(a.deadline) : new Date(this.getMasterTaskDeadline(a))
const deadlineB = b.deadline ? new Date(b.deadline) : new Date(this.getMasterTaskDeadline(b))
return deadlineB - deadlineA
})
//Sorting by date Oldest-Newest
} else if (this.sortOrder === 'deadlineAsc') {
sortedTasks.sort((a, b) => {
const deadlineA = a.deadline ? new Date(a.deadline) : new Date(this.getMasterTaskDeadline(a))
const deadlineB = b.deadline ? new Date(b.deadline) : new Date(this.getMasterTaskDeadline(b))
return deadlineA - deadlineB
})
}
return sortedTasks
},
selectedTasks() {
return this.sortOrder ? this.sortedUnscheduledTasks : this.filteredUnscheduledTasks
}
},
@@ -53,9 +96,19 @@ export default {
this.$store.dispatch('tm/loadUnscheduledSubtasks', id)
},
onUpdateSortOrder(newSortOrder) {
this.sortOrder = newSortOrder
},
filterParams(searchQuery, row) {
if(!row) return false
return row.toLowerCase().includes(searchQuery.toLowerCase())
},
getMasterTaskDeadline(subtask) {
if(!this.mastertasks) return ''
const masterTask = this.mastertasks.find((mt) => mt.id === subtask.master_task_id)
return masterTask ? masterTask.deadline : ''
}
}
}