Fixed horizontal scrollbar, limit per page by 10 rows on desktop
Fixed duplicate entries in activity logs
This commit is contained in:
@@ -226,6 +226,16 @@ class _TaskDetailScreenState extends ConsumerState<TaskDetailScreen>
|
||||
);
|
||||
final showAssign = canAssign && task.status != 'completed';
|
||||
final assignments = assignmentsAsync.valueOrNull ?? <TaskAssignment>[];
|
||||
final profileById = {
|
||||
for (final profile in profilesAsync.valueOrNull ?? <Profile>[])
|
||||
profile.id: profile,
|
||||
};
|
||||
final hasAssignedItStaff = assignments.any((assignment) {
|
||||
if (assignment.taskId != task.id) {
|
||||
return false;
|
||||
}
|
||||
return profileById[assignment.userId]?.role == 'it_staff';
|
||||
});
|
||||
final canUpdateStatus = _canUpdateStatus(
|
||||
profileAsync.valueOrNull,
|
||||
assignments,
|
||||
@@ -396,7 +406,12 @@ class _TaskDetailScreenState extends ConsumerState<TaskDetailScreen>
|
||||
runSpacing: 8,
|
||||
crossAxisAlignment: WrapCrossAlignment.center,
|
||||
children: [
|
||||
_buildStatusChip(context, task, canUpdateStatus),
|
||||
_buildStatusChip(
|
||||
context,
|
||||
task,
|
||||
canUpdateStatus,
|
||||
hasAssignedItStaff,
|
||||
),
|
||||
_MetaBadge(label: 'Office', value: officeName),
|
||||
_MetaBadge(
|
||||
label: 'Task #',
|
||||
@@ -3472,16 +3487,29 @@ class _TaskDetailScreenState extends ConsumerState<TaskDetailScreen>
|
||||
BuildContext context,
|
||||
Task task,
|
||||
bool canUpdateStatus,
|
||||
bool hasAssignedItStaff,
|
||||
) {
|
||||
final chip = StatusPill(
|
||||
label: task.status.toUpperCase(),
|
||||
isEmphasized: task.status != 'queued',
|
||||
);
|
||||
|
||||
if (!canUpdateStatus) {
|
||||
final isTerminal =
|
||||
task.status == 'completed' ||
|
||||
task.status == 'cancelled' ||
|
||||
task.status == 'closed';
|
||||
|
||||
if (!canUpdateStatus || isTerminal) {
|
||||
return chip;
|
||||
}
|
||||
|
||||
final statusOptions = _statusOptions.where((status) {
|
||||
if (status == 'in_progress' && !hasAssignedItStaff) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).toList();
|
||||
|
||||
return PopupMenuButton<String>(
|
||||
onSelected: (value) async {
|
||||
// If cancelling, require a reason — show dialog with spinner.
|
||||
@@ -3592,7 +3620,7 @@ class _TaskDetailScreenState extends ConsumerState<TaskDetailScreen>
|
||||
}
|
||||
}
|
||||
},
|
||||
itemBuilder: (context) => _statusOptions
|
||||
itemBuilder: (context) => statusOptions
|
||||
.map(
|
||||
(status) => PopupMenuItem(
|
||||
value: status,
|
||||
|
||||
Reference in New Issue
Block a user