Dedicated Assigned to me Tasks Tab

This commit is contained in:
Marc Rejohn Castillano 2026-02-24 23:25:27 +08:00
parent 546c254326
commit 7c3a5a1cef

View File

@ -151,9 +151,7 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
dateRange: _selectedDateRange,
latestAssigneeByTaskId: latestAssigneeByTaskId,
);
final summaryDashboard = _StatusSummaryRow(
counts: _taskStatusCounts(filteredTasks),
);
final filterHeader = Wrap(
spacing: 12,
runSpacing: 12,
@ -241,17 +239,21 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
),
],
);
final listBody = TasQAdaptiveList<Task>(
items: filteredTasks,
// reusable helper for rendering a list given a subset of tasks
Widget makeList(List<Task> tasksList) {
final summary = _StatusSummaryRow(
counts: _taskStatusCounts(tasksList),
);
return TasQAdaptiveList<Task>(
items: tasksList,
onRowTap: (task) => context.go('/tasks/${task.id}'),
summaryDashboard: summaryDashboard,
summaryDashboard: summary,
filterHeader: filterHeader,
onRequestRefresh: () {
// For server-side pagination, update the query provider
ref.read(tasksQueryProvider.notifier).state = const TaskQuery(
offset: 0,
limit: 50,
);
ref.read(tasksQueryProvider.notifier).state =
const TaskQuery(offset: 0, limit: 50);
},
isLoading: false,
columns: [
@ -322,7 +324,9 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
],
mobileTileBuilder: (context, task, actions) {
final ticketId = task.ticketId;
final ticket = ticketId == null ? null : ticketById[ticketId];
final ticket = ticketId == null
? null
: ticketById[ticketId];
final officeId = ticket?.officeId ?? task.officeId;
final officeName = officeId == null
? 'Unassigned office'
@ -332,7 +336,10 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
latestAssigneeByTaskId[task.id],
);
final subtitle = _buildSubtitle(officeName, task.status);
final hasMention = _hasTaskMention(notificationsAsync, task);
final hasMention = _hasTaskMention(
notificationsAsync,
task,
);
final typingState = ref.watch(
typingIndicatorProvider(task.id),
);
@ -397,6 +404,16 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
);
},
);
}
final currentUserId = profileAsync.valueOrNull?.id;
final myTasks = currentUserId == null
? <Task>[]
: filteredTasks
.where(
(t) => latestAssigneeByTaskId[t.id] == currentUserId,
)
.toList();
return Column(
mainAxisSize: MainAxisSize.max,
@ -415,7 +432,29 @@ class _TasksListScreenState extends ConsumerState<TasksListScreen> {
),
),
),
Expanded(child: listBody),
Expanded(
child: DefaultTabController(
length: 2,
child: Column(
children: [
const TabBar(
tabs: [
Tab(text: 'My Tasks'),
Tab(text: 'All Tasks'),
],
),
Expanded(
child: TabBarView(
children: [
makeList(myTasks),
makeList(filteredTasks),
],
),
),
],
),
),
),
],
);
},