feat : include collaborator tasks in dashboard, my-tasks, and project filters
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -172,7 +172,10 @@ const totalHoursThisWeek = computed(() =>
|
|||||||
)
|
)
|
||||||
|
|
||||||
const myTasks = computed(() =>
|
const myTasks = computed(() =>
|
||||||
tasks.value.filter(t => t.assignee?.id === auth.user?.id)
|
tasks.value.filter(t =>
|
||||||
|
t.assignee?.id === auth.user?.id
|
||||||
|
|| t.collaborators?.some(c => c.id === auth.user?.id)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
const myTasksDone = computed(() =>
|
const myTasksDone = computed(() =>
|
||||||
|
|||||||
@@ -140,33 +140,43 @@ async function loadReferenceData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function loadTasks() {
|
async function loadTasks() {
|
||||||
const params: Record<string, string | number | boolean | string[]> = {
|
const baseParams: Record<string, string | number | boolean | string[]> = {
|
||||||
archived: false,
|
archived: false,
|
||||||
}
|
}
|
||||||
if (selectedAssigneeId.value) {
|
|
||||||
params.assignee = `/api/users/${selectedAssigneeId.value}`
|
|
||||||
}
|
|
||||||
if (selectedProjectId.value) {
|
if (selectedProjectId.value) {
|
||||||
params.project = `/api/projects/${selectedProjectId.value}`
|
baseParams.project = `/api/projects/${selectedProjectId.value}`
|
||||||
}
|
}
|
||||||
if (selectedGroupId.value) {
|
if (selectedGroupId.value) {
|
||||||
params.group = `/api/task_groups/${selectedGroupId.value}`
|
baseParams.group = `/api/task_groups/${selectedGroupId.value}`
|
||||||
}
|
}
|
||||||
if (selectedPriorityId.value) {
|
if (selectedPriorityId.value) {
|
||||||
params.priority = `/api/task_priorities/${selectedPriorityId.value}`
|
baseParams.priority = `/api/task_priorities/${selectedPriorityId.value}`
|
||||||
}
|
}
|
||||||
if (selectedEffortId.value) {
|
if (selectedEffortId.value) {
|
||||||
params.effort = `/api/task_efforts/${selectedEffortId.value}`
|
baseParams.effort = `/api/task_efforts/${selectedEffortId.value}`
|
||||||
}
|
}
|
||||||
if (selectedTagId.value) {
|
if (selectedTagId.value) {
|
||||||
params['tags[]'] = `/api/task_tags/${selectedTagId.value}`
|
baseParams['tags[]'] = `/api/task_tags/${selectedTagId.value}`
|
||||||
}
|
}
|
||||||
if (sortBy.value === 'deadline') {
|
if (sortBy.value === 'deadline') {
|
||||||
params['order[deadline]'] = 'asc'
|
baseParams['order[deadline]'] = 'asc'
|
||||||
} else if (sortBy.value === 'scheduledStart') {
|
} else if (sortBy.value === 'scheduledStart') {
|
||||||
params['order[scheduledStart]'] = 'asc'
|
baseParams['order[scheduledStart]'] = 'asc'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedAssigneeId.value) {
|
||||||
|
const userIri = `/api/users/${selectedAssigneeId.value}`
|
||||||
|
const [assigneeTasks, collabTasks] = await Promise.all([
|
||||||
|
taskService.getFiltered({ ...baseParams, assignee: userIri }),
|
||||||
|
taskService.getFiltered({ ...baseParams, 'collaborators[]': userIri }),
|
||||||
|
])
|
||||||
|
const map = new Map<number, Task>()
|
||||||
|
for (const t of assigneeTasks) map.set(t.id, t)
|
||||||
|
for (const t of collabTasks) map.set(t.id, t)
|
||||||
|
tasks.value = [...map.values()].sort((a, b) => b.id - a.id)
|
||||||
|
} else {
|
||||||
|
tasks.value = await taskService.getFiltered(baseParams)
|
||||||
}
|
}
|
||||||
tasks.value = await taskService.getFiltered(params)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadAll() {
|
async function loadAll() {
|
||||||
|
|||||||
@@ -298,7 +298,10 @@ const filteredTasks = computed(() => {
|
|||||||
result = result.filter(t => t.tags?.some(tag => tag.id === selectedTagId.value))
|
result = result.filter(t => t.tags?.some(tag => tag.id === selectedTagId.value))
|
||||||
}
|
}
|
||||||
if (selectedAssigneeId.value) {
|
if (selectedAssigneeId.value) {
|
||||||
result = result.filter(t => t.assignee?.id === selectedAssigneeId.value)
|
result = result.filter(t =>
|
||||||
|
t.assignee?.id === selectedAssigneeId.value
|
||||||
|
|| t.collaborators?.some(c => c.id === selectedAssigneeId.value)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
if (selectedStatusId.value) {
|
if (selectedStatusId.value) {
|
||||||
result = result.filter(t => t.status?.id === selectedStatusId.value)
|
result = result.filter(t => t.status?.id === selectedStatusId.value)
|
||||||
|
|||||||
Reference in New Issue
Block a user