/// Tab enumeration and helpers for the Programmer Tasks list screen. /// /// This-slice tabs (Task 10): /// Admin: [monitor, mine, all] /// Non-admin: [mine, all] /// /// approvals and daySheets are deferred to later slices. enum ProgrammerTasksTab { monitor, approvals, mine, all, daySheets } /// Returns the ordered tab list for the current role. /// /// Admin: [monitor, approvals, mine, all] /// Programmer: [mine, all, daySheets] List programmerTasksTabsFor({required bool isStrictAdmin}) { if (isStrictAdmin) { return [ ProgrammerTasksTab.monitor, ProgrammerTasksTab.approvals, ProgrammerTasksTab.mine, ProgrammerTasksTab.all, ]; } return [ ProgrammerTasksTab.mine, ProgrammerTasksTab.all, ProgrammerTasksTab.daySheets, ]; } /// Parses a URL query-parameter value to a [ProgrammerTasksTab]. /// /// Valid values: 'monitor', 'approvals', 'mine', 'all', 'day-sheets'. /// Returns null for unrecognised or null input. ProgrammerTasksTab? parseProgrammerTasksTab(String? q) { switch (q) { case 'monitor': return ProgrammerTasksTab.monitor; case 'approvals': return ProgrammerTasksTab.approvals; case 'mine': return ProgrammerTasksTab.mine; case 'all': return ProgrammerTasksTab.all; case 'day-sheets': case 'daySheets': return ProgrammerTasksTab.daySheets; default: return null; } } /// Human-readable tab label for display in [TabBar]. String programmerTasksTabLabel(ProgrammerTasksTab t) { switch (t) { case ProgrammerTasksTab.monitor: return 'Monitor'; case ProgrammerTasksTab.approvals: return 'Approvals'; case ProgrammerTasksTab.mine: return 'Mine'; case ProgrammerTasksTab.all: return 'All'; case ProgrammerTasksTab.daySheets: return 'Day Sheets'; } }