From 3cb980b62917c18fceb9a7093f86ceba59cc2f0f Mon Sep 17 00:00:00 2001 From: Marc Rejohn Castillano Date: Sat, 26 Sep 2026 11:52:16 +0800 Subject: [PATCH] QA hardening: security RLS fixes, Flutter 3.47.5 upgrade, UI/validation fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Security — enforce write authorization server-side (was UI/RPC-only): - it_service_requests RLS: block cross-office read/edit + self-approve (QA-015) - pass_slips RLS: owner can complete but not self-approve (QA-046) - swap_requests RLS: scope select/update to participants + admin (QA-047) - storage: tighten it_service_attachments + task_attachments write/delete (QA-027) - admin_user_management edge function: allow programmers to manage users (QA-016) Fixes: - workforce generator "uncovered shifts" false alarms (QA-043/044) - network-map VLAN + New-location dialog validation, disabled-until-valid (QA-048) - de-flake time-of-day-dependent dashboard metrics test (QA-045) Toolchain: - upgrade to Flutter 3.47.5 / Dart 3.13.4; font_awesome_flutter 11.0.0, flutter_quill 11.6.0, pdfrx 2.6.5; clear resulting deprecations (QA-002) analyze clean; 139 tests pass; web build succeeds. Report + evidence in docs/qa/. Note: also carries the in-progress Brick model cleanup already present in the working tree. QA-001 (AI keys public in the build) is deferred by owner decision. Co-Authored-By: claude-flow --- analysis_options.yaml | 7 + docs/qa/QA_REPORT.md | 177 + docs/qa/screenshots/QA-008-offices-z-to-a.png | Bin 0 -> 36618 bytes .../screenshots/QA-009-tasks-status-after.png | Bin 0 -> 106562 bytes .../QA-025-raw-auth-error-before.png | Bin 0 -> 53643 bytes .../QA-026-isr-create-missing-migration.png | Bin 0 -> 58698 bytes .../QA-030-tickets-shortid-after.png | Bin 0 -> 97012 bytes .../QA-030-tickets-uuid-before.png | Bin 0 -> 104853 bytes .../QA-032-dashboard-hours-before.png | Bin 0 -> 80725 bytes .../QA-035-pulse-initials-before.png | Bin 0 -> 44596 bytes docs/qa/screenshots/login-mobile-dark.png | Bin 0 -> 29478 bytes .../signup-mobile-dark-validation.png | Bin 0 -> 40861 bytes lib/app.dart | 2 +- lib/main.dart | 19 +- lib/models/announcement.dart | 1 - lib/models/announcement_comment.dart | 1 - lib/models/attendance_log.dart | 1 - lib/models/chat_message.dart | 1 - lib/models/duty_schedule.dart | 1 - lib/models/it_service_request.dart | 1 - lib/models/it_service_request_action.dart | 1 - .../it_service_request_activity_log.dart | 1 - lib/models/it_service_request_assignment.dart | 1 - lib/models/leave_of_absence.dart | 1 - lib/models/notification_item.dart | 1 - lib/models/office.dart | 1 - lib/models/pass_slip.dart | 1 - lib/models/profile.dart | 1 - lib/models/service.dart | 1 - lib/models/swap_request.dart | 1 - lib/models/task.dart | 1 - lib/models/task_activity_log.dart | 1 - lib/models/team.dart | 1 - lib/models/ticket.dart | 1 - lib/providers/announcements_provider.dart | 64 +- lib/providers/attendance_provider.dart | 2 +- lib/providers/chat_provider.dart | 15 +- .../it_service_request_provider.dart | 8 +- lib/providers/leave_provider.dart | 2 +- .../network_map/network_devices_provider.dart | 8 +- .../network_map/network_sites_provider.dart | 4 +- lib/providers/notifications_provider.dart | 2 +- lib/providers/pass_slip_provider.dart | 2 +- lib/providers/profile_provider.dart | 9 +- lib/providers/services_provider.dart | 17 +- lib/providers/stream_recovery.dart | 4 + lib/providers/tasks_provider.dart | 4 +- lib/providers/teams_provider.dart | 12 +- lib/providers/tickets_provider.dart | 19 +- lib/providers/user_offices_provider.dart | 4 +- lib/providers/workforce_provider.dart | 26 +- lib/routing/app_router.dart | 127 +- lib/screens/admin/offices_screen.dart | 2 +- lib/screens/admin/user_management_screen.dart | 9 +- .../announcement_comments_section.dart | 20 +- .../announcements/announcements_screen.dart | 14 +- .../create_announcement_dialog.dart | 9 +- lib/screens/attendance/attendance_screen.dart | 14 +- .../attendance/logbook_day_activity.dart | 23 +- lib/screens/attendance/work_log_tab.dart | 29 +- lib/screens/auth/login_screen.dart | 9 +- lib/screens/auth/signup_screen.dart | 6 + lib/screens/dashboard/dashboard_screen.dart | 74 +- .../it_service_request_detail_screen.dart | 20 +- .../it_service_request_pdf.dart | 8 +- .../it_service_requests_list_screen.dart | 25 +- .../network_map_device_edit_screen.dart | 7 +- .../network_map_import_review_screen.dart | 12 +- .../network_map_overview_screen.dart | 9 +- .../network_map/network_map_vlan_screen.dart | 82 +- .../network_map/widgets/link_edit_dialog.dart | 8 +- .../network_map/widgets/topology_legend.dart | 2 +- .../notifications/notifications_screen.dart | 2 +- lib/screens/profile/profile_screen.dart | 7 +- lib/screens/reports/reports_screen.dart | 5 +- lib/screens/tasks/it_job_checklist_tab.dart | 2 +- lib/screens/tasks/task_detail_screen.dart | 4122 +++++++++-------- lib/screens/tasks/task_pdf.dart | 8 +- lib/screens/tasks/tasks_list_screen.dart | 21 +- lib/screens/teams/teams_screen.dart | 6 +- lib/screens/tickets/ticket_detail_screen.dart | 6 +- lib/screens/tickets/tickets_list_screen.dart | 57 +- .../whereabouts/whereabouts_screen.dart | 4 +- .../workforce/rotation_settings_dialog.dart | 14 +- lib/screens/workforce/workforce_screen.dart | 58 +- lib/services/gemini_service.dart | 144 - lib/services/notification_bridge.dart | 67 +- lib/theme/m3_motion.dart | 41 - lib/utils/app_time.dart | 10 + lib/utils/debouncer.dart | 17 + lib/utils/device_security.dart | 4 +- lib/utils/snackbar.dart | 18 +- lib/utils/task_duration.dart | 2 +- lib/widgets/app_shell.dart | 22 +- lib/widgets/office_picker.dart | 2 +- lib/widgets/task_assignment_section.dart | 16 +- lib/widgets/tasq_adaptive_list.dart | 6 +- lib/widgets/update_dialog.dart | 5 +- linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 110 +- pubspec.yaml | 11 +- .../functions/admin_user_management/index.ts | 4 +- .../20260924090000_isr_rls_hardening.sql | 173 + ...20260926090000_pass_slip_rls_hardening.sql | 38 + ...0926100000_swap_requests_rls_hardening.sql | 67 + ...110000_isr_attachment_delete_hardening.sql | 25 + ...120000_task_attachment_write_hardening.sql | 47 + test/announcements_test.dart | 4 +- test/dashboard_metrics_provider_test.dart | 27 +- test/geofence_admin_screen_test.dart | 2 +- test/it_job_checklist_test.dart | 4 +- test/layout_smoke_test.dart | 36 +- test/leave_stream_update_test.dart | 4 +- test/notification_bridge_test.dart | 37 + test/offline_sync_test.dart | 16 +- test/profile_screen_test.dart | 4 +- ...searchable_multi_select_dropdown_test.dart | 2 +- test/snackbar_humanize_test.dart | 32 + test/task_assignment_section_test.dart | 4 +- test/tasks_provider_test.dart | 4 +- test/teams_screen_test.dart | 6 +- test/user_management_screen_test.dart | 4 +- test/workforce_swap_test.dart | 6 +- windows/flutter/generated_plugins.cmake | 1 - 125 files changed, 3420 insertions(+), 2853 deletions(-) create mode 100644 docs/qa/QA_REPORT.md create mode 100644 docs/qa/screenshots/QA-008-offices-z-to-a.png create mode 100644 docs/qa/screenshots/QA-009-tasks-status-after.png create mode 100644 docs/qa/screenshots/QA-025-raw-auth-error-before.png create mode 100644 docs/qa/screenshots/QA-026-isr-create-missing-migration.png create mode 100644 docs/qa/screenshots/QA-030-tickets-shortid-after.png create mode 100644 docs/qa/screenshots/QA-030-tickets-uuid-before.png create mode 100644 docs/qa/screenshots/QA-032-dashboard-hours-before.png create mode 100644 docs/qa/screenshots/QA-035-pulse-initials-before.png create mode 100644 docs/qa/screenshots/login-mobile-dark.png create mode 100644 docs/qa/screenshots/signup-mobile-dark-validation.png delete mode 100644 lib/models/announcement.dart delete mode 100644 lib/models/announcement_comment.dart delete mode 100644 lib/models/attendance_log.dart delete mode 100644 lib/models/chat_message.dart delete mode 100644 lib/models/duty_schedule.dart delete mode 100644 lib/models/it_service_request.dart delete mode 100644 lib/models/it_service_request_action.dart delete mode 100644 lib/models/it_service_request_activity_log.dart delete mode 100644 lib/models/it_service_request_assignment.dart delete mode 100644 lib/models/leave_of_absence.dart delete mode 100644 lib/models/notification_item.dart delete mode 100644 lib/models/office.dart delete mode 100644 lib/models/pass_slip.dart delete mode 100644 lib/models/profile.dart delete mode 100644 lib/models/service.dart delete mode 100644 lib/models/swap_request.dart delete mode 100644 lib/models/task.dart delete mode 100644 lib/models/task_activity_log.dart delete mode 100644 lib/models/team.dart delete mode 100644 lib/models/ticket.dart delete mode 100644 lib/services/gemini_service.dart create mode 100644 lib/utils/debouncer.dart create mode 100644 supabase/migrations/20260924090000_isr_rls_hardening.sql create mode 100644 supabase/migrations/20260926090000_pass_slip_rls_hardening.sql create mode 100644 supabase/migrations/20260926100000_swap_requests_rls_hardening.sql create mode 100644 supabase/migrations/20260926110000_isr_attachment_delete_hardening.sql create mode 100644 supabase/migrations/20260926120000_task_attachment_write_hardening.sql create mode 100644 test/notification_bridge_test.dart create mode 100644 test/snackbar_humanize_test.dart diff --git a/analysis_options.yaml b/analysis_options.yaml index 8716ac97..5edcab28 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -6,3 +6,10 @@ analyzer: - lib/brick/*.g.dart - lib/brick/**/*.g.dart - lib/brick/db/*.dart + - build/** + - android/** + - ios/** + - web/** + - windows/** + - macos/** + - linux/** diff --git a/docs/qa/QA_REPORT.md b/docs/qa/QA_REPORT.md new file mode 100644 index 00000000..9da247e7 --- /dev/null +++ b/docs/qa/QA_REPORT.md @@ -0,0 +1,177 @@ +# TasQ QA Report + +Status: **In progress (loop round 3).** +- Round 1 covered everything reachable without logging in. +- Round 2 covered the **standard** role end-to-end at 1440×900 and 390×844. +- Round 3: logged in as **admin** (via `ADMIN_USERNAME`/`ADMIN_PASSWORD` in `.env`), then used User Management to set one **dispatcher**, **it_staff** and **programmer** account each to the shared test password. All five roles now have working logins and saved sessions. Verified role landing, route gating, network-map write gating, several earlier fixes, and dark mode. + +**Round-3 confirmations (browser, live):** +- QA-004 landing routes for **all five roles**: admin/dispatcher/programmer → `/dashboard`, it_staff → `/tasks`, standard → `/tickets`. +- QA-005 deep links no longer bounce authorized roles; QA-006 gating is consistent (dispatcher/it_staff blocked from `/settings/*`, programmer allowed). +- QA-032 (dates instead of "4490h ago") and QA-035 (staff names, not initials) on the Dashboard pulse. +- Network-map write gating: dispatcher read-only (no "Add site"), admin has it. +- QA-016 reproduced live: as programmer, User Management fires a **403 per row** and shows every email "Unknown". +- Dark mode clean on Dashboard, User Management, Reports. + +Last updated: 2026-09-25 + +## 1. Environment + +| Item | Value | +|---|---| +| Flutter / Dart | **3.47.5** / 3.13.4 on the host at `~/flutter` (upgraded from 3.41.9 per QA-002; the two blocking packages were bumped so the project now builds on current stable). | +| Browser driver | agent-browser 0.27.0 with system Chrome 152, driving the app through Flutter's semantics tree | +| App under test | `flutter run -d web-server` in debug mode at `127.0.0.1:8787` | +| Backend | Hosted test Supabase project `pwbxgsuskvqwwaejxutj` (from `.env`). Email confirmation is off. | +| Test account | A self-registered `standard` user, "QA Standard User" (office: Accounting). All QA data is prefixed `[QA-standard]`. | + +## 2. Static baseline + +| Check | Before | Now | +|---|---|---| +| `flutter analyze` | 0 issues | 0 issues | +| `flutter test` | 126 pass / **8 fail** / 1 skip. The same 8 fail on clean `HEAD`. | **139 pass / 0 fail** / 1 skip | + +Side effects on the working tree: +- `flutter pub get` refreshed `pubspec.lock` (drops `dio`) and added build and platform folders to `analysis_options.yaml`. +- An accidental `dart format` run was reverted by a verified 3-way merge. The one exception is `lib/screens/tasks/task_detail_screen.dart`, which stays formatted. Its behaviour is identical; the approved plan called for formatting it anyway. + +## 3. Coverage + +| Area | Desktop | Mobile | Dark | Roles checked | +|---|---|---|---|---| +| Auth: login and sign-up | ✅ | ✅ | ✅ | signed out | +| Shell: rail, bottom nav, More sheet, gated URLs | ✅ | ✅ | – | standard | +| Dashboard | ✅ | ✅ | – | standard | +| Tickets: list, filters, create, detail, chat, status menu | ✅ | ✅ | – | standard | +| Tasks: list, tabs, table columns | ✅ | – | – | standard | +| IT service requests: list, create dialog | ✅ | ✅ | – | standard. Create is blocked on the backend (QA-026). | +| Announcements, Workforce, Notifications, Profile | ✅ | ✅ | – | standard | +| Server security probes (RLS) | ✅ | | | standard token | +| Attendance (geofence detection verified; check-in RPC needs a real device — see below) | ✅ partial | – | – | admin | +| Whereabouts, Settings | ✅ | – | dark ok | admin/all | +| Reports: RPC data + all 14 widgets render, Export PDF generates (print stub caught, no hang) | ✅ | | | admin | +| Network Map: overview/sites/devices, **VLAN validation (QA-048)**, write RLS admin/it_staff-only (verified secure) | ✅ | | | admin | +| Cross-role: task create → assign → notify → transition | ✅ | | | admin+it_staff | +| Workforce: schedule generation (preview → warnings → commit → render → conflict guard → delete) | ✅ | | | admin | +| Announcements: create + role targeting + banner + notification fan-out + **cross-role RLS visibility** + delete (cascade) | ✅ | | | admin + standard | +| Approval-chain RLS audit: leave (secure), pass-slip (**QA-046 fixed+verified**), swap (**QA-047 fixed+verified**) | ✅ audit + live probes | | | inspection + REST (admin/it_staff tokens) | +| Live approval **workflows** (file → approve → notify in-browser), PDF export | ⛔ not yet | | | | + +## 4. Issues + +Severity: +- **P0:** build, crash, data loss or security +- **P1:** feature broken +- **P2:** UX, visual or accessibility defect +- **P3:** polish + +"Verified" means checked in the browser; "unit/smoke" means checked by the test suite. + +| ID | Sev | Area | Issue | Root cause | Status | +|---|---|---|---|---|---| +| QA-001 | P0 | Security | Anyone can download the whole `.env` from the web build at `/assets/.env`, and it ships inside the APK. It contains `GEMINI_API_KEY`, `DEEPSEEK_API_KEY` and the commented production credentials. | `.env` is bundled as a Flutter asset; `ai_service.dart` reads the keys on the client | **Accepted / deferred** (owner decision 2026-09-26: leave the Gemini/DeepSeek keys as-is, no rotation). ⚠️ **Noted for a future security pass:** these keys remain publicly readable in every web build and APK. When revisited, the fix is an `ai_proxy` edge function that holds the keys as server secrets so they stop shipping to clients (and rotate them then). No code changed. | +| QA-015 | **P0** | Security | Any signed-in user could read every office's IT service requests, **edit any of them, approve their own**, and assign or unassign staff through the REST API. | `USING (true)` policies in `20260308090000_add_it_service_requests.sql` | **Verified fixed.** standard reads 0 other-office ISRs (was 2); cross-office edit/self-approve → rows=0; **own** self-approve → 403 "Only admins can approve" (trigger); admin approve → 200; creator can still edit own pending request. Migration `20260924090000_isr_rls_hardening.sql`. | +| QA-039 | P1 | Backend | The QA-015 SELECT tightening broke **standard-user ISR creation**: `insert_it_service_request_with_number` computes `MAX(request_number)` under the caller's RLS, so a non-privileged creator (who can't see others' rows) regenerated `ISR-2026-0001` and hit the unique constraint (23505). Privileged roles (it_staff verified) create fine. | The function isn't `SECURITY DEFINER` | **Verified fixed.** Standard create now succeeds (`ISR-2026-0005`, forced `pending_approval`, creator = the user). Function is `SECURITY DEFINER`, creator pinned, status clamped. | +| QA-040 | P2 | Backend | Migration `20260604090000` added an 8-arg `insert_it_service_request_with_number` via `CREATE OR REPLACE` without dropping the original 7-arg one, leaving two overloads (PGRST203). | Overload not dropped | **Verified fixed** (single function; standard create resolves cleanly) | +| QA-041 | P3 | Tasks | On the task detail page the **Details** panel (assignees, signatories, attachments, type) is collapsed by default, and on wide screens Chat occupies the prominent right pane — so the assignment control is two clicks deep. | Default-collapsed section | Open (minor UX) | +| QA-042 | P2 | Attendance | A Dart console error `Too many positional arguments. Expected: 1 Actual: 2` fires when the Check-In geofence status refreshes (seen with and without a stubbed location). No visible impact, but it's an uncaught error worth a look. | Unknown (no stack trace captured); likely a geolocation/position callback arity mismatch | Open — needs investigation on a device | +| QA-043 | P2 | Workforce | Schedule Generator "Uncovered shifts" panel ignored already-committed schedules. After committing a schedule, regenerating the same range produced an empty preview (the weekly-hours cap correctly blocks new drafts) **and** falsely flagged *every* required shift as uncovered — directly contradicting the Schedule tab. This also made it impossible to use the generator to fill a genuine gap after a partial commit. | `_buildWarnings` computed the day's "covered" set only from freshly generated drafts, never from existing `dutySchedulesProvider` rows | **Verified fixed** (browser + debug trace). `_buildWarnings` now also counts committed schedules for each day. `workforce_screen.dart` | +| QA-044 | P2 | Workforce | Every Saturday and Sunday in a preview permanently reported "missing On Call", even in the first generation, although a weekend on-call shift *was* generated and committed. | The coverage check requires a generic `on_call` each day, but the generator emits the weekend variants `on_call_saturday` / `on_call_sunday`, which never matched. `_normalizeShiftType` (intended to fold variants) was an identity no-op and is load-bearing for template/generation, so it couldn't be changed globally | **Verified fixed** (debug trace: Sat/Sun `required={on_call,normal}` now satisfied by `available={normal,on_call}`). Added a coverage-only `_coverageShiftType` that folds the weekend variants to `on_call`; generation/template code untouched. `workforce_screen.dart` | +| QA-045 | P3 | Tests | `dashboard_metrics_provider_test.dart` → "rejected leave should not affect schedule status" was time-of-day dependent: it hard-coded an 08:00–16:00 shift and asserted the status isn't "off", so it passed only when the suite ran during the day and failed (correctly reading "Off duty") at night. Production status logic is correct. | Fixture used a fixed daytime window instead of anchoring the shift around `now` | **Fixed.** Shift now spans `now-1h`…`now+4h` (matching the leave-window style already in the same test); suite is green regardless of clock. `test/dashboard_metrics_provider_test.dart` | +| QA-046 | **P1** | Security | **Pass-slip self-approval bypass.** The `pass_slips_update` policy has a `USING` of `user_id = auth.uid() OR admin/dispatcher` and **no `WITH CHECK`**, so Postgres reuses `USING` as the check — the slip **owner can PATCH their own row to `status='approved'`** (plus `approved_by`/`approved_at`) via REST, self-approving their own duty excusal. Approval is only gated in the UI. Same class as QA-015. Confirmed by policy inspection (not live-probed: `pass_slips` has no `DELETE` policy and `duty_schedule_id` is RESTRICT-referenced, so a probe would leave un-removable test data). | Missing `WITH CHECK` in `20260306090200_pass_slips.sql:38` | **Verified fixed** (migration applied + live REST probes with an it_staff owner token): owner self-approve (pending→approved) → **0 rows**; owner approved→rejected → **42501 RLS violation**; admin approve → 200; owner approved→completed → 200. `supabase/migrations/20260926090000_pass_slip_rls_hardening.sql`. Probe left two un-deletable rows (`pass_slips` has no DELETE policy, `duty_schedule_id` is RESTRICT): one **completed** `[QA]` slip + one **2027-02-01** duty schedule — benign, removable only via SQL. | +| QA-048 | P2 | Network map | Two dialogs accepted the Create click unconditionally (`Navigator.pop(ctx, true)`) and validated only *after* the dialog closed, with no `else` — so invalid input silently closed the dialog and created nothing, with **no feedback**: (1) **New VLAN** — out-of-range ID (0, 4095), non-numeric, or empty name; (2) **New location** (device edit) — empty name. | Validation ran post-close; no guard on the button | **Fixed** (both). Create is now disabled until input is valid (same pattern as QA-029). VLAN verified in-browser (empty/0/4095/"abc" → disabled, 20 → enabled); New location fix is identical (analyze clean). `network_map_vlan_screen.dart`, `network_map_device_edit_screen.dart`. | +| QA-047 | **P1** | Security | **Shift-swap authorization bypass (confirmed live).** The RPCs (`respond_shift_swap`) correctly guard accept/reject by identity, but the `swap_requests` **table** has no scoped RLS, so the RPCs are bypassable via direct PostgREST: (a) a requester PATCHed their **own** swap straight to `status='accepted'`, forging the recipient's acceptance (200, 1 row); (b) a **non-participant** it_staff PATCHed **someone else's** swap (200, 1 row); (c) SELECT is unscoped too — any it_staff reads **all 60** swaps, incl. 48 they're not in. | `swap_requests` base-table policies (out-of-repo) allow any authenticated user to read/update any row | **Verified fixed** (migration applied + re-probed via MCP-confirmed policies and it_staff REST token): non-participant SELECT now `0` (was 48); requester direct status write → **0 rows**; non-participant direct write → **0 rows**; legitimate `request_shift_swap` create still succeeds. `supabase/migrations/20260926100000_swap_requests_rls_hardening.sql`. | +| QA-027 | P1 | Security | The `it_service_attachments` storage bucket is public, and any signed-in user can delete any attachment | Storage `DELETE` policy was `bucket_id = 'it_service_attachments'` for all authenticated users | **Fixed + applied** (per your decision: keep bucket public, tighten delete). DELETE now requires `owner = auth.uid()` OR an ISR-privileged role (admin/programmer/dispatcher/it_staff). Reads/uploads unchanged. `supabase/migrations/20260926110000_isr_attachment_delete_hardening.sql`, applied to the test backend. **Related (also fixed + applied):** the separate `task_attachments` bucket had INSERT/UPDATE/DELETE open to the `public` role (unauthenticated users could upload/overwrite/delete). Writes are now `authenticated`-only, with UPDATE/DELETE scoped to uploader-or-privileged; reads unchanged. `supabase/migrations/20260926120000_task_attachment_write_hardening.sql`. | +| QA-026 | P1 | Backend | Creating an IT service request failed with `PGRST202`; `network_devices.status` was missing (`42703`). | Test backend was missing migrations `20260604090000`, `20260605100000`, `20260605110000` | **Migrations applied.** it_staff ISR create now works and lands on the detail page. Standard create still blocked by QA-039 until the re-apply. | +| QA-002 | P1 | Build | Doesn't compile on Flutter ≥ 3.44 | `font_awesome_flutter` 10.12 (extends now-`final` `IconData`) and `flutter_quill` 11.5.0 (missing `TextInputClient.onFocusReceived`) | **Fixed + verified** (per your decision: upgrade). Moved to **Flutter 3.47.5 / Dart 3.13.4**; `font_awesome_flutter` → 11.0.0, `flutter_quill` → 11.6.0, and `pdfrx` → 2.6.5 / `pdfrx_engine` → 0.6.1 (0.3.9 failed native compile under Dart 3.13 — would have broken the APK). `pubspec` Dart floor `^3.10.7` → `^3.12.0`. Cleared the 4 resulting deprecations (`axisAlignment`, `onReorder`×2, `dismissPdfiumWasmWarnings`). **Result: `flutter analyze` 0 issues, 139 tests pass, `flutter build web` succeeds, app runs (icons + Quill render, no console errors).** | +| QA-003 | P1 | Build (Android) | The uncommitted diff dropped the `flutter_keyboard_visibility: ^6.0.0` override | `pubspec.yaml` | **Fixed** | +| QA-004 | P1 | Auth | Every login landed on `/tickets` instead of the role's home route | `login_screen.dart` forced `context.go('/tickets')` | **Verified** across all 5 roles | +| QA-005 | P1 | Routing | Opening a gated route directly bounced even an admin while the profile loaded | `app_router.dart` treated a still-loading role as "no access" | **Verified** | +| QA-006 | P1 | Shell | Dispatchers saw Settings items and standard users saw Reports, both of which the router blocks | Nav rules didn't match the router | **Verified** (standard, dispatcher, it_staff, programmer) | +| QA-007 | P1 | Notifications | In-app notification banners never appeared. Two latent bugs were behind that: the wrong item, and false banners on startup and resume. | `NotificationBridge` used a messenger with no Scaffold, and `.last` on a newest-first list | **Fixed + pipeline verified live.** admin assigns task → `notifications` row (201) → it_staff sees "ihomp assigned you … Just now" + 99+ bell → tap routes to the task → it_staff transitions it to in_progress (204). Banner-selection logic is unit-tested. | +| QA-008 | P1 | Data | Lists came back reversed across the app: pickers Z→A, ports and VLANs descending, comments and chat ordered differently online and offline | postgrest `.order()` defaults to descending | **Fixed.** Verified (`order=name.asc`) | +| QA-009 | P1 | Tasks | The Tasks table hid Status on almost every desktop width | The list-width check was measured against a screen breakpoint | **Fixed.** Verified at 1440 (`screenshots/QA-009-…`) | +| QA-028 | P1 | Tickets | Standard users could file a ticket for **any** office. It then vanished from their own list, because they only see their own offices' tickets. | The create dialog used the all-offices provider | **Fixed.** Verified: only the user's office is offered | +| QA-033 | P1 | Performance | Every client re-downloaded the **whole** `duty_schedules` table, and `swap_requests`, every 3 s on every page: about 40 requests a minute per user | A 3 s "safety-net" `Timer.periodic` in `workforce_provider.dart` | **Fixed.** Now 60 s; realtime remains the primary path | +| QA-025 | P2 | UX | Error messages showed raw exception text, e.g. `AuthApiException(message: …, statusCode: 400…)`. This affected 64 places. | Callers put `'$e'` straight into the message | **Fixed** once in `snackbar.dart` (`humanizeErrorText`, with a unit test). Verified | +| QA-029 | P2 | IT service requests, Workforce | "New Request" closed on an empty name and discarded what the user had entered. The "Add holiday" dialog silently did nothing on an empty name. | Validation ran after the dialog closed | **Fixed.** The button stays disabled until valid. Verified | +| QA-030 | P2 | Tickets | The table showed 36-character UUIDs, which pushed Status off-screen at 1440 | Raw `ticket.id` | **Fixed.** Now an 8-character ID with the full ID in a tooltip. Verified | +| QA-031 | P2 | Web | The mobile-only "Never miss an update" dialog, whose "Open settings" does nothing on web, appeared on web | No platform check | **Fixed.** Skipped on web | +| QA-032 | P2 | Dashboard | Stale times read "Last seen outside · 4490h ago" | Relative times were only ever shown in hours | **Verified** (shows dates); `AppTime.relative()` added, 2 dup helpers removed | +| QA-034 | P2 | Shell | The rail highlighted Dashboard while on Profile and Notifications | The index lookup fell back to 0 | **Fixed.** Verified | +| QA-035 | P2 | Dashboard (mobile) | IT Staff Pulse showed initials-only avatars, with names only in a long-press tooltip | A mobile-specific branch | **Verified.** Names shown, ellipsized | +| QA-010 | P2 | Web | Every page load logged "Could not navigate to initial route" | A wrapper `MaterialApp` on web | **Fixed.** Verified | +| QA-011 | P2 | Attendance | `Platform.isAndroid` threw on web | No `kIsWeb` guard | **Fixed** | +| QA-012 | P2 | Detail pages | The "Assigned IT Staff" header overflowed by 13 px | Fixed-width text with a `Spacer` | **Fixed** (smoke test) | +| QA-013 | P2 | Accessibility | Password show/hide buttons had no label | No tooltip | **Fixed.** Verified | +| QA-014 | P2 | Tests | 8 tests were failing before this work, and 1 passed by accident | Stale expectations, and a smoke-test helper whose screen size didn't reach `MediaQuery` | **Fixed** (139/139) | +| QA-016 | P1 | Settings | Programmers can open User Management, but every row 403s and emails show "Unknown" | The edge function allows admin only | **Fixed + verified + deployed** (per your decision: programmers may manage users). `admin_user_management/index.ts` now allows `admin` or `programmer`; deployed to the test backend (v12). Verified: a programmer token's `list_users` returns 200 (was 403). | +| QA-017 | P2 | Detail pages | Detail routes have no app-bar title | `_routeToTitle` | Open. No double app bar on ticket detail; network map not yet checked | +| QA-018 | P2 | Startup | Up to about 40 s of blank screen on a slow network | Startup timeouts add up | Open | +| QA-019 | P2 | Accessibility | No `Semantics` or `semanticLabel` anywhere. The ticket detail back button has no label. | App-wide | Open | +| QA-020 | P3 | Web | Warning about the viewport `` on every load | `web/index.html` | Open | +| QA-021 | P3 | Auth | Validation errors stay visible after the field is fixed | `autovalidateMode` | Open | +| QA-022 | P3 | Data | Duplicate office names ("dddd", "dawd" ×3) | No unique constraint | Open | +| QA-023 | P3 | Web | The connectivity check sends a `HEAD` every 5 s | `connectivity_provider.dart` | Open | +| QA-024 | P3 | Auth | No "forgot password" flow | Not built | Reported only | +| QA-036 | P3 | Copy | The Workforce empty state tells everyone to "Use the Generator tab", which non-admins don't have. The nav says "Announcement" but the page says "Announcements". The mobile label "IT Service Requests" wraps. The Pulse columns (Tickets, Tasks, Events) don't say they count "closed today". | Copy | Open | +| QA-037 | P3 | Privacy | Standard users can see IT staff location status ("Last seen outside…") on the Dashboard, even though Whereabouts is blocked for them | The dashboard is identical for all roles | Open. Product decision | +| QA-038 | P3 | Data | Two separate accounts share the display name "Paola Ross Liberato" (`paolaliberato92@gmail.com` = standard, `pao@mail.com` = programmer). Duplicate display names make User Management and pickers ambiguous. | No name uniqueness; likely a real re-registration | Open. Test-backend data, but the UI should disambiguate (show email) | + +## 5. Server-side probes (standard user token, test backend) + +| Table | Rows the standard user can read | Verdict | +|---|---|---| +| tickets | 8, all from the user's office | ✅ scoped | +| tasks | 48, all from the user's office | ✅ scoped | +| it_service_requests | 2, **both from other offices** | ❌ QA-015 | +| profiles | 21 (the full directory) | Acceptable | +| user_offices | 1 (own) | ✅ | +| it_service_requests PATCH on another office's row | **HTTP 200, 1 row** | ❌ QA-015 | + +## 6. Blockers and decisions needed + +Admin login is now resolved (round 3). All five role sessions exist. Remaining: + +All prior decisions have been resolved by the owner (2026-09-26): +- ~~QA-015/039/040~~ — fixed + verified (ISR RLS). +- ~~QA-016~~ — programmers may manage users → fixed, deployed, verified. +- ~~QA-027~~ — keep buckets public, tighten deletes → done (it_service + task_attachments). +- ~~QA-002~~ — upgrade → done (Flutter 3.47.5). +- **QA-001** — leave the AI keys, **noted for a future security enhancement** (server-side `ai_proxy`). This is the one remaining known exposure, deliberately deferred. + +## 6b. Harness limits (need a real device / manual) + +- **Attendance check-in / overtime RPC:** headless Chrome doesn't grant geolocation, and the in-handler `Geolocator.getCurrentPosition` doesn't resolve with a stubbed position, so the check-in RPC can't be driven here. Geofence *detection* is verified (screen flips to "Within geofence" with a stubbed location). The check-in, face verification, and PDF print-dialog flows need on-device testing. +- **QA-046/047 probe residue — cleaned up.** The pass-slip and swap probes left rows that REST couldn't delete (`pass_slips`/`swap_requests` have no DELETE policy; the schedule was RESTRICT-referenced). Once the Supabase MCP reconnected these were removed with service access: `pass_slips 55046efa…`, `swap_requests 514c97ed…`/`befed0d0…`, `duty_schedules 5fe10a17…` — all confirmed gone (0 rows). The only remaining trace is a cosmetic `updated_at` bump on real long-rejected swap `ebb4b9e5…` from the non-destructive PROBE C (status unchanged). + - Minor observation: neither `pass_slips` nor `swap_requests` has a DELETE policy, so erroneous rows can't be removed through the app — likely intentional (immutable records), noted for awareness. + +## 7. Files changed by QA + +`lib/` +- `main.dart` +- `routing/app_router.dart` +- `services/notification_bridge.dart` +- `utils/`: `app_time.dart`, `device_security.dart`, `snackbar.dart` +- `widgets/`: `app_shell.dart`, `tasq_adaptive_list.dart`, `task_assignment_section.dart` +- `screens/` + - `auth/login_screen.dart`, `auth/signup_screen.dart` + - `dashboard/dashboard_screen.dart` + - `tickets/tickets_list_screen.dart` + - `it_service_requests/it_service_requests_list_screen.dart` + - `workforce/rotation_settings_dialog.dart`, `workforce/workforce_screen.dart` (QA-043/044: coverage warnings) + - `announcements/announcements_screen.dart`, `announcements/announcement_comments_section.dart` +- `providers/` + - `chat`, `profile`, `announcements`, `workforce`, `tickets`, `services`, `user_offices` and `teams` providers + - `network_map/{network_devices,network_sites}_provider.dart` + - `network_map/network_map_vlan_screen.dart`, `network_map/network_map_device_edit_screen.dart` (QA-048: dialog validation) + +QA-002 upgrade also touched: `pubspec.yaml`/`pubspec.lock` (Flutter 3.47.5 + font_awesome 11 + flutter_quill 11.6 + pdfrx 2.6.5), `lib/main.dart` (dropped deprecated pdfrx flag), `lib/screens/network_map/widgets/topology_legend.dart` (`axisAlignment`→`alignment`), `lib/screens/workforce/rotation_settings_dialog.dart` (`onReorder`→`onReorderItem`), `lib/providers/stream_recovery.dart` (lint suppression). + +Everything else: +- `pubspec.yaml` +- `supabase/migrations/20260924090000_isr_rls_hardening.sql` (new) +- `supabase/migrations/20260926090000_pass_slip_rls_hardening.sql` (new — QA-046) +- `supabase/migrations/20260926100000_swap_requests_rls_hardening.sql` (new — QA-047) +- tests: `notification_bridge_test.dart` (new), `snackbar_humanize_test.dart` (new), `layout_smoke_test.dart`, `offline_sync_test.dart`, `dashboard_metrics_provider_test.dart` (QA-045: de-flaked) diff --git a/docs/qa/screenshots/QA-008-offices-z-to-a.png b/docs/qa/screenshots/QA-008-offices-z-to-a.png new file mode 100644 index 0000000000000000000000000000000000000000..6b2c9b02673c244b3268b770e62244f0a4820de1 GIT binary patch literal 36618 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 literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-009-tasks-status-after.png b/docs/qa/screenshots/QA-009-tasks-status-after.png new file mode 100644 index 0000000000000000000000000000000000000000..ae424dbd6c7f521434afb399e59186c1dd09ec65 GIT binary patch literal 106562 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 DQ<#e$ literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-025-raw-auth-error-before.png b/docs/qa/screenshots/QA-025-raw-auth-error-before.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5c499abe5a65aeac383851958f0053debbe066 GIT binary patch literal 53643 zcmeFYWmuHm`z|~tDgq)UtspHRIW#IIAYIZOf`D{~BGL>E(nz;-4JF;(Fu>5w&^hzo z!{hVY`@{czkK;Y|-pAe_HlLWe*S*%Y)>Y?qu4@A1WhJm4kvsx{Kv13j6!T$3luoMWS*RuSj$&54bTeIHa)-hia3kL@W@5`5)6S`#)5l2EE}BGT*wHcKIcCjB#^= zy9JG-b9RcS;)!7E-eHkgTyHY4p_ zvYQDODD!5P#fh;S8j9}RH`CH;%@7!2#|R(6vKxV*UM~&0?>A#Sy&2hL86(3{+JcFJ z!SMWz(|IWalXUG|N}JY*7GZOTaAa=okKeCVGNmF^^K0=A8EYP?QZL-R2SSC3JUXnK zN0P(5b4p+ z^ML2(>6=O|+!pQmmEfh#F$~6k7X?+#vRS;&CPjV6m6gr&_WtjlpgQ@VNfdc6sZuD! z1*bPlvyOS3OvU+Nj0_|*rv>|X-?^FgDri&oPAKdJg#Kgu&~mg|p3s4Rdw-F85TSzG zNk)pW?o(onTNpP(JDJtmZ92rs?sf6RhY~9lN z&oXXwogw6r;U1u3C74_ZBKFfjn>YwmjcM2N2p4Q-YgVDb&(H7X=7xcRAt50__u_d| zjkRuJLW0)Yr1YuDlBtdMG?6-(o7^%!)xjViFR?uz?ic5=;^KiWp8r@8I|qjYpSG%M zj7~8TL2y+7`RkSHHP2zOdpB#%{_HjgQ^9LaiyOJBn7Gm? ze=t?q*EZic)WaH^tHNZz)NZhy|E}pDOWy6S4W?$Ip<$wKsd70CBm8vHkeksY*f|M#Li_wXxRSt?~4b9+U>Yr2m^6<=mYj{uvLMBZ6Kcw)xl&* zYO{}6Z3${bZiI>oI4i~A|LCI{V~aiX`@%v#DL7fT_UO-EV;!&>IcI0agatXd5;Zj| z5?N=&c~NPWCMP!#7|>PyCC&f8y$#-C$F8v*989aY|M)#5WbS;oE_p0p&Gk$_T7&r; zWU|Z@*!?fBnMyVcoU9Z<&8T3X?3|k;^1j^_ZH5o8VWg^*&yOt9m4iB3UXoh3YD3M| z;BfUalb(lo3;QfZk;DPyU|Qw5- ziu=5!q)4tb2^r0XM6n{$4)n+j!2g~}fxb3>Xhv9AaBJ%$96@}*ovcT)09|w>@U5VJ`=*&)b~^`TYjQzd zmp9xhF^(T>za|?ZPEGLYKOsuY*r7d~f*_g#Z%Mtr_G6X#Kr)tStv;vD$C6*~E>A*q zJk{BM8ptLKoQ$cR_VPUQ`6n{r-`Q$kdO{HF>YOkg<`3INZl^WKr84&QnpKlN`xG)qcqQ+<42i=UmoNV>@T zH!HwR0VTUH{ZKkTKwBzc_i7;|Y^MEWSDQ?Sga=*!Ne}_QS(Y9M0|}blMYWjaPiP~| zonzwuUcAj!+0DYB)atG-pAGKxA+yf3iLJ8IQhPpa6B840aq-$GB=MEz(L%iHMS8t2 zifOE+mY%mfCV@p8dYKHFc{A<8cT9Q@&QTM4xmkHTF z+4fCWWL-?$WuE_cc#+DT+ZhcWV(l+z=n~cff<;Q-OSWcAe)AVz&iprv3o+FECojzk z(}dgjJKe^<5&erUfpz(zNagQDMyyTA$`@{A0pY~BnUH;Zz#}^Rf<3fc82LIYYxvtg z1}*RfP}bcV@{YoBGJXAACN&a8C7OR{PVGvt>12}tvXZe<=yn`66_s(@BSQ_6zXCZg z%rY;9&Da>Ng!ND@z1OM?{+quA{C8u37yZt)2gStyJphc@jd{^T;Jj9Ui+F|ws{WHj zo#k_t8SUO05tD?7M~g&_nODRuvz6S4{f2lMzeOud)3S5#!2PdCsh}Em?4DBk!M}-- z-n*taP>UObtZH@e?~dqwc{_eT=KR-V>E&RYB7ZR*eW0-u0kPpf8Ud|zMce%6C5pd$ zk{9@QCFj2u@CNZ0?0Ca*|GwGwF8~Xa`0L&HkiT1}|DQV%+GL|b|JTe7O#Oe@ZvU@D zp#Q?OMUy@sm%*nRB*9RUwxq0-~ z!)fWD>P2kErLk_lRX<4xdU6oj7ZzabAwLK&xusFQc$RMO0cD-uK+N5=$&P9IS0Pdk zQ6;><!`>w_`;mVSl2h1OK zgQco{FlyTFrrQFtL)U)+;lb9e>C$IV8-T#eVrV}@is2$|5d*lt(--X#S0ZnlZ$ADO zML)Gt&@y_{4*b)5vkz|HANTrBtRet0(Vx9DmgAoH7zzALd=3mrK>MwCq4cit8g zN*O4G$78|Il^Hm3y?pdSzqQ3_xR>p1M(xdwctx;zu<6>-bN^tw4+vhF4{SbyotT?~ zyI?NGf>ti%9;hh>9ai+xW5m9{4>X>1RYrAC0Ge9hM(2OM^sM_S;rKns9-=*-#>HeT zy6KZJU^hE27Jx|!cVzs-felLG-i!?rPvU*a5Xtar+*a{)+Uel)A(=QF7{+}Qx7xm( zA+Qk1yjM&v>{~r6S*^;Fg~LJ<+Q8l_WsDW!hl_yjaPc!je8{MBl=Iv-JH5m@(^{?# z*^NWbG_D#?aZeGi!%Udax z$V!dc0cFOTw=KZL|8N19I6u~f&W^1%e(aC?E}?B|k^~)YzXa`8?3KE?KfrdRnvl;O z-C)Q)A9X?;guUVm&Y4Zx$%aHoCFdFN)||IrTL}OQQ|JW)iQn7uQ>oJu`RZn=sBCzW zRh+HHXCtG4XKxL&RafM?H<}D;kJ)K5js3_^Gf(rg+{&&-LhyZb{v-EqW+yUlk-K>6 zwFM(;POZinL6XrLW2NSFL~2AT4GHYVDB`qfPlFJFjm7oR0#%|7B&6Gh=&u6$QqhUN zGsbwZBP+YhII`KE(`X{CzT=<~7Y^UlN|#l!OZtAq8QGjOe3kE!qu=u4`XI?xoj)}x z%QUENx2Zh3T}f@F^xDlwMa6wjRq6D^UCI8JmgAXKqS3%S2cTlKiO)&`P{=3CVNabI zbyxIsvnnft^Dx7+jisf%<%C1Gp`~MvqH}3Hkdk@S-Yk`T{5YA5LpNR@h2+SST0xuS z%#BID@DlfxIt_UsELxkU%G>Luog9Athf_()6&BcD_5!Z0QUkqSHnkcfLq_X&bU|-P zjL$m2wfU`CtMQymo_o$S&PACshdU^?rhdg0XcBBwjLOLOG+ioc`T?kYtjYf2)K z{lp7lz*-qZZlVRp&#b~}ey>B^Xa!q4o7w%g_mO;;yo_V!Dn+Eq)F>6D;bFUELMCg8 zhyxd-)Yp!?D(7x%NuL6xI{B5fnO^Vp-g#I8War<+H=&U`dUGGgy3%bb>LsnMBg`11ptYv0FhFO;pwBl=`L{51qm~4N1x_+3>qMu}`q-V2zY$dZ@gs8P{ z?u^dX@~w8G)XAZey?R9bT%o0B>C3uRO}SO%>k<#2AzSfPX^yh0!O}_~Xnsy$L^TiG z0=@Y({AJ(=fByg(Qboh{0*0xXkto{I+%KCwkr125WnQQn=~Nhc>`H9ifwik+%qKjT zuXRrs;U`vczanu?tF@PH2g8)LY+}0cvV7Moh(`N_dynUN&edo9=#<#GPMumD&%Wf$ z2r|!V3mJz7&@n%J;r?N_^ve(0;Nkd|N#m?-?|cqIrJ`AxXKl{1PWQBJq>k!ZU-q--4j z?ZKh&WyqX~&s5kX)9xC^7&5)s0p9$cMdoE)q~+2ovDD33z-u>>RlsYJkx2XOWDiSK z1rZ&)Nn{EBEEsc0%vd);sitEhv15T9NA6*SihJCYF2>(>EsY=~&a%iu9(sdYOal)jzo8tF7UeU1iGB&~U z%NJXF`TYFa+V$Y}g(zhO&$MGD*3{znMx3Upo+nLT#i z>B$T|aU==3NDCjCn@t>d=aR})ByX(VgkY5|tL-KCiS@w-gkKDYNU`)&&GE!Wy&A?6 zi9x30?&WcA_Le{9okOc2NlFlTpy0Cf6}x|BhdgtJO>~^7r|nXE1dGA+acJVX?Q`2I zz-J9y}K*_xOcqc``g+l@_(h*k0g z=b?<*q!Ci)xSXk$J&9hu&d)Q(B z@$05$k;5Z>cGyYR9usN4aO2KSt73gq>xn<}r_RbJ@5%5kjD%Ahwh&y! zaum!5xOIuyU6otIt4*1fwI7laJsu+pZC~=r!X`y1jG2Y|c0+ER!e}nH?`H#68}sO$ z^=l&G935RCF>&A2<;QNkyLqub1Z5_n%dCp)mBO+KPU~XimZOj z+;H3}-xFn0q-t4Zu?6FHs0|TbCA{_v=0IV&X<29YgA`l-9u`&*Vp&ucXrDhS@2g7 zv5*Gc%!aO)bG;uf*#tfUqR^|}l%-WbcFsIcC3j?Uoou<6?s z32K!d-O$PwPp>5)gbGXRWV$4@uZ}UP(yK{sL6Ra@8ECT2j+cv z11JbXq@o8DCEPAeg|&xQGdCh6`S!0#5gVTjOln^+aZ)KlMb)8uv$dz|x|b^#b(K3D z#WUF!kuaaj#~X(cNppp?zl8gBUJ^w932iRPR#5|>*yK|*Ncr3|#0{CX442B(0DDAD zn{^Iv;UM?LZTk%kWFm6kjtR*LUc@^Gba|}#kS8Yf?DU-n z?_9ivwl1?OHC`J{aVor*mMxr4jiJxT%7~xfCJBLSTO$foE%T@0b9(H&d0YpHTx?(( z3w6XRfKbz;uC4*pXv?wklY1_ih~TN!TC(86`b@n}Vujse+=&mR+xo^19V#jv%MHWL zC2Z(UHfxt*P=0|dm=iSeEVAipuB6*)S?;J=zbrgV4xv#@K-xyUU<6n3cQN$=>FvmmHaFFn0g@;}WOO z8@oGMC1nKy$b%u)d~kTrmVpQ=5E2!*s)`v}ERok;t^vIqrFJypx1(!!A9NJ>tjK)9(YrsOW=M- z{`DwUo(2ou957$Zr<*E?(~0C!`9djdeee0VALWfBf7V%`^D@M%jFZDy-)8gb$JP@b59s5eb*%^j{yev zp-l%gyvRM5i4i#KqZ+LwkK&Mj53?5$<-nTj28!LL)td^gdgU!eFty#8n#%}QKtBVz zPD2NWeH^jJJm%uHfUou5)UL?1)J|`EKoK9&x&@(r`7hjjT)rupfy#F24%(W+h|p}5 zH@^kcDIIa^l3)LGW;`{cGT;WFgBt|w6rC|(?xdH0q?ft~D7W*UO4$!}HN;2~y=j&p z@e+8w?ne64m`|MLlU3>$tb<>Gh4JsA4V6A;&q@o)y&PfRxNR}kr=E_k7a!de7x?{~ zIfGrXvQjh~UlMj58IzBJ1s;7xThGVb$&OX|eC3X37U)km`#c`PtT z;6HO@|M#>6>F6(G;(us~zeF*p&G3u`7!7#m{}Fr|AjtnP=ar16F1h#qROF1r{&}R+ zXp{6vh3V`)4XYqE6DJ=V6(7S3-onJ#1TS950nEx#1I?i9TceZH8$Kd3HoL{pZxbnJ z2B#6&JO*$j&yO`;*F_vPtNfD|DSPv^)@wgb99z+J3*}8^@s-*(q}U6|ByHVUN3WEf zQf4$kIV0=InWc6dXbkw1HyLAO*Gs_eW@4&>q~6(Huv%buuPk0`)bR0tWMLj+VT>)3 z5Jn-X4vj9e#+c4x5cYO~{xU*NH1N+~z6&(|DqcHPN_MpWjkdX)WdB_wx+frZC2_Fx zu3ghmnYO$-tJ+4xpfPclXQL#`W$ad;4fIn&xa$WrR zGa5FaweS7w^|RpEcfYK~X^l3Il6Pg1E8mu^+W+MOx|L5(Yc-AQo1GCF%F0@{22wx# z@(p=e!QpvkoG90<8N?yD7#1AegQvS~_0#Hsd9+jpGcH?~aIw&H+E_~gzF)dbBsPG| z0XGKQ0YsykrK4{umrGAaUabia6(aVLg^A=lc4I`*Ug~zQ*}11|vvk!@(>yf%d;bW~ zy<${g;l#@OSX?_#E_~6o8?xdp;_olhPp1gTUwLzhg0CT^v3hAYPAP;J;WTv6*HQGN z-4h|MTcKf`T=RLPgg3}(wUCS=>1YZ^bLr`DvP*f5z?!RbqE?P-vt})(nkfdVltO=K zO5y!S<=bdy47cuHOOBM zekjBjHYH-1pJ53{E=_ zqU>!LQ^=O``dkT&GzDdIG>gSnv(>rM!N>LF-t~?|OMJ!^#Zi{xoH@m>9(FYI2X6=h ztXlqAS1vJ@`F;Oy=rX<(*h{DHp&E6c+%KonXLpY#YZBULFh?0xAdU_R_f*KvMQ1L! zuF*D2m3j{yn-Vt(diq_R-WYv8IR0JD5!)j2XK94p{(x$3=Y+^W*4#BKzs!fej%Uir zO2uLZiTO*wW_3ESA-SG!)UJHu{)J1Wg<_#*!ZZ;5--M%+mG?WmwDtlqe(dC0ou-Ro zEEgUC<_~Uc>+`>(f;Vc{N+<8>74M9cAib?Z+&!#9s`azSI`2hibesBQ&Gfz5F6WfE z2Ler-E*mo>1xAl1E6*tZw?VrO%9b=+Y6cxzehL|4SmWb>#8Oi9Y-GL*SBbddN) zSFYv>aqRqhT3UEjJJm7M)(gOhZcq~b_?~8{#7YJZi!8PW|CsehrlyuYNgaIh6!uT6 zDK(oZ4P+E#Pdx+$kO&qmH>Uz3f`r7d#N_xQejDT}981Dp{YO-JuX>PUZ{q7W%0=r= zObgY7ByLsYPfGl+9uP3_KVhK$*Wv!u;@jp|w8g#MaVyWasG;X$p|QSJnUS@ca?-)i zyLWLnigjsgiN)#tCk^m#muso?Y!;#wrPx2g;*lDK>{Saq?zAt@#DhQ5?A@P0dT6lt zU)&&db~L%@{b$JB3M*3oH3{kYk6UPM7r#ugq z#l39-TXlRBR+tM1dzy}e7ahh<^x&kg7e%O?6o(qW3)^U2uyn zuC6YFbe|21TgBp%ryT4I&)KfDJ22*`Og;3=Iq&x`8fa{MAJy{fsf0&)x#1xRaz#L3 zE|JP0azH!awFE`VNq@(Ij6OaJpq>6n1_kL-rTPbb)E8A{X3V^hw7Ir zDF7>as;vynE0~MCZc=q3>R@d@wbTH=R^xKx@7ofgM4Ajo{tB~D2)c+~_2S8q&ey0} zt>fc=ygT-J_wo+&2v(YDT`G;Pz)YQpAOjAD+YXal6>4M2^gS5R2#v-Kba*e-H(7cL z)$&|Ut7VZraoN(s4B~g({V^1GUG+U7$gnIm@FrB?rP!|9zt{L78wFU$*7n&zt-eA4 zmS;)oggxTe#&q@ut)Qcrb81op z8M3>hNAzu>VhF{kPPZqC^ptqTotMCVF(0!7yeNg4ZT=I6HC#pxqTMIHrWBU4XwJK@<6zp=$45V3tpDV(uMSWQr8A8IgA5uK;WDi`4 zf9Q`p-nqKh_}=#j>6e0kat3VG1l@6jpBx*z7B3vrxk7gz`|=_v_v=>z(Wz#b&N~~; zN;poE>}hXmcE%sff+vH!Y2%F1QjDrK+@ypQfRpw4iTd0>CL<#Q&h!iA4Gzb$G2Yr< zHcGa)w=Yj@^+`AB+l12)RB0t}{R{>Q`PD8z{&FCPH(jIeO5U*5*(|LVSg&eB?Q04k z1B0gbE8TKJ1W;GL(ub?84

b4mK{X3*NHiGiw@%?lB8IS{Y*SMJ9Klrba&skv$(Q zZm4W;|M6pWP*9Jib?{7y#lWuMWn@I89}el~A}FdUjgs(+1dmiR-L)c|RY0xKoWKRi zWY~d2d^NgSIFp`kXkT0KRZh^V;i_S#sJ*?tPj|nk;TmIZZuW-&hkR@B+wb2IaJK5 zdlgw$cIX=v+i-4$q*D^!KRpz5U!J_A^gP)5RUXCdF{k02}%K4tyNX#ZB&SBFG0ipS>BOD)#@1t86gGY5A$qUnSzPd`zudAsExQ?=|McKPnx4=9wGTwEsk+PhD8H_fL2e90-J`m$zVEAG0 zP(Dp-ndf(uRP9=mfR)%eRaqrb?heYj2m1MSbQ1lDt-nT-?M!G?;tkIjGLuadIG%%2 z0!^%KM)n^*wA?>l5u@~a{b?nSYp>xnO{dta+OV$U;)osco^SWqiB`^Cx?!?`x?_e~ zHBUJr@=(~vBWKJ!(thhLMgBwqzt>{KWHmkAOWMuS(%!M|SXNV(pw<^aFK&u5r6Pa_}SZ<(B!=VpDHU_QD(jzd2jHpBn3zNkLwdPlM%>aaZgO05_; z{Hrv0f@IHm>$|QsQf{VBuzHQ6SfQ$+&P&G+FXbat00$JiO(WDPpzHo?1qhV%uh6A< z;K=w6e}78j*@`J;7tYX`+2-28)$($b$0ZInDf@fq@bK_zAL>)vUjBXI>kO#k6pj2n_VkK=ZkV_LztQd~=6xKu z=4KcY;py=MiSNmx_ zUb@Gdq*@6rlJ7rEdo9SL-C#)5 z7-$OzRCsS9&-k#Z2~-lPFf_!Kr*=8t5y>o^^LzJ%I>^$K{n+Q8FpBn1JP^HEg;1ZJ zoihMPQ;^C2^8-+jG|gQD?w*nH@|>*%2k1$LbhNiSY)wltTE#%3fgoBQnRWd|FaOL{p@SXGm$Z5tyYbgL4 z5#Asr;2(U*-zL8Qt({7MApgIZmDi5H4F2T;0GNlyhc|mcSM$K%|KvU@V8;JSx^h5K zzWT4@fC|W&C|Fz)Dh-k+Q)Z0TNV+Z>@_%h1(pw8} z^{tC5t0sU7diEgzr5CV|Tn$aK!sl^86r7CF-OX=hvI#(MbO7SVdzPI8OI@9F7PP-m zTBgL$GZ=LTw9kru;`JQ*+C^4=o638yCo1F(8r@G>MMxzr|eZ!^LMoQZzQUOE!!ky#)01 zgd4}Lq#!9~S(|^quyMnC!_dxv{SRF~N#^s_EdeCOD{BwZ^FhC{`YhyX4ktBgNfZOP z_C*VW4d%WT<(jw-YPt{5)ZQU%2oM1%lbntZ^!qJvOnP>~!3`Lx<^SaiH_Y(=i-`fN zq5u9rn+MSyUhF9!t^j8ah)}3xAbGi&~M(1m5Yg3wE4(_l0(5lo?gz z<-;IV5a6IdzBi|>qN=J|#JkcR9f?Vm7seFqWdWt{jc3a@AIm$S3Riul1>LW!na|A1 z>bARmbq7X?D#@m^{Tz*7>6AO7Wn8QH~o?4{H~{b!}SP@^)QN8bRb zVRkFk^cVFH{H$QrQ!OnmP@EL6i}P)3lVXkfZY?GE_1`aAws+8Nejs{6!0Ve_$@%T^ zU0T21!SF<`tkH%f_*cITeF)T#K&>T;4}~Jfj6}ZU+rBNHkc$`ibp7KvMp~rhovz3A z7*tLVw>8^8mR?{Mp-)FgR{}@gxded7*&#$2Y&Q6YF}MomA`Ml`Rm}Vpnbi?WiHVJk zg!iyo!Jy}`*3)tgPi6qe&=Yud-2xSW?K=nkJNi|&3oxZ z3bsrHd%?DUmSw(kwYy3H0IzH-@qHitj(&31`m13$O%UbIbPy#qO7b;%U{mFDzR8Gm(OYQ)gNqy2Ima}7=gC76<4)?aBy$k5xi|%1whK= z!ujjAVgSDbq9;G2#sTTkQ0{5&u%2wsMOuW*W@F+EcqUsAL)cx^M$I@aHLAjG#Roe( zJAZ50A1rrC$FfTDG6bNNi2n?2&r*P6xw$Tk{Ce#Ko8_JFuK`wd6?c92?$08%Uq>Ss za{Ac9Kp|+AdAE8uQci#Y2BF~RbL-z89aVP8`nZz+Nw>=wT?~NmANd5|1`N~WD2_?3 zh>XWsuf3NT9&NFKcPH5lFky1F?ePlD0Sdth>yN_LNC89y@RIkhG=QIOautFJ&G#Zr z{_x`gF8pe(%6w|GOin1_X!m7^xFPTSEQ?6~nCI1E$I|?>JviJzM+5NO;>N2B1QN1# z{X9g2ngDP52QXihR33C-@eU};3LupfZALciV|`fte*EB@J*Pjby6oO&N`zMt7$k!M^x+6y?TdrWhs?V$wg*<9ec-MQCqg_Mj zW)jdNbe7+5LY$m<=In?7I07WEXRmMzlyK;6uK-jG(_VUBuyf!CmLVkEjA})RcR^xr z0JQs?>n4#>>;qk+sUHF4vkQ{hSg0Eb)o3b?l{P@plb5a2~81Il53qa3|DXm=M#~MYN+|D15DYRbA z00F|=7R}*NJWp{)x>V$;P*YR4{AuwMzTECo%6?}xJGfz=E*@&{WQRw9O~F_0xde1u ztuO8({~QkVaHth)^B?^*O-xEc$NNb}Kr?RwUO#&*+116s@M(jXm@4f_B-R$jO5Wk( zXznTtW0^_s@2WDqd-De?DP*tT7?Bz3cpN9Fm$|#US6&}aWc4MaIA0+O3JS{B`emHA zm;w4Ay(6?xvk|$Go!spOR#a5-Db|VvU1f8UgaFi0WO{mjP+3Akf@(f+drWTyXwlms zCOMe`kCZYcY=Nc7a8}D5T2Dr{J+{gJ*utZOg;6D68FvqWFBB9MRC7;ON`-`gv`lcX zP*t-?t7fCjggB(Vyqr@`PHsa-OIz#UJ`-q{12O;EB#VVvP>_w`yuD9ej#ZA5m6eW8 z;voQ@&^?><+yFunpaSaEG%fWMfYIY3u}B`vtR?qd?h}U<2pt$sa0C-Xu$1l7|sHD8~_N9kAaTEfp2Z4 zHjl$d;U)#uf|~mkuR0c<@fp3J88196)@{_ON1w4P$|JICv|h7{%VNT6x-`>mqUb3o z6PHcG7lfLuK4VfVRx5h8zPU+-hJlO-@UOd|-!$k@QSub5*G40y=iTV%2b3GW;c;>H z)SLytU1-0otYV3+Lj@X4e+Ph@Hx=&N^S%UqWW$Oi81(UNBHxvJPteE%C!p~{4Bccx zAF=QM-qe(?_|MUYTOetePBNU6N|qL|aj`e(Sg+&i>Z;}btudt-@Yd(D)NrGSe(&_Z zbmm7^TJ8qm(4hl%_q^YAd6rA5Q`$%Y#_*faD*_0w855*%_>u>-{w0W>-I{ga?E77x z=I6ISdgvc1c}GV?Mhec(eQLOs`q7M�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

BEeEYG>$9CW(I6TT&3BS!8tby*dB|kfU^@Mt$H# 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

  • awo}^vgLpIgb`=JB<0K%xKtYzCL%I z1Ik~M<@(zjXngWCQGY+g)2W@)bK7Pee)xbt5ML+oY5};-Dv=WbJ>|3xSp6jPc;Wnc zYlwuVMk2qXN2Cxb-r=54lf~c|{1_|Oo4*~mMXn~!}L#n1T*PUHM%M*r!eJSh_DbR!ryWTamAcJ;BlgXUix zWxY43kYx}amplw`uAQ3n*G7I29vU7MM*sZCVJrt*HGGE9Z)UdLemac+fREF^uLZdY zdJi_R#L2IDw2|Lqq$Ebgkriz2D<7Pqs`2tsk4(?LH>GyPk22MNotnC`6LhfIds=vI z99j^8vKw5f_qy#&9*m^@zW(&N%wlHt-8pYIpU(D!s!Bhkg)nrLw3 z4-^hRSpNX%N9r||!ib)-x#Ucxk6Xg8$QY02MMezusAE|W>N~ob3tl>gkdRwi>wqh0 zEKq}7YW0l~^qYEv$kqr7=~!-%Miod41MvC0G~2*>CKtS07y$}OA^c!Os}CGNKoRNF z)X0Izs~##GTIJ3RK?L_Y2{d6I4IpqlR}>FARw}=MiT0GMTZZrH%+e~USgdIymbS3 z;1ikl!6kbGZ(i72Kh|m^ie^^lJ{%%ERss!b3h=gdS>M-}2N`4g z-csrG$w55J;9QDSNidliI7M`gecNcKn_3e#O5#)0Dd1s{K6v17pgjWj)xUQ{alWcG za!F*=je*$3wg{pv3^d;MYSf=|9Dg7|1lrU1QH~M6!{-2gfN=A%bxLP^r45pTPNirD1%Ztu;@!w&$lKCi1y$lo$sZ8?M3h|PboWN7cBR0p zm&F?-c@77wvc2IMJ4G~XK`gI_`}q&aNt?w0jYp*53N${$x20ed7>lR?8p7;#!_mw? z(q%{)M%3fVuSbo@B+w#3u0kn}vK`+DDa%5>#r>-ibEu(NQn4Um7C}ovW7V%cnGqSv0fWBpIC*cu#KQ5iTp_CEkIFq# zV=7tcPjFB!jo1c6=t87E^4kp^7P5U{Hx&LLe|}8DBZ69PF`bC?#%x|<_rTDh1PlH_)+Zn@dz$+zvjD{vUlnL%A|8{zx13;;V!q3v$?3c4D=cf zQY*k2Y{U28h;CX5^>WK|1zD)H{T+iL}s@OOwC0otfQtL*g6XWB7_6#d+8jJ`yz^QOQ3AP~ofzrr(`m- z<*Ymm0rNVj2);9)5d9eMW!ufnXuh*_URTJ@a9MKeP+G-P*e&Ui(Xn~E^*xk%I%0Dc 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 AmjD0& literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-026-isr-create-missing-migration.png b/docs/qa/screenshots/QA-026-isr-create-missing-migration.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc9ff122837acae013ae9e7bb3d7c66f5171350 GIT binary patch literal 58698 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�wH?Z1r=$K2XxuS$IZQ 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 YW+*>6!QPgg&ebxsLQ0CG7*sQ>@~ literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-030-tickets-shortid-after.png b/docs/qa/screenshots/QA-030-tickets-shortid-after.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab7c6efd2d6ddcfe88e65ae2f0bcf4cffe89d47 GIT binary patch literal 97012 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 %l46>9$Al$XqiDjnZ&5J3r%TPyjVfpBc?>vw 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 literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-030-tickets-uuid-before.png b/docs/qa/screenshots/QA-030-tickets-uuid-before.png new file mode 100644 index 0000000000000000000000000000000000000000..8aca78d0980c5492cbaf76687ac5ecb1e16c259b GIT binary patch literal 104853 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 HGWzfzKuJbH literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-032-dashboard-hours-before.png b/docs/qa/screenshots/QA-032-dashboard-hours-before.png new file mode 100644 index 0000000000000000000000000000000000000000..196b132ac2302e7aeaafa7aed79c0b86769cc21f GIT binary patch literal 80725 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 literal 0 HcmV?d00001 diff --git a/docs/qa/screenshots/QA-035-pulse-initials-before.png b/docs/qa/screenshots/QA-035-pulse-initials-before.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dd91cc76bde323f0596935de758917b50f32c6 GIT binary patch literal 44596 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%0AiEfWtAHiDoz1p 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 Qf>-bqWK^ZgBwv2~4bovPf@$ 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 literal 0 HcmV?d00001 diff --git a/lib/app.dart b/lib/app.dart index c453509e..024586d0 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -6,7 +6,7 @@ import 'package:flutter_quill/flutter_quill.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'routing/app_router.dart'; -import 'models/profile.dart'; +import 'models/profile.model.dart'; import 'providers/connectivity_provider.dart'; import 'providers/profile_provider.dart'; import 'services/background_location_service.dart'; diff --git a/lib/main.dart b/lib/main.dart index 577c9039..da8d5ab7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -249,8 +249,7 @@ Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { Future main() async { WidgetsFlutterBinding.ensureInitialized(); - // The flag optionally hides annoying WASM warnings in your Chrome dev console - pdfrxFlutterInitialize(dismissPdfiumWasmWarnings: true); + pdfrxFlutterInitialize(); // initialize Firebase before anything that uses messaging try { @@ -768,6 +767,10 @@ class _UpdateCheckWrapperState extends State { @override Widget build(BuildContext context) { + // Web has no update check. Skip the wrapper MaterialApp there: its plain + // Navigator gets the browser URL as its initial route and logs "Could not + // navigate to initial route" on every deep link. + if (kIsWeb) return const NotificationBridge(child: TasqApp()); return MaterialApp( debugShowCheckedModeBanner: false, theme: AppTheme.light(), @@ -791,14 +794,12 @@ class _UpdateCheckWrapperState extends State { ), ); }, - child: kIsWeb + child: _done ? const NotificationBridge(child: TasqApp()) - : (_done - ? const NotificationBridge(child: TasqApp()) - : UpdateCheckingScreen( - checkForUpdates: _checkForUpdates, - onCompleted: _handleUpdateComplete, - )), + : UpdateCheckingScreen( + checkForUpdates: _checkForUpdates, + onCompleted: _handleUpdateComplete, + ), ), ); } diff --git a/lib/models/announcement.dart b/lib/models/announcement.dart deleted file mode 100644 index 537dc6b9..00000000 --- a/lib/models/announcement.dart +++ /dev/null @@ -1 +0,0 @@ -export 'announcement.model.dart'; diff --git a/lib/models/announcement_comment.dart b/lib/models/announcement_comment.dart deleted file mode 100644 index 52118e32..00000000 --- a/lib/models/announcement_comment.dart +++ /dev/null @@ -1 +0,0 @@ -export 'announcement_comment.model.dart'; diff --git a/lib/models/attendance_log.dart b/lib/models/attendance_log.dart deleted file mode 100644 index d558ba26..00000000 --- a/lib/models/attendance_log.dart +++ /dev/null @@ -1 +0,0 @@ -export 'attendance_log.model.dart'; diff --git a/lib/models/chat_message.dart b/lib/models/chat_message.dart deleted file mode 100644 index b5af515b..00000000 --- a/lib/models/chat_message.dart +++ /dev/null @@ -1 +0,0 @@ -export 'chat_message.model.dart'; diff --git a/lib/models/duty_schedule.dart b/lib/models/duty_schedule.dart deleted file mode 100644 index b8e42f82..00000000 --- a/lib/models/duty_schedule.dart +++ /dev/null @@ -1 +0,0 @@ -export 'duty_schedule.model.dart'; diff --git a/lib/models/it_service_request.dart b/lib/models/it_service_request.dart deleted file mode 100644 index d68ec1bb..00000000 --- a/lib/models/it_service_request.dart +++ /dev/null @@ -1 +0,0 @@ -export 'it_service_request.model.dart'; diff --git a/lib/models/it_service_request_action.dart b/lib/models/it_service_request_action.dart deleted file mode 100644 index 53ba8b4d..00000000 --- a/lib/models/it_service_request_action.dart +++ /dev/null @@ -1 +0,0 @@ -export 'it_service_request_action.model.dart'; diff --git a/lib/models/it_service_request_activity_log.dart b/lib/models/it_service_request_activity_log.dart deleted file mode 100644 index f424d71b..00000000 --- a/lib/models/it_service_request_activity_log.dart +++ /dev/null @@ -1 +0,0 @@ -export 'it_service_request_activity_log.model.dart'; diff --git a/lib/models/it_service_request_assignment.dart b/lib/models/it_service_request_assignment.dart deleted file mode 100644 index 00effcdd..00000000 --- a/lib/models/it_service_request_assignment.dart +++ /dev/null @@ -1 +0,0 @@ -export 'it_service_request_assignment.model.dart'; diff --git a/lib/models/leave_of_absence.dart b/lib/models/leave_of_absence.dart deleted file mode 100644 index 94614ffe..00000000 --- a/lib/models/leave_of_absence.dart +++ /dev/null @@ -1 +0,0 @@ -export 'leave_of_absence.model.dart'; diff --git a/lib/models/notification_item.dart b/lib/models/notification_item.dart deleted file mode 100644 index 98b96b7a..00000000 --- a/lib/models/notification_item.dart +++ /dev/null @@ -1 +0,0 @@ -export 'notification_item.model.dart'; diff --git a/lib/models/office.dart b/lib/models/office.dart deleted file mode 100644 index f20d7117..00000000 --- a/lib/models/office.dart +++ /dev/null @@ -1 +0,0 @@ -export 'office.model.dart'; diff --git a/lib/models/pass_slip.dart b/lib/models/pass_slip.dart deleted file mode 100644 index a60eca34..00000000 --- a/lib/models/pass_slip.dart +++ /dev/null @@ -1 +0,0 @@ -export 'pass_slip.model.dart'; diff --git a/lib/models/profile.dart b/lib/models/profile.dart deleted file mode 100644 index 0098a0ab..00000000 --- a/lib/models/profile.dart +++ /dev/null @@ -1 +0,0 @@ -export 'profile.model.dart'; diff --git a/lib/models/service.dart b/lib/models/service.dart deleted file mode 100644 index 486a7371..00000000 --- a/lib/models/service.dart +++ /dev/null @@ -1 +0,0 @@ -export 'service.model.dart'; diff --git a/lib/models/swap_request.dart b/lib/models/swap_request.dart deleted file mode 100644 index 74d3816d..00000000 --- a/lib/models/swap_request.dart +++ /dev/null @@ -1 +0,0 @@ -export 'swap_request.model.dart'; diff --git a/lib/models/task.dart b/lib/models/task.dart deleted file mode 100644 index 1239b1e1..00000000 --- a/lib/models/task.dart +++ /dev/null @@ -1 +0,0 @@ -export 'task.model.dart'; diff --git a/lib/models/task_activity_log.dart b/lib/models/task_activity_log.dart deleted file mode 100644 index de0b5529..00000000 --- a/lib/models/task_activity_log.dart +++ /dev/null @@ -1 +0,0 @@ -export 'task_activity_log.model.dart'; diff --git a/lib/models/team.dart b/lib/models/team.dart deleted file mode 100644 index 08c303de..00000000 --- a/lib/models/team.dart +++ /dev/null @@ -1 +0,0 @@ -export 'team.model.dart'; diff --git a/lib/models/ticket.dart b/lib/models/ticket.dart deleted file mode 100644 index c7f9e39d..00000000 --- a/lib/models/ticket.dart +++ /dev/null @@ -1 +0,0 @@ -export 'ticket.model.dart'; diff --git a/lib/providers/announcements_provider.dart b/lib/providers/announcements_provider.dart index fd62f9b8..e67c3ae5 100644 --- a/lib/providers/announcements_provider.dart +++ b/lib/providers/announcements_provider.dart @@ -3,8 +3,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/announcement.dart'; -import '../models/announcement_comment.dart'; +import '../models/announcement.model.dart'; +import '../models/announcement_comment.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; @@ -273,35 +273,37 @@ final announcementCommentsProvider = ..sort((a, b) => a.createdAt.compareTo(b.createdAt)); } - final wrapper = StreamRecoveryWrapper( - stream: client - .from('announcement_comments') - .stream(primaryKey: ['id']) - .eq('announcement_id', announcementId) - .order('created_at'), - onPollData: () async { - final data = await client - .from('announcement_comments') - .select() - .eq('announcement_id', announcementId) - .order('created_at'); - return data.map(AnnouncementComment.fromMap).toList(); - }, - fromMap: AnnouncementComment.fromMap, - channelName: 'announcement_comments_$announcementId', - onStatusChanged: ref.read(realtimeControllerProvider).handleChannelStatus, - onOfflineData: () async { - final all = await cachedListFromBrick(); - final filtered = all - .where((c) => c.announcementId == announcementId) - .toList() - ..sort((a, b) => a.createdAt.compareTo(b.createdAt)); - return applyPending(filtered); - }, - onCacheMirror: (rows) => mirrorBatchToBrick( - rows, - tag: 'announcement_comments'), - ); + final wrapper = StreamRecoveryWrapper( + stream: client + .from('announcement_comments') + .stream(primaryKey: ['id']) + .eq('announcement_id', announcementId) + .order('created_at', ascending: true), + onPollData: () async { + final data = await client + .from('announcement_comments') + .select() + .eq('announcement_id', announcementId) + .order('created_at', ascending: true); + return data.map(AnnouncementComment.fromMap).toList(); + }, + fromMap: AnnouncementComment.fromMap, + channelName: 'announcement_comments_$announcementId', + onStatusChanged: ref + .read(realtimeControllerProvider) + .handleChannelStatus, + onOfflineData: () async { + final all = await cachedListFromBrick(); + final filtered = + all.where((c) => c.announcementId == announcementId).toList() + ..sort((a, b) => a.createdAt.compareTo(b.createdAt)); + return applyPending(filtered); + }, + onCacheMirror: (rows) => mirrorBatchToBrick( + rows, + tag: 'announcement_comments', + ), + ); ref.onDispose(wrapper.dispose); return wrapper.stream.map((result) => applyPending(result.data)); diff --git a/lib/providers/attendance_provider.dart b/lib/providers/attendance_provider.dart index c062658b..341a66be 100644 --- a/lib/providers/attendance_provider.dart +++ b/lib/providers/attendance_provider.dart @@ -8,7 +8,7 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/attendance_log.dart'; +import '../models/attendance_log.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; diff --git a/lib/providers/chat_provider.dart b/lib/providers/chat_provider.dart index 58fd62cc..435d2a8f 100644 --- a/lib/providers/chat_provider.dart +++ b/lib/providers/chat_provider.dart @@ -4,7 +4,7 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/chat_message.dart'; +import '../models/chat_message.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; @@ -42,21 +42,22 @@ final chatMessagesProvider = StreamProvider.family, String>(( byId.putIfAbsent(p.id, () => p); } return byId.values.toList() - ..sort((a, b) => a.createdAt.compareTo(b.createdAt)); + ..sort((a, b) => b.createdAt.compareTo(a.createdAt)); } + // Newest-first everywhere: the swap chat renders with ListView(reverse: true). final wrapper = StreamRecoveryWrapper( stream: client .from('chat_messages') .stream(primaryKey: ['id']) .eq('thread_id', threadId) - .order('created_at'), + .order('created_at', ascending: false), onPollData: () async { final data = await client .from('chat_messages') .select() .eq('thread_id', threadId) - .order('created_at'); + .order('created_at', ascending: false); return data.map(ChatMessage.fromMap).toList(); }, fromMap: ChatMessage.fromMap, @@ -64,10 +65,8 @@ final chatMessagesProvider = StreamProvider.family, String>(( onStatusChanged: ref.read(realtimeControllerProvider).handleChannelStatus, onOfflineData: () async { final all = await cachedListFromBrick(); - final filtered = all - .where((m) => m.threadId == threadId) - .toList() - ..sort((a, b) => a.createdAt.compareTo(b.createdAt)); + final filtered = all.where((m) => m.threadId == threadId).toList() + ..sort((a, b) => b.createdAt.compareTo(a.createdAt)); return applyPending(filtered); }, onCacheMirror: (rows) => diff --git a/lib/providers/it_service_request_provider.dart b/lib/providers/it_service_request_provider.dart index fd2160dc..4886495d 100644 --- a/lib/providers/it_service_request_provider.dart +++ b/lib/providers/it_service_request_provider.dart @@ -9,10 +9,10 @@ import 'package:flutter/material.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/it_service_request.dart'; -import '../models/it_service_request_assignment.dart'; -import '../models/it_service_request_activity_log.dart'; -import '../models/it_service_request_action.dart'; +import '../models/it_service_request.model.dart'; +import '../models/it_service_request_assignment.model.dart'; +import '../models/it_service_request_activity_log.model.dart'; +import '../models/it_service_request_action.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; diff --git a/lib/providers/leave_provider.dart b/lib/providers/leave_provider.dart index 9e954281..c9f378d2 100644 --- a/lib/providers/leave_provider.dart +++ b/lib/providers/leave_provider.dart @@ -4,7 +4,7 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/leave_of_absence.dart'; +import '../models/leave_of_absence.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; diff --git a/lib/providers/network_map/network_devices_provider.dart b/lib/providers/network_map/network_devices_provider.dart index 29b15e1b..db8c3eac 100644 --- a/lib/providers/network_map/network_devices_provider.dart +++ b/lib/providers/network_map/network_devices_provider.dart @@ -8,7 +8,7 @@ import '../supabase_provider.dart'; final networkDevicesProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('network_devices').select().order('name'); + final rows = await client.from('network_devices').select().order('name', ascending: true); return (rows as List) .map((r) => NetworkDevice.fromMap(r as Map)) .toList(); @@ -16,7 +16,7 @@ final networkDevicesProvider = FutureProvider>((ref) async { final networkPortsProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('network_ports').select().order('port_number'); + final rows = await client.from('network_ports').select().order('port_number', ascending: true); return (rows as List) .map((r) => NetworkPort.fromMap(r as Map)) .toList(); @@ -32,7 +32,7 @@ final networkLinksProvider = FutureProvider>((ref) async { final networkVlansProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('network_vlans').select().order('vlan_id'); + final rows = await client.from('network_vlans').select().order('vlan_id', ascending: true); return (rows as List) .map((r) => NetworkVlan.fromMap(r as Map)) .toList(); @@ -57,7 +57,7 @@ final networkPortsByDeviceProvider = .from('network_ports') .select() .eq('device_id', deviceId) - .order('port_number'); + .order('port_number', ascending: true); return (rows as List) .map((r) => NetworkPort.fromMap(r as Map)) .toList(); diff --git a/lib/providers/network_map/network_sites_provider.dart b/lib/providers/network_map/network_sites_provider.dart index 6ecea7c5..596a6e86 100644 --- a/lib/providers/network_map/network_sites_provider.dart +++ b/lib/providers/network_map/network_sites_provider.dart @@ -6,7 +6,7 @@ import '../supabase_provider.dart'; final networkSitesProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('network_sites').select().order('name'); + final rows = await client.from('network_sites').select().order('name', ascending: true); return (rows as List) .map((r) => NetworkSite.fromMap(r as Map)) .toList(); @@ -14,7 +14,7 @@ final networkSitesProvider = FutureProvider>((ref) async { final networkLocationsProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('network_locations').select().order('name'); + final rows = await client.from('network_locations').select().order('name', ascending: true); return (rows as List) .map((r) => NetworkLocation.fromMap(r as Map)) .toList(); diff --git a/lib/providers/notifications_provider.dart b/lib/providers/notifications_provider.dart index 3abaff49..5cbbe556 100644 --- a/lib/providers/notifications_provider.dart +++ b/lib/providers/notifications_provider.dart @@ -4,7 +4,7 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import '../utils/device_id.dart'; import '../brick/cache_helpers.dart'; -import '../models/notification_item.dart'; +import '../models/notification_item.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; diff --git a/lib/providers/pass_slip_provider.dart b/lib/providers/pass_slip_provider.dart index 8fc8ba64..f01b79b4 100644 --- a/lib/providers/pass_slip_provider.dart +++ b/lib/providers/pass_slip_provider.dart @@ -4,7 +4,7 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; -import '../models/pass_slip.dart'; +import '../models/pass_slip.model.dart'; import '../utils/app_time.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'connectivity_provider.dart'; diff --git a/lib/providers/profile_provider.dart b/lib/providers/profile_provider.dart index 591c20eb..f70169e7 100644 --- a/lib/providers/profile_provider.dart +++ b/lib/providers/profile_provider.dart @@ -9,7 +9,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import '../brick/cache_helpers.dart'; -import '../models/profile.dart'; +import '../models/profile.model.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; import 'auth_provider.dart'; import 'connectivity_provider.dart'; @@ -165,9 +165,12 @@ final profilesProvider = StreamProvider>((ref) { stream: client .from('profiles') .stream(primaryKey: ['id']) - .order('full_name'), + .order('full_name', ascending: true), onPollData: () async { - final data = await client.from('profiles').select().order('full_name'); + final data = await client + .from('profiles') + .select() + .order('full_name', ascending: true); return data.map(Profile.fromMap).toList(); }, fromMap: Profile.fromMap, diff --git a/lib/providers/services_provider.dart b/lib/providers/services_provider.dart index 58146000..9a52b018 100644 --- a/lib/providers/services_provider.dart +++ b/lib/providers/services_provider.dart @@ -1,7 +1,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../brick/cache_helpers.dart'; -import '../models/service.dart'; +import '../models/service.model.dart'; import 'supabase_provider.dart'; import 'stream_recovery.dart'; import 'realtime_controller.dart'; @@ -10,9 +10,15 @@ final servicesProvider = StreamProvider>((ref) { final client = ref.watch(supabaseClientProvider); final wrapper = StreamRecoveryWrapper( - stream: client.from('services').stream(primaryKey: ['id']).order('name'), + stream: client + .from('services') + .stream(primaryKey: ['id']) + .order('name', ascending: true), onPollData: () async { - final data = await client.from('services').select().order('name'); + final data = await client + .from('services') + .select() + .order('name', ascending: true); return data.map(Service.fromMap).toList(); }, fromMap: Service.fromMap, @@ -33,7 +39,10 @@ final servicesProvider = StreamProvider>((ref) { final servicesOnceProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('services').select().order('name'); + final rows = await client + .from('services') + .select() + .order('name', ascending: true); return (rows as List) .map((r) => Service.fromMap(r as Map)) .toList(); diff --git a/lib/providers/stream_recovery.dart b/lib/providers/stream_recovery.dart index 38d7b1f6..e62ea33d 100644 --- a/lib/providers/stream_recovery.dart +++ b/lib/providers/stream_recovery.dart @@ -1,3 +1,7 @@ +// The constructor deliberately exposes public named params (onPollData, …) that +// initialize private fields (_onPollData, …); the initializing-formal "fix" +// would rename the params to private and break all call sites. +// ignore_for_file: prefer_initializing_formals import 'dart:async'; import 'dart:math' as math; import 'package:flutter/foundation.dart'; diff --git a/lib/providers/tasks_provider.dart b/lib/providers/tasks_provider.dart index fa9b32db..1d8e00e1 100644 --- a/lib/providers/tasks_provider.dart +++ b/lib/providers/tasks_provider.dart @@ -9,8 +9,8 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import '../brick/cache_helpers.dart'; import '../brick/repository.dart'; -import '../models/task.dart'; -import '../models/task_activity_log.dart'; +import '../models/task.model.dart'; +import '../models/task_activity_log.model.dart'; import 'connectivity_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; diff --git a/lib/providers/teams_provider.dart b/lib/providers/teams_provider.dart index e21d5558..a6b171bc 100644 --- a/lib/providers/teams_provider.dart +++ b/lib/providers/teams_provider.dart @@ -2,7 +2,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../brick/cache_helpers.dart'; import '../brick/cache_warmer.dart'; -import '../models/team.dart'; +import '../models/team.model.dart'; import '../models/team_member.dart'; import 'realtime_controller.dart'; import 'stream_recovery.dart'; @@ -13,9 +13,15 @@ final teamsProvider = StreamProvider>((ref) { final client = ref.watch(supabaseClientProvider); final wrapper = StreamRecoveryWrapper( - stream: client.from('teams').stream(primaryKey: ['id']).order('name'), + stream: client + .from('teams') + .stream(primaryKey: ['id']) + .order('name', ascending: true), onPollData: () async { - final data = await client.from('teams').select().order('name'); + final data = await client + .from('teams') + .select() + .order('name', ascending: true); return data.map(Team.fromMap).toList(); }, fromMap: Team.fromMap, diff --git a/lib/providers/tickets_provider.dart b/lib/providers/tickets_provider.dart index 95949420..84da74aa 100644 --- a/lib/providers/tickets_provider.dart +++ b/lib/providers/tickets_provider.dart @@ -10,8 +10,8 @@ import 'package:uuid/uuid.dart'; import '../brick/cache_helpers.dart'; import '../brick/repository.dart'; import '../utils/snackbar.dart' show isOfflineSaveError; -import '../models/office.dart'; -import '../models/ticket.dart'; +import '../models/office.model.dart'; +import '../models/ticket.model.dart'; import '../models/ticket_message.dart'; import 'profile_provider.dart'; import 'supabase_provider.dart'; @@ -39,9 +39,15 @@ final officesProvider = StreamProvider>((ref) { } final wrapper = StreamRecoveryWrapper( - stream: client.from('offices').stream(primaryKey: ['id']).order('name'), + stream: client + .from('offices') + .stream(primaryKey: ['id']) + .order('name', ascending: true), onPollData: () async { - final data = await client.from('offices').select().order('name'); + final data = await client + .from('offices') + .select() + .order('name', ascending: true); return data.map(Office.fromMap).toList(); }, fromMap: Office.fromMap, @@ -94,7 +100,10 @@ final officesProvider = StreamProvider>((ref) { final officesOnceProvider = FutureProvider>((ref) async { final client = ref.watch(supabaseClientProvider); - final rows = await client.from('offices').select().order('name'); + final rows = await client + .from('offices') + .select() + .order('name', ascending: true); return (rows as List) .map((row) => Office.fromMap(row as Map)) .toList(); diff --git a/lib/providers/user_offices_provider.dart b/lib/providers/user_offices_provider.dart index 06107402..28f6bd74 100644 --- a/lib/providers/user_offices_provider.dart +++ b/lib/providers/user_offices_provider.dart @@ -52,9 +52,9 @@ final userOfficesProvider = StreamProvider>((ref) { stream: client .from('user_offices') .stream(primaryKey: ['user_id', 'office_id']) - .order('created_at'), + .order('created_at', ascending: true), onPollData: () async { - final data = await client.from('user_offices').select().order('created_at'); + final data = await client.from('user_offices').select().order('created_at', ascending: true); return data.map(UserOffice.fromMap).toList(); }, fromMap: UserOffice.fromMap, diff --git a/lib/providers/workforce_provider.dart b/lib/providers/workforce_provider.dart index c2cb16ca..3cecd442 100644 --- a/lib/providers/workforce_provider.dart +++ b/lib/providers/workforce_provider.dart @@ -7,8 +7,8 @@ import 'package:supabase_flutter/supabase_flutter.dart'; import '../brick/cache_helpers.dart'; import '../models/app_settings.dart'; -import '../models/duty_schedule.dart'; -import '../models/swap_request.dart'; +import '../models/duty_schedule.model.dart'; +import '../models/swap_request.model.dart'; import 'profile_provider.dart'; import 'supabase_provider.dart'; import 'stream_recovery.dart'; @@ -65,12 +65,12 @@ final dutySchedulesProvider = StreamProvider>((ref) { stream: client .from('duty_schedules') .stream(primaryKey: ['id']) - .order('start_time'), + .order('start_time', ascending: true), onPollData: () async { final data = await client .from('duty_schedules') .select() - .order('start_time'); + .order('start_time', ascending: true); return data.map(DutySchedule.fromMap).toList(); }, fromMap: DutySchedule.fromMap, @@ -89,13 +89,16 @@ final dutySchedulesProvider = StreamProvider>((ref) { // Immediate poll so any changes that happened while this provider was // not alive (e.g. a swap was accepted on another device) are reflected - // right away — before the 3-second periodic timer fires. + // right away — before the periodic timer fires. wrapper.pollNow(); - // Periodic safety-net: keep polling every 3 s so that ownership changes + // Periodic safety-net: keep polling so that ownership changes // (swap accepted → user_id updated on duty_schedules) are always picked // up even if Supabase Realtime misses the event. - final dutyRefreshTimer = Timer.periodic(const Duration(seconds: 3), (_) { + // ponytail: was 3 s, i.e. every client re-downloaded the whole table ~20x a + // minute. Realtime is the primary path; 60 s bounds how stale a missed swap + // can get. Tighten only if swaps need faster convergence. + final dutyRefreshTimer = Timer.periodic(const Duration(seconds: 60), (_) { wrapper.pollNow(); }); ref.onDispose(dutyRefreshTimer.cancel); @@ -135,7 +138,7 @@ final dutySchedulesForUserProvider = .eq('user_id', userId) /* exclude past schedules by ensuring the shift has not ended */ .gte('end_time', nowIso) - .order('start_time') + .order('start_time', ascending: true) as List; return rows .map((r) => DutySchedule.fromMap(r as Map)) @@ -201,13 +204,14 @@ final swapRequestsProvider = StreamProvider>((ref) { // Immediate poll: fetch fresh data right away so any status changes that // happened while this provider was not alive are reflected instantly, - // before the 3-second periodic timer fires for the first time. + // before the periodic timer fires for the first time. wrapper.pollNow(); - // Periodic safety-net: keep polling every 3 s to catch any status changes + // Periodic safety-net: keep polling to catch any status changes // that Supabase Realtime may have missed (e.g. when the swap_requests table // is not yet in the supabase_realtime publication). - final refreshTimer = Timer.periodic(const Duration(seconds: 3), (_) { + // ponytail: was 3 s (see dutySchedulesProvider); 60 s safety net. + final refreshTimer = Timer.periodic(const Duration(seconds: 60), (_) { wrapper.pollNow(); }); ref.onDispose(refreshTimer.cancel); diff --git a/lib/routing/app_router.dart b/lib/routing/app_router.dart index 4967486c..6f8888cc 100644 --- a/lib/routing/app_router.dart +++ b/lib/routing/app_router.dart @@ -41,6 +41,9 @@ import '../theme/m3_motion.dart'; import '../utils/navigation.dart'; +Page Function(BuildContext, GoRouterState) _page(Widget child) => + (context, state) => M3SharedAxisPage(key: state.pageKey, child: child); + String _defaultRouteForRole(String? role) { switch (role) { case 'it_staff': @@ -100,14 +103,18 @@ final appRouterProvider = Provider((ref) { return _defaultRouteForRole(role); } // Deferred post-login redirect: profile loaded after the initial redirect - // (which fell back to /dashboard because role was null). Only fires once - // per sign-in and only when the user is still on /dashboard. - if (isSignedIn && - notifier._needsRoleRedirect && - role != null && - state.matchedLocation == '/dashboard') { + // (which fell back to /dashboard because role was null). Consumed once + // per sign-in; only redirects when the user is still on /dashboard. + if (isSignedIn && notifier._needsRoleRedirect && role != null) { notifier._needsRoleRedirect = false; - return _defaultRouteForRole(role); + if (state.matchedLocation == '/dashboard') { + return _defaultRouteForRole(role); + } + } + // Role unknown while the profile loads: hold the deep link instead of + // bouncing it. RouterNotifier re-runs this once the profile arrives. + if (isSignedIn && profileAsync.isLoading && role == null) { + return null; } if (isAdminRoute && !isAdmin) { return '/tickets'; @@ -145,31 +152,19 @@ final appRouterProvider = Provider((ref) { routes: [ GoRoute( path: '/settings/teams', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const TeamsScreen(), - ), + pageBuilder: _page(const TeamsScreen()), ), GoRoute( path: '/settings/app-update', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const AppUpdateScreen(), - ), + pageBuilder: _page(const AppUpdateScreen()), ), GoRoute( path: '/dashboard', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const DashboardScreen(), - ), + pageBuilder: _page(const DashboardScreen()), ), GoRoute( path: '/tickets', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const TicketsListScreen(), - ), + pageBuilder: _page(const TicketsListScreen()), routes: [ GoRoute( path: ':id', @@ -184,10 +179,7 @@ final appRouterProvider = Provider((ref) { ), GoRoute( path: '/tasks', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const TasksListScreen(), - ), + pageBuilder: _page(const TasksListScreen()), routes: [ GoRoute( path: ':id', @@ -202,10 +194,7 @@ final appRouterProvider = Provider((ref) { ), GoRoute( path: '/it-service-requests', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const ItServiceRequestsListScreen(), - ), + pageBuilder: _page(const ItServiceRequestsListScreen()), routes: [ GoRoute( path: ':id', @@ -220,80 +209,44 @@ final appRouterProvider = Provider((ref) { ), GoRoute( path: '/announcements', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const AnnouncementsScreen(), - ), + pageBuilder: _page(const AnnouncementsScreen()), ), GoRoute( path: '/workforce', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const WorkforceScreen(), - ), + pageBuilder: _page(const WorkforceScreen()), ), GoRoute( path: '/attendance', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const AttendanceScreen(), - ), + pageBuilder: _page(const AttendanceScreen()), ), GoRoute( path: '/whereabouts', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const WhereaboutsScreen(), - ), - ), - GoRoute( - path: '/reports', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const ReportsScreen(), - ), + pageBuilder: _page(const WhereaboutsScreen()), ), + GoRoute(path: '/reports', pageBuilder: _page(const ReportsScreen())), GoRoute( path: '/settings/users', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const UserManagementScreen(), - ), + pageBuilder: _page(const UserManagementScreen()), ), GoRoute( path: '/settings/offices', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const OfficesScreen(), - ), + pageBuilder: _page(const OfficesScreen()), ), GoRoute( path: '/settings/geofence-test', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const GeofenceTestScreen(), - ), + pageBuilder: _page(const GeofenceTestScreen()), ), GoRoute( path: '/settings/permissions', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const PermissionsScreen(), - ), + pageBuilder: _page(const PermissionsScreen()), ), GoRoute( path: '/network-map', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const NetworkMapOverviewScreen(), - ), + pageBuilder: _page(const NetworkMapOverviewScreen()), routes: [ GoRoute( path: 'import', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const NetworkMapImportScreen(), - ), + pageBuilder: _page(const NetworkMapImportScreen()), routes: [ GoRoute( path: ':importId/review', @@ -308,10 +261,7 @@ final appRouterProvider = Provider((ref) { ), GoRoute( path: 'vlans', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const NetworkMapVlanScreen(), - ), + pageBuilder: _page(const NetworkMapVlanScreen()), ), GoRoute( path: 'site/:siteId', @@ -357,18 +307,9 @@ final appRouterProvider = Provider((ref) { ), GoRoute( path: '/notifications', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const NotificationsScreen(), - ), - ), - GoRoute( - path: '/profile', - pageBuilder: (context, state) => M3SharedAxisPage( - key: state.pageKey, - child: const ProfileScreen(), - ), + pageBuilder: _page(const NotificationsScreen()), ), + GoRoute(path: '/profile', pageBuilder: _page(const ProfileScreen())), ], ), ], diff --git a/lib/screens/admin/offices_screen.dart b/lib/screens/admin/offices_screen.dart index cf460a65..dda356e8 100644 --- a/lib/screens/admin/offices_screen.dart +++ b/lib/screens/admin/offices_screen.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../../theme/m3_motion.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/office.dart'; +import '../../models/office.model.dart'; import '../../providers/profile_provider.dart'; import '../../providers/tickets_provider.dart'; import '../../providers/services_provider.dart'; diff --git a/lib/screens/admin/user_management_screen.dart b/lib/screens/admin/user_management_screen.dart index 927f8a10..cbdea12f 100644 --- a/lib/screens/admin/user_management_screen.dart +++ b/lib/screens/admin/user_management_screen.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import '../../theme/m3_motion.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:intl/intl.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; import '../../models/ticket_message.dart'; import '../../models/user_office.dart'; import '../../providers/admin_user_provider.dart'; @@ -713,9 +714,7 @@ String _formatLastActiveLabel(DateTime? value) { if (diff.inHours < 1) return '${diff.inMinutes}m ago'; if (diff.inDays < 1) return '${diff.inHours}h ago'; if (diff.inDays < 7) return '${diff.inDays}d ago'; - final month = value.month.toString().padLeft(2, '0'); - final day = value.day.toString().padLeft(2, '0'); - return '${value.year}-$month-$day'; + return DateFormat('yyyy-MM-dd').format(value); } class _StatusBadge extends StatelessWidget { diff --git a/lib/screens/announcements/announcement_comments_section.dart b/lib/screens/announcements/announcement_comments_section.dart index 37452098..ffa4d96a 100644 --- a/lib/screens/announcements/announcement_comments_section.dart +++ b/lib/screens/announcements/announcement_comments_section.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/announcement_comment.dart'; +import '../../models/announcement_comment.model.dart'; import '../../providers/announcements_provider.dart'; import '../../providers/profile_provider.dart'; import '../../utils/app_time.dart'; @@ -49,10 +49,9 @@ class _AnnouncementCommentsSectionState // Comment was posted; only push notification delivery failed. _controller.clear(); if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text('Comment posted, but notifications may not have been sent.'), - ), + showInfoSnackBar( + context, + 'Comment posted, but notifications may not have been sent.', ); } } catch (e) { @@ -225,7 +224,7 @@ class _CommentTile extends StatelessWidget { const SizedBox(width: 8), Flexible( child: Text( - _relativeTime(comment.createdAt), + AppTime.relative(comment.createdAt), style: tt.labelSmall ?.copyWith(color: cs.onSurfaceVariant), overflow: TextOverflow.ellipsis, @@ -252,12 +251,3 @@ class _CommentTile extends StatelessWidget { } } -String _relativeTime(DateTime dt) { - final now = AppTime.now(); - final diff = now.difference(dt); - if (diff.inMinutes < 1) return 'just now'; - if (diff.inMinutes < 60) return '${diff.inMinutes}m ago'; - if (diff.inHours < 24) return '${diff.inHours}h ago'; - if (diff.inDays < 7) return '${diff.inDays}d ago'; - return AppTime.formatDate(dt); -} diff --git a/lib/screens/announcements/announcements_screen.dart b/lib/screens/announcements/announcements_screen.dart index 5ea3e2bc..278d6c66 100644 --- a/lib/screens/announcements/announcements_screen.dart +++ b/lib/screens/announcements/announcements_screen.dart @@ -4,7 +4,7 @@ import 'dart:math' as math show min; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/announcement.dart'; +import '../../models/announcement.model.dart'; import '../../providers/announcements_provider.dart'; import '../../providers/profile_provider.dart'; import '../../theme/m3_motion.dart'; @@ -381,7 +381,7 @@ class _AnnouncementCardState extends ConsumerState<_AnnouncementCard> { children: [ Flexible( child: Text( - _relativeTime(widget.announcement.createdAt), + AppTime.relative(widget.announcement.createdAt), style: tt.labelSmall ?.copyWith(color: cs.onSurfaceVariant), ), @@ -578,16 +578,6 @@ class _AnnouncementCardState extends ConsumerState<_AnnouncementCard> { // Helpers // ───────────────────────────────────────────────────────────────────────────── -String _relativeTime(DateTime dt) { - final now = AppTime.now(); - final diff = now.difference(dt); - if (diff.inMinutes < 1) return 'Just now'; - if (diff.inMinutes < 60) return '${diff.inMinutes}m ago'; - if (diff.inHours < 24) return '${diff.inHours}h ago'; - if (diff.inDays < 7) return '${diff.inDays}d ago'; - return AppTime.formatDate(dt); -} - String _roleLabel(String role) { const labels = { 'admin': 'Admin', diff --git a/lib/screens/announcements/create_announcement_dialog.dart b/lib/screens/announcements/create_announcement_dialog.dart index 0a81fd79..ff451610 100644 --- a/lib/screens/announcements/create_announcement_dialog.dart +++ b/lib/screens/announcements/create_announcement_dialog.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/announcement.dart'; +import '../../models/announcement.model.dart'; import '../../providers/announcements_provider.dart'; import '../../theme/m3_motion.dart'; import '../../utils/app_time.dart'; @@ -260,12 +260,9 @@ class _CreateAnnouncementContentState widget.editing != null ? 'Announcement updated.' : 'Announcement posted.'); } on AnnouncementNotificationException { if (mounted) { - final messenger = ScaffoldMessenger.of(context); Navigator.of(context).pop(); - messenger.showSnackBar( - const SnackBar( - content: Text('Posted, but some notifications failed to send.'), - ), + showInfoSnackBarGlobal( + 'Posted, but some notifications failed to send.', ); } } catch (e) { diff --git a/lib/screens/attendance/attendance_screen.dart b/lib/screens/attendance/attendance_screen.dart index 34d0dcbe..eacd2fc4 100644 --- a/lib/screens/attendance/attendance_screen.dart +++ b/lib/screens/attendance/attendance_screen.dart @@ -8,11 +8,11 @@ import 'package:geolocator/geolocator.dart'; import 'package:latlong2/latlong.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; -import '../../models/attendance_log.dart'; -import '../../models/duty_schedule.dart'; -import '../../models/leave_of_absence.dart'; -import '../../models/pass_slip.dart'; -import '../../models/profile.dart'; +import '../../models/attendance_log.model.dart'; +import '../../models/duty_schedule.model.dart'; +import '../../models/leave_of_absence.model.dart'; +import '../../models/pass_slip.model.dart'; +import '../../models/profile.model.dart'; import '../../models/rotation_config.dart'; import '../../providers/attendance_provider.dart'; import '../../providers/debug_settings_provider.dart'; @@ -26,8 +26,8 @@ import '../../providers/whereabouts_provider.dart'; import '../../providers/workforce_provider.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/it_service_request_provider.dart'; -import '../../models/it_service_request.dart'; -import '../../models/swap_request.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/swap_request.model.dart'; import '../../providers/tasks_provider.dart'; import '../../providers/tickets_provider.dart'; import 'dtr_pdf.dart'; diff --git a/lib/screens/attendance/logbook_day_activity.dart b/lib/screens/attendance/logbook_day_activity.dart index 3bdf59b1..77a02a1e 100644 --- a/lib/screens/attendance/logbook_day_activity.dart +++ b/lib/screens/attendance/logbook_day_activity.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:intl/intl.dart'; -import '../../models/attendance_log.dart'; -import '../../models/it_service_request.dart'; -import '../../models/pass_slip.dart'; -import '../../models/task.dart'; -import '../../models/ticket.dart'; +import '../../models/attendance_log.model.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/pass_slip.model.dart'; +import '../../models/task.model.dart'; +import '../../models/ticket.model.dart'; import '../../theme/m3_motion.dart'; import '../../utils/app_time.dart'; @@ -392,16 +393,8 @@ class LogbookDayActivitySheet extends ConsumerWidget { ); } - static String _formatDate(DateTime d) { - const weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']; - const months = [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', - ]; - final wd = weekdays[d.weekday - 1]; - final mo = months[d.month - 1]; - return '$wd, $mo ${d.day}, ${d.year}'; - } + static String _formatDate(DateTime d) => + DateFormat('EEE, MMM d, yyyy', 'en_US').format(d); static String _initials(String name) { final parts = name.trim().split(RegExp(r'\s+')); diff --git a/lib/screens/attendance/work_log_tab.dart b/lib/screens/attendance/work_log_tab.dart index 2af935be..f003b07e 100644 --- a/lib/screens/attendance/work_log_tab.dart +++ b/lib/screens/attendance/work_log_tab.dart @@ -8,14 +8,14 @@ import 'package:intl/intl.dart'; import 'package:printing/printing.dart'; import 'package:share_plus/share_plus.dart'; -import '../../models/attendance_log.dart'; -import '../../models/it_service_request.dart'; -import '../../models/it_service_request_assignment.dart'; -import '../../models/pass_slip.dart'; -import '../../models/task.dart'; -import '../../models/task_activity_log.dart'; +import '../../models/attendance_log.model.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/it_service_request_assignment.model.dart'; +import '../../models/pass_slip.model.dart'; +import '../../models/task.model.dart'; +import '../../models/task_activity_log.model.dart'; import '../../models/task_assignment.dart'; -import '../../models/ticket.dart'; +import '../../models/ticket.model.dart'; import '../../providers/attendance_provider.dart'; import '../../providers/it_service_request_provider.dart'; import '../../providers/pass_slip_provider.dart'; @@ -24,6 +24,7 @@ import '../../providers/tasks_provider.dart'; import '../../providers/tickets_provider.dart'; import '../../theme/m3_motion.dart'; import '../../utils/app_time.dart'; +import '../../utils/snackbar.dart'; import 'work_log_pdf.dart'; // ─── Domain types ──────────────────────────────────────────────────────────── @@ -674,9 +675,7 @@ class _WorkLogTabState extends ConsumerState { } } catch (e) { if (context.mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Export failed: $e')), - ); + showErrorSnackBar(context, 'Export failed: $e'); } } finally { entry.remove(); @@ -691,7 +690,6 @@ class _WorkLogTabState extends ConsumerState { String personName, String rangeLabel, ) async { - final messenger = ScaffoldMessenger.of(context); try { final range = _effectiveDateRange; final modeLabel = switch (_viewMode) { @@ -730,9 +728,7 @@ class _WorkLogTabState extends ConsumerState { ); } catch (e) { if (!context.mounted) return; - messenger.showSnackBar( - SnackBar(content: Text('Export failed: $e')), - ); + showErrorSnackBar(context, 'Export failed: $e'); } } @@ -862,7 +858,6 @@ class _WorkLogTabState extends ConsumerState { String personName, List<_DailySummaryData> multiDaySummaries, ) async { - final messenger = ScaffoldMessenger.of(context); try { late Uint8List bytes; if (!_isMultiDay || _isDrilling) { @@ -901,9 +896,7 @@ class _WorkLogTabState extends ConsumerState { ); } catch (e) { if (!context.mounted) return; - messenger.showSnackBar( - SnackBar(content: Text('Failed to generate PDF: $e')), - ); + showErrorSnackBar(context, 'Failed to generate PDF: $e'); } } diff --git a/lib/screens/auth/login_screen.dart b/lib/screens/auth/login_screen.dart index a5faed8a..c10d5fd3 100644 --- a/lib/screens/auth/login_screen.dart +++ b/lib/screens/auth/login_screen.dart @@ -72,9 +72,9 @@ class _LoginScreenState extends ConsumerState email: _emailController.text.trim(), password: _passwordController.text, ); - if (response.session != null && mounted) { - context.go('/tickets'); - } else if (mounted) { + // On success the router's auth redirect sends each role to its landing + // route (_defaultRouteForRole), so don't navigate here. + if (response.session == null && mounted) { showInfoSnackBar(context, 'Check your email to confirm sign-in.'); } } on Exception catch (error) { @@ -205,6 +205,9 @@ class _LoginScreenState extends ConsumerState labelText: 'Password', prefixIcon: const Icon(Icons.lock_outlined), suffixIcon: IconButton( + tooltip: _obscurePassword + ? 'Show password' + : 'Hide password', icon: Icon( _obscurePassword ? Icons.visibility_outlined diff --git a/lib/screens/auth/signup_screen.dart b/lib/screens/auth/signup_screen.dart index 70f2daab..f3922ce6 100644 --- a/lib/screens/auth/signup_screen.dart +++ b/lib/screens/auth/signup_screen.dart @@ -202,6 +202,9 @@ class _SignUpScreenState extends ConsumerState labelText: 'Password', prefixIcon: const Icon(Icons.lock_outlined), suffixIcon: IconButton( + tooltip: _obscurePassword + ? 'Show password' + : 'Hide password', icon: Icon( _obscurePassword ? Icons.visibility_outlined @@ -280,6 +283,9 @@ class _SignUpScreenState extends ConsumerState labelText: 'Confirm password', prefixIcon: const Icon(Icons.lock_outlined), suffixIcon: IconButton( + tooltip: _obscureConfirm + ? 'Show password' + : 'Hide password', icon: Icon( _obscureConfirm ? Icons.visibility_outlined diff --git a/lib/screens/dashboard/dashboard_screen.dart b/lib/screens/dashboard/dashboard_screen.dart index 5af60d11..e7ab558f 100644 --- a/lib/screens/dashboard/dashboard_screen.dart +++ b/lib/screens/dashboard/dashboard_screen.dart @@ -1,3 +1,4 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../../theme/m3_motion.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -5,18 +6,18 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/attendance_log.dart'; -import '../../models/duty_schedule.dart'; -import '../../models/leave_of_absence.dart'; +import '../../models/attendance_log.model.dart'; +import '../../models/duty_schedule.model.dart'; +import '../../models/leave_of_absence.model.dart'; import '../../models/live_position.dart'; -import '../../models/pass_slip.dart'; -import '../../models/profile.dart'; -import '../../models/task.dart'; +import '../../models/pass_slip.model.dart'; +import '../../models/profile.model.dart'; +import '../../models/task.model.dart'; import '../../models/task_assignment.dart'; -import '../../models/ticket.dart'; +import '../../models/ticket.model.dart'; import '../../models/ticket_message.dart'; -import '../../models/it_service_request.dart'; -import '../../models/it_service_request_assignment.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/it_service_request_assignment.model.dart'; import '../../providers/attendance_provider.dart'; import '../../providers/leave_provider.dart'; import '../../providers/pass_slip_provider.dart'; @@ -27,7 +28,7 @@ import '../../providers/whereabouts_provider.dart'; import '../../providers/workforce_provider.dart'; import '../../providers/it_service_request_provider.dart'; import '../../providers/teams_provider.dart'; -import '../../models/team.dart'; +import '../../models/team.model.dart'; import '../../models/team_member.dart'; import 'dart:math' as math; import '../../widgets/responsive_body.dart'; @@ -407,10 +408,7 @@ final dashboardMetricsProvider = Provider>((ref) { AppTime.now().difference(livePos.updatedAt) > const Duration(minutes: 15); if (stale) { - final diff = AppTime.now().difference(livePos.updatedAt); - final ago = diff.inMinutes < 60 - ? '${diff.inMinutes}m ago' - : '${diff.inHours}h ago'; + final ago = AppTime.relative(livePos.updatedAt); whereabouts = livePos.inPremise ? 'Last seen in premise \u00b7 $ago' : 'Last seen outside \u00b7 $ago'; @@ -628,6 +626,8 @@ class _DashboardScreenState extends State { void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) async { + // Sound/vibration settings and openAppSettings() don't apply on web. + if (kIsWeb) return; final prefs = await SharedPreferences.getInstance(); final seen = prefs.getBool('has_seen_notif_showcase') ?? false; if (!seen) { @@ -1110,36 +1110,24 @@ class _StaffRow extends StatelessWidget { ); } - // IT Staff cell: avatar on mobile, name on desktop, with team color dot - Widget staffCell; - if (isMobile) { - staffCell = Row( - mainAxisSize: MainAxisSize.min, - children: [ - teamMarker, - const SizedBox(width: 4), - Flexible( - child: Tooltip( - message: row.name, - child: ProfileAvatar( - fullName: row.name, - avatarUrl: row.avatarUrl, - radius: 14, - ), - ), + // IT Staff cell: name (ellipsized on narrow screens) with team color dot. + // Mobile used initials-only avatars, which are ambiguous and need a + // long-press tooltip to identify anyone. + final staffCell = Row( + mainAxisSize: MainAxisSize.min, + children: [ + teamMarker, + const SizedBox(width: 6), + Flexible( + child: Text( + row.name, + style: valueStyle, + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - ], - ); - } else { - staffCell = Row( - mainAxisSize: MainAxisSize.min, - children: [ - teamMarker, - const SizedBox(width: 6), - Flexible(child: Text(row.name, style: valueStyle)), - ], - ); - } + ), + ], + ); return Padding( padding: const EdgeInsets.symmetric(vertical: 6), diff --git a/lib/screens/it_service_requests/it_service_request_detail_screen.dart b/lib/screens/it_service_requests/it_service_request_detail_screen.dart index d1d83a8e..b795650a 100644 --- a/lib/screens/it_service_requests/it_service_request_detail_screen.dart +++ b/lib/screens/it_service_requests/it_service_request_detail_screen.dart @@ -9,12 +9,12 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter_quill/flutter_quill.dart' as quill; import 'package:skeletonizer/skeletonizer.dart'; -import '../../models/it_service_request.dart'; -import '../../models/it_service_request_assignment.dart'; -import '../../models/it_service_request_activity_log.dart'; -import '../../models/it_service_request_action.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/it_service_request_assignment.model.dart'; +import '../../models/it_service_request_activity_log.model.dart'; +import '../../models/it_service_request_action.model.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; import '../../providers/it_service_request_provider.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/profile_provider.dart'; @@ -22,6 +22,7 @@ import '../../providers/supabase_provider.dart'; import '../../providers/tickets_provider.dart'; import '../../services/ai_service.dart'; import '../../utils/app_time.dart'; +import '../../utils/debouncer.dart'; import '../../utils/snackbar.dart'; import '../../widgets/app_breakpoints.dart'; import '../../widgets/gemini_animated_text_field.dart'; @@ -85,7 +86,7 @@ class _ItServiceRequestDetailScreenState Timer? _eventDetailsDebounce; Timer? _remarksDebounce; - Timer? _actionDebounce; + final _actionDebounce = Debouncer(const Duration(milliseconds: 800)); String _eventDetailsLastPlain = ''; String _remarksLastPlain = ''; @@ -147,7 +148,7 @@ class _ItServiceRequestDetailScreenState _actionTakenController?.dispose(); _eventDetailsDebounce?.cancel(); _remarksDebounce?.cancel(); - _actionDebounce?.cancel(); + _actionDebounce.cancel(); _savedBadgeTimer?.cancel(); _saveAnimController.dispose(); _tabController.dispose(); @@ -1388,8 +1389,7 @@ class _ItServiceRequestDetailScreenState final plain = _actionTakenController!.document.toPlainText().trim(); if (plain == _actionLastPlain) return; _actionLastPlain = plain; - _actionDebounce?.cancel(); - _actionDebounce = Timer(const Duration(milliseconds: 800), () async { + _actionDebounce.run(() async { final delta = _actionTakenController!.document.toDelta(); final deltaJson = jsonEncode(delta.toJson()); if (mounted) { diff --git a/lib/screens/it_service_requests/it_service_request_pdf.dart b/lib/screens/it_service_requests/it_service_request_pdf.dart index bb595216..87199e99 100644 --- a/lib/screens/it_service_requests/it_service_request_pdf.dart +++ b/lib/screens/it_service_requests/it_service_request_pdf.dart @@ -8,10 +8,10 @@ import 'package:pdf/widgets.dart' as pw; import 'package:pdf/pdf.dart' as pdf; import 'package:printing/printing.dart'; -import '../../models/it_service_request.dart'; -import '../../models/it_service_request_assignment.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/it_service_request_assignment.model.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; import '../../utils/app_time.dart'; /// Build PDF bytes for IT Service Request Form. diff --git a/lib/screens/it_service_requests/it_service_requests_list_screen.dart b/lib/screens/it_service_requests/it_service_requests_list_screen.dart index 5bb01797..9b65c482 100644 --- a/lib/screens/it_service_requests/it_service_requests_list_screen.dart +++ b/lib/screens/it_service_requests/it_service_requests_list_screen.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import '../../models/it_service_request.dart'; -import '../../models/it_service_request_assignment.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; +import '../../models/it_service_request.model.dart'; +import '../../models/it_service_request_assignment.model.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; import '../../brick/cache_helpers.dart'; import '../../providers/it_service_request_provider.dart'; import '../../providers/profile_provider.dart'; @@ -430,9 +430,16 @@ class _ItServiceRequestsListScreenState onPressed: () => Navigator.pop(ctx, false), child: const Text('Cancel'), ), - FilledButton( - onPressed: () => Navigator.pop(ctx, true), - child: const Text('Create'), + // Disabled until named, so the dialog never closes and drops + // the user's input on a validation failure. + ValueListenableBuilder( + valueListenable: nameController, + builder: (context, value, child) => FilledButton( + onPressed: value.text.trim().isEmpty + ? null + : () => Navigator.pop(ctx, true), + child: const Text('Create'), + ), ), ], ); @@ -442,10 +449,6 @@ class _ItServiceRequestsListScreenState ); if (result != true || !context.mounted) return; - if (nameController.text.trim().isEmpty) { - showWarningSnackBar(context, 'Event name is required'); - return; - } try { final ctrl = ref.read(itServiceRequestControllerProvider); diff --git a/lib/screens/network_map/network_map_device_edit_screen.dart b/lib/screens/network_map/network_map_device_edit_screen.dart index 2eaf839a..baa6a2d0 100644 --- a/lib/screens/network_map/network_map_device_edit_screen.dart +++ b/lib/screens/network_map/network_map_device_edit_screen.dart @@ -112,6 +112,7 @@ class _NetworkMapDeviceEditScreenState decoration: const InputDecoration( labelText: 'Name (e.g. Floor 3, Rack U-12)', ), + onChanged: (_) => setLocal(() {}), ), const SizedBox(height: 12), DropdownButtonFormField( @@ -135,7 +136,11 @@ class _NetworkMapDeviceEditScreenState child: const Text('Cancel'), ), FilledButton( - onPressed: () => Navigator.pop(ctx, true), + // Keep Create disabled until a name is entered, instead of + // silently discarding an empty submit after close (QA-048). + onPressed: nameCtrl.text.trim().isEmpty + ? null + : () => Navigator.pop(ctx, true), child: const Text('Create'), ), ], diff --git a/lib/screens/network_map/network_map_import_review_screen.dart b/lib/screens/network_map/network_map_import_review_screen.dart index 795f56ee..a126e90c 100644 --- a/lib/screens/network_map/network_map_import_review_screen.dart +++ b/lib/screens/network_map/network_map_import_review_screen.dart @@ -8,6 +8,7 @@ import '../../models/network/network_port.dart'; import '../../providers/network_map/network_devices_provider.dart'; import '../../providers/network_map/network_import_provider.dart'; import '../../providers/network_map/network_sites_provider.dart'; +import '../../utils/snackbar.dart'; import '../../widgets/app_state_view.dart'; import 'widgets/import_diff_view.dart'; @@ -247,12 +248,11 @@ class NetworkMapImportReviewScreen extends ConsumerWidget { ); if (context.mounted) { - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text( - 'Applied ${createdDeviceIds.length} devices, ' - '${createdLinkIds.length} links.', - ), - )); + showSuccessSnackBar( + context, + 'Applied ${createdDeviceIds.length} devices, ' + '${createdLinkIds.length} links.', + ); context.go('/network-map'); } } diff --git a/lib/screens/network_map/network_map_overview_screen.dart b/lib/screens/network_map/network_map_overview_screen.dart index 7a9681f4..e8174df9 100644 --- a/lib/screens/network_map/network_map_overview_screen.dart +++ b/lib/screens/network_map/network_map_overview_screen.dart @@ -6,6 +6,7 @@ import '../../models/network/network_device.dart'; import '../../providers/network_map/network_devices_provider.dart'; import '../../providers/network_map/network_sites_provider.dart'; import '../../providers/profile_provider.dart'; +import '../../utils/snackbar.dart'; import '../../widgets/app_page_header.dart'; import '../../widgets/app_state_view.dart'; import '../../widgets/responsive_body.dart'; @@ -276,9 +277,7 @@ class _UnassignedSection extends ConsumerWidget { ) async { final sites = ref.read(networkSitesProvider).valueOrNull ?? const []; if (sites.isEmpty) { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('Create a site first.')), - ); + showWarningSnackBar(context, 'Create a site first.'); return; } String? picked = sites.first.id; @@ -321,9 +320,7 @@ class _UnassignedSection extends ConsumerWidget { } if (context.mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text('Moved ${devices.length} devices.')), - ); + showSuccessSnackBar(context, 'Moved ${devices.length} devices.'); } } } diff --git a/lib/screens/network_map/network_map_vlan_screen.dart b/lib/screens/network_map/network_map_vlan_screen.dart index f8e851de..ea601beb 100644 --- a/lib/screens/network_map/network_map_vlan_screen.dart +++ b/lib/screens/network_map/network_map_vlan_screen.dart @@ -98,40 +98,56 @@ class NetworkMapVlanScreen extends ConsumerWidget { final descCtrl = TextEditingController(); final ok = await showDialog( context: context, - builder: (ctx) => AlertDialog( - title: const Text('New VLAN'), - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - TextField( - controller: idCtrl, - keyboardType: TextInputType.number, - decoration: const InputDecoration(labelText: 'VLAN ID (1-4094)'), - autofocus: true, + builder: (ctx) => StatefulBuilder( + // Keep Create disabled until the input is valid, instead of accepting + // the click and silently discarding out-of-range/empty input after the + // dialog closes (QA-048; matches the QA-029 disabled-until-valid fix). + builder: (ctx, setDialogState) { + final parsedId = int.tryParse(idCtrl.text.trim()); + final isValid = parsedId != null && + parsedId >= 1 && + parsedId <= 4094 && + nameCtrl.text.trim().isNotEmpty; + return AlertDialog( + title: const Text('New VLAN'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + controller: idCtrl, + keyboardType: TextInputType.number, + decoration: + const InputDecoration(labelText: 'VLAN ID (1-4094)'), + autofocus: true, + onChanged: (_) => setDialogState(() {}), + ), + const SizedBox(height: 8), + TextField( + controller: nameCtrl, + decoration: const InputDecoration(labelText: 'Name'), + onChanged: (_) => setDialogState(() {}), + ), + const SizedBox(height: 8), + TextField( + controller: descCtrl, + decoration: const InputDecoration( + labelText: 'Description (optional)', + ), + ), + ], ), - const SizedBox(height: 8), - TextField( - controller: nameCtrl, - decoration: const InputDecoration(labelText: 'Name'), - ), - const SizedBox(height: 8), - TextField( - controller: descCtrl, - decoration: - const InputDecoration(labelText: 'Description (optional)'), - ), - ], - ), - actions: [ - TextButton( - onPressed: () => Navigator.pop(ctx, false), - child: const Text('Cancel'), - ), - FilledButton( - onPressed: () => Navigator.pop(ctx, true), - child: const Text('Create'), - ), - ], + actions: [ + TextButton( + onPressed: () => Navigator.pop(ctx, false), + child: const Text('Cancel'), + ), + FilledButton( + onPressed: isValid ? () => Navigator.pop(ctx, true) : null, + child: const Text('Create'), + ), + ], + ); + }, ), ); final vlanId = int.tryParse(idCtrl.text.trim()); diff --git a/lib/screens/network_map/widgets/link_edit_dialog.dart b/lib/screens/network_map/widgets/link_edit_dialog.dart index b319ab27..55ff1d45 100644 --- a/lib/screens/network_map/widgets/link_edit_dialog.dart +++ b/lib/screens/network_map/widgets/link_edit_dialog.dart @@ -4,6 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../models/network/network_link.dart'; import '../../../models/network/network_port.dart'; import '../../../providers/network_map/network_devices_provider.dart'; +import '../../../utils/snackbar.dart'; /// Opens an M3 dialog to connect [portId] to a port on another device. /// @@ -69,12 +70,7 @@ class _LinkEditDialogState extends ConsumerState<_LinkEditDialog> { if (mounted) Navigator.of(context).pop(true); } catch (e) { if (mounted) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text('Failed to create link: $e'), - backgroundColor: Theme.of(context).colorScheme.error, - ), - ); + showErrorSnackBar(context, 'Failed to create link: $e'); } } finally { if (mounted) setState(() => _saving = false); diff --git a/lib/screens/network_map/widgets/topology_legend.dart b/lib/screens/network_map/widgets/topology_legend.dart index e2c93ff8..ee6d6100 100644 --- a/lib/screens/network_map/widgets/topology_legend.dart +++ b/lib/screens/network_map/widgets/topology_legend.dart @@ -128,7 +128,7 @@ class _TopologyLegendState extends State opacity: _fade, child: SizeTransition( sizeFactor: _fade, - axisAlignment: -1, + alignment: const Alignment(-1.0, -1.0), child: Padding( padding: const EdgeInsets.only(top: 6), child: Material( diff --git a/lib/screens/notifications/notifications_screen.dart b/lib/screens/notifications/notifications_screen.dart index 6b48c0fc..825e548d 100644 --- a/lib/screens/notifications/notifications_screen.dart +++ b/lib/screens/notifications/notifications_screen.dart @@ -3,7 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:permission_handler/permission_handler.dart'; -import '../../models/notification_item.dart'; +import '../../models/notification_item.model.dart'; import '../../services/notification_service.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/profile_provider.dart'; diff --git a/lib/screens/profile/profile_screen.dart b/lib/screens/profile/profile_screen.dart index 862117fb..b740430c 100644 --- a/lib/screens/profile/profile_screen.dart +++ b/lib/screens/profile/profile_screen.dart @@ -2,8 +2,9 @@ import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:image_picker/image_picker.dart'; +import 'package:intl/intl.dart'; -import '../../models/office.dart'; +import '../../models/office.model.dart'; import '../../providers/auth_provider.dart' show sessionProvider; import '../../providers/profile_provider.dart'; import '../../providers/tickets_provider.dart'; @@ -426,9 +427,7 @@ class _ProfileScreenState extends ConsumerState { ); } - String _formatDate(DateTime dt) { - return '${dt.year}-${dt.month.toString().padLeft(2, '0')}-${dt.day.toString().padLeft(2, '0')}'; - } + String _formatDate(DateTime dt) => DateFormat('yyyy-MM-dd').format(dt); Future _pickAvatar(ImageSource source) async { try { diff --git a/lib/screens/reports/reports_screen.dart b/lib/screens/reports/reports_screen.dart index 48f5abf7..88e70e55 100644 --- a/lib/screens/reports/reports_screen.dart +++ b/lib/screens/reports/reports_screen.dart @@ -3,6 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../theme/m3_motion.dart'; import '../../providers/reports_provider.dart'; +import '../../utils/snackbar.dart'; import '../../widgets/app_page_header.dart'; import 'report_date_filter.dart'; import 'report_widget_selector.dart'; @@ -59,9 +60,7 @@ class _ReportsScreenState extends ConsumerState { await ReportPdfExport.sharePdf(pdfBytes); } catch (e) { if (mounted) { - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text('PDF export failed: $e'))); + showErrorSnackBar(context, 'PDF export failed: $e'); } } finally { if (mounted) setState(() => _exporting = false); diff --git a/lib/screens/tasks/it_job_checklist_tab.dart b/lib/screens/tasks/it_job_checklist_tab.dart index ce1d32b4..f2a99c11 100644 --- a/lib/screens/tasks/it_job_checklist_tab.dart +++ b/lib/screens/tasks/it_job_checklist_tab.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:skeletonizer/skeletonizer.dart'; -import '../../models/task.dart'; +import '../../models/task.model.dart'; import '../../models/task_assignment.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/profile_provider.dart'; diff --git a/lib/screens/tasks/task_detail_screen.dart b/lib/screens/tasks/task_detail_screen.dart index f75f6045..b6979c0a 100644 --- a/lib/screens/tasks/task_detail_screen.dart +++ b/lib/screens/tasks/task_detail_screen.dart @@ -4,13 +4,13 @@ import '../../theme/m3_motion.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/profile.dart'; -import '../../models/task.dart'; +import '../../models/profile.model.dart'; +import '../../models/task.model.dart'; import '../../models/task_assignment.dart'; -import '../../models/task_activity_log.dart'; -import '../../models/ticket.dart'; +import '../../models/task_activity_log.model.dart'; +import '../../models/ticket.model.dart'; import '../../models/ticket_message.dart'; -import '../../models/office.dart'; +import '../../models/office.model.dart'; import '../../providers/notifications_provider.dart'; import 'dart:async'; import 'dart:convert'; @@ -27,6 +27,7 @@ import '../../providers/typing_provider.dart'; import '../../providers/realtime_controller.dart'; import 'package:skeletonizer/skeletonizer.dart'; import '../../utils/app_time.dart'; +import '../../utils/debouncer.dart'; import '../../utils/snackbar.dart'; import '../../utils/subject_suggestions.dart'; import '../../widgets/app_breakpoints.dart'; @@ -100,16 +101,16 @@ class _TaskDetailScreenState extends ConsumerState final _receivedController = TextEditingController(); // Rich text editor for Action taken quill.QuillController? _actionController; - Timer? _actionDebounce; + final _actionDebounce = Debouncer(const Duration(milliseconds: 700)); /// Tracks the last plain-text snapshot so the addListener callback can /// distinguish real edits from cursor / selection / focus notifications. String _actionLastPlain = ''; late final FocusNode _actionFocusNode; late final ScrollController _actionScrollController; - Timer? _requestedDebounce; - Timer? _notedDebounce; - Timer? _receivedDebounce; + final _requestedDebounce = Debouncer(const Duration(milliseconds: 700)); + final _notedDebounce = Debouncer(const Duration(milliseconds: 700)); + final _receivedDebounce = Debouncer(const Duration(milliseconds: 700)); // Seeding/state tracking for signatory fields String? _seededTaskId; bool _requestedSaving = false; @@ -173,10 +174,10 @@ class _TaskDetailScreenState extends ConsumerState _requestedController.dispose(); _notedController.dispose(); _receivedController.dispose(); - _requestedDebounce?.cancel(); - _notedDebounce?.cancel(); - _receivedDebounce?.cancel(); - _actionDebounce?.cancel(); + _requestedDebounce.cancel(); + _notedDebounce.cancel(); + _receivedDebounce.cancel(); + _actionDebounce.cancel(); _elapsedTicker?.cancel(); _actionController?.dispose(); _actionFocusNode.dispose(); @@ -242,8 +243,9 @@ class _TaskDetailScreenState extends ConsumerState final pending = ref.read(offlinePendingTasksProvider); if (pending.isEmpty) return; final liveIds = live.map((t) => t.id).toSet(); - final stillPending = - pending.where((t) => !liveIds.contains(t.id)).toList(); + final stillPending = pending + .where((t) => !liveIds.contains(t.id)) + .toList(); if (stillPending.length != pending.length) { ref.read(offlinePendingTasksProvider.notifier).state = stillPending; } @@ -270,8 +272,9 @@ class _TaskDetailScreenState extends ConsumerState ); final showAssign = canAssign && task.status != 'completed'; final liveAssignments = assignmentsAsync.valueOrNull ?? []; - final pendingAssignUserIds = - ref.watch(offlinePendingAssignmentsProvider)[task.id]; + final pendingAssignUserIds = ref.watch( + offlinePendingAssignmentsProvider, + )[task.id]; final assignments = pendingAssignUserIds != null ? [ ...liveAssignments.where((a) => a.taskId != task.id), @@ -322,7 +325,8 @@ class _TaskDetailScreenState extends ConsumerState senderId: payload['sender_id'] as String?, content: payload['content'] as String? ?? '', createdAt: payload['created_at'] != null - ? DateTime.tryParse(payload['created_at'] as String) ?? DateTime.now() + ? DateTime.tryParse(payload['created_at'] as String) ?? + DateTime.now() : DateTime.now(), ); }); @@ -371,7 +375,7 @@ class _TaskDetailScreenState extends ConsumerState // Seed action taken plain text controller from persisted JSON or raw text try { - _actionDebounce?.cancel(); + _actionDebounce.cancel(); _actionController?.dispose(); if (task.actionTaken != null && task.actionTaken!.isNotEmpty) { try { @@ -407,48 +411,44 @@ class _TaskDetailScreenState extends ConsumerState if (currentPlain == _actionLastPlain) return; // no text change _actionLastPlain = currentPlain; - _actionDebounce?.cancel(); - _actionDebounce = Timer( - const Duration(milliseconds: 700), - () async { - if (!mounted) return; - final plain = currentPlain; + _actionDebounce.run(() async { + if (!mounted) return; + final plain = currentPlain; + if (mounted) { + setState(() { + _actionSaving = true; + _actionSaved = false; + }); + } + try { + final deltaJson = jsonEncode( + _actionController?.document.toDelta().toJson(), + ); + await ref + .read(tasksControllerProvider) + .updateTask(taskId: task.id, actionTaken: deltaJson); if (mounted) { setState(() { - _actionSaving = true; - _actionSaved = false; + _actionSaved = plain.isNotEmpty; }); } - try { - final deltaJson = jsonEncode( - _actionController?.document.toDelta().toJson(), - ); - await ref - .read(tasksControllerProvider) - .updateTask(taskId: task.id, actionTaken: deltaJson); - if (mounted) { - setState(() { - _actionSaved = plain.isNotEmpty; - }); - } - } catch (e) { - debugPrint('[TasQ] action-taken auto-save error: $e'); - } finally { - if (mounted) { - setState(() { - _actionSaving = false; - }); - } - if (_actionSaved) { - Future.delayed(const Duration(seconds: 2), () { - if (mounted) { - setState(() => _actionSaved = false); - } - }); - } + } catch (e) { + debugPrint('[TasQ] action-taken auto-save error: $e'); + } finally { + if (mounted) { + setState(() { + _actionSaving = false; + }); } - }, - ); + if (_actionSaved) { + Future.delayed(const Duration(seconds: 2), () { + if (mounted) { + setState(() => _actionSaved = false); + } + }); + } + } + }); }); } @@ -462,10 +462,9 @@ class _TaskDetailScreenState extends ConsumerState // ── Hero zone ──────────────────────────────────────────────── Container( decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .primaryContainer - .withValues(alpha: 0.12), + color: Theme.of( + context, + ).colorScheme.primaryContainer.withValues(alpha: 0.12), borderRadius: BorderRadius.circular(12), ), padding: const EdgeInsets.fromLTRB(16, 12, 8, 12), @@ -480,16 +479,11 @@ class _TaskDetailScreenState extends ConsumerState task.title.isNotEmpty ? task.title : 'Task ${task.taskNumber ?? task.id}', - style: Theme.of(context) - .textTheme - .headlineMedium + style: Theme.of(context).textTheme.headlineMedium ?.copyWith(fontWeight: FontWeight.w700), ), ), - SyncPendingBadge( - isPending: isPending, - compact: true, - ), + SyncPendingBadge(isPending: isPending, compact: true), const SizedBox(width: 4), Builder( builder: (ctx) { @@ -519,9 +513,9 @@ class _TaskDetailScreenState extends ConsumerState _createdByLabel(profilesAsync, task, ticket), style: Theme.of(context).textTheme.labelMedium ?.copyWith( - color: Theme.of(context) - .colorScheme - .onSurfaceVariant, + color: Theme.of( + context, + ).colorScheme.onSurfaceVariant, ), ), ], @@ -653,338 +647,711 @@ class _TaskDetailScreenState extends ConsumerState child: Material( color: Theme.of(context).colorScheme.surfaceContainerLow, child: ExpansionTile( - title: const Text('Details'), - initiallyExpanded: isWide, - childrenPadding: const EdgeInsets.symmetric(horizontal: 0), - children: [ - DefaultTabController( - length: 5, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - TabBar( - labelColor: Theme.of(context).colorScheme.onSurface, - indicatorColor: Theme.of( - context, - ).colorScheme.primary, - tabs: isWide - ? const [ - Tab(text: 'Assignees'), - Tab(text: 'Type & Category'), - Tab(text: 'Signatories'), - Tab(text: 'Action taken'), - Tab(text: 'Attachments'), - ] - : const [ - Tab(icon: Icon(Icons.person)), - Tab(icon: Icon(Icons.category)), - Tab(icon: Icon(Icons.check_circle)), - Tab(icon: Icon(Icons.description)), - Tab(icon: Icon(Icons.attach_file)), - ], - ), - const SizedBox(height: 8), - SizedBox( - height: isWide ? 360 : 300, - child: TabBarView( - children: [ - // Assignees (Tab 1) - Stack( + title: const Text('Details'), + initiallyExpanded: isWide, + childrenPadding: const EdgeInsets.symmetric( + horizontal: 0, + ), + children: [ + DefaultTabController( + length: 5, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TabBar( + labelColor: Theme.of( + context, + ).colorScheme.onSurface, + indicatorColor: Theme.of( + context, + ).colorScheme.primary, + tabs: isWide + ? const [ + Tab(text: 'Assignees'), + Tab(text: 'Type & Category'), + Tab(text: 'Signatories'), + Tab(text: 'Action taken'), + Tab(text: 'Attachments'), + ] + : const [ + Tab(icon: Icon(Icons.person)), + Tab(icon: Icon(Icons.category)), + Tab(icon: Icon(Icons.check_circle)), + Tab(icon: Icon(Icons.description)), + Tab(icon: Icon(Icons.attach_file)), + ], + ), + const SizedBox(height: 8), + SizedBox( + height: isWide ? 360 : 300, + child: TabBarView( children: [ - Positioned.fill( - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only( - top: 8.0, - bottom: 92, - ), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - TaskAssignmentSection( - taskId: task.id, - canAssign: showAssign, + // Assignees (Tab 1) + Stack( + children: [ + Positioned.fill( + child: SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only( + top: 8.0, + bottom: 92, ), - const SizedBox(height: 12), - const SizedBox.shrink(), - ], + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + TaskAssignmentSection( + taskId: task.id, + canAssign: showAssign, + ), + const SizedBox(height: 12), + const SizedBox.shrink(), + ], + ), + ), ), ), - ), - ), - if (canUpdateStatus && - task.status == 'in_progress') - Positioned( - right: 8, - bottom: 8, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: - CrossAxisAlignment.end, - children: [ - IconButton.filledTonal( - tooltip: isTaskPaused - ? 'Resume task' - : 'Pause task', - onPressed: _pauseActionInFlight - ? null - : () async { - setState( - () => - _pauseActionInFlight = - true, - ); - try { - if (isTaskPaused) { - await ref - .read( - tasksControllerProvider, - ) - .resumeTask( - taskId: task.id, - ); - ref.invalidate( - taskActivityLogsProvider( - task.id, - ), - ); - if (mounted) { - showSuccessSnackBarGlobal( - 'Task resumed', - ); - } - } else { - await ref - .read( - tasksControllerProvider, - ) - .pauseTask( - taskId: task.id, - ); - ref.invalidate( - taskActivityLogsProvider( - task.id, - ), - ); - if (mounted) { - showInfoSnackBarGlobal( - 'Task paused', - ); - } - } - } catch (e) { - if (mounted) { - showErrorSnackBarGlobal( - e.toString(), - ); - } - } finally { - if (mounted) { + if (canUpdateStatus && + task.status == 'in_progress') + Positioned( + right: 8, + bottom: 8, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + IconButton.filledTonal( + tooltip: isTaskPaused + ? 'Resume task' + : 'Pause task', + onPressed: + _pauseActionInFlight + ? null + : () async { setState( () => _pauseActionInFlight = - false, + true, ); - } - } - }, - icon: _pauseActionInFlight - ? const SizedBox( - width: 18, - height: 18, - child: - CircularProgressIndicator( - strokeWidth: 2, + try { + if (isTaskPaused) { + await ref + .read( + tasksControllerProvider, + ) + .resumeTask( + taskId: + task.id, + ); + ref.invalidate( + taskActivityLogsProvider( + task.id, + ), + ); + if (mounted) { + showSuccessSnackBarGlobal( + 'Task resumed', + ); + } + } else { + await ref + .read( + tasksControllerProvider, + ) + .pauseTask( + taskId: + task.id, + ); + ref.invalidate( + taskActivityLogsProvider( + task.id, + ), + ); + if (mounted) { + showInfoSnackBarGlobal( + 'Task paused', + ); + } + } + } catch (e) { + if (mounted) { + showErrorSnackBarGlobal( + e.toString(), + ); + } + } finally { + if (mounted) { + setState( + () => + _pauseActionInFlight = + false, + ); + } + } + }, + icon: _pauseActionInFlight + ? const SizedBox( + width: 18, + height: 18, + child: + CircularProgressIndicator( + strokeWidth: 2, + ), + ) + : Icon( + isTaskPaused + ? Icons.play_arrow + : Icons.pause, + ), + ), + const SizedBox(height: 4), + Text( + 'Elapsed ${_formatDurationClock(elapsedDuration)}', + style: Theme.of( + context, + ).textTheme.labelSmall, + ), + ], + ), + ), + ], + ), + + // Type & Category + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only( + top: 8.0, + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + if (!canUpdateStatus) ...[ + _MetaBadge( + label: 'Type', + value: + task.requestType ?? 'None', + ), + const SizedBox(height: 8), + _MetaBadge( + label: 'Category', + value: + task.requestCategory ?? + 'None', + ), + ] else ...[ + const Text('Type'), + const SizedBox(height: 6), + DropdownButtonFormField( + initialValue: task.requestType, + decoration: InputDecoration( + suffixIcon: _typeSaving + ? SizedBox( + width: 16, + height: 16, + child: + ScaleTransition( + scale: + _savePulse, + child: + const Icon( + Icons + .save, + size: 14, + ), + ), + ) + : _typeSaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], ), - ) - : Icon( - isTaskPaused - ? Icons.play_arrow - : Icons.pause, + ) + : null, + ), + items: [ + const DropdownMenuItem( + value: null, + child: Text('None'), + ), + for (final t + in requestTypeOptions) + DropdownMenuItem( + value: t, + child: Text(t), ), - ), - const SizedBox(height: 4), - Text( - 'Elapsed ${_formatDurationClock(elapsedDuration)}', - style: Theme.of( - context, - ).textTheme.labelSmall, - ), + ], + onChanged: (v) async { + setState(() { + _typeSaving = true; + _typeSaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + requestType: v, + ); + setState( + () => _typeSaved = + v != null && + v.isNotEmpty, + ); + } catch (_) { + } finally { + setState( + () => _typeSaving = false, + ); + if (_typeSaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => _typeSaved = + false, + ); + } + }, + ); + } + } + }, + ), + if (task.requestType == + 'Other') ...[ + const SizedBox(height: 8), + TextFormField( + initialValue: + task.requestTypeOther, + decoration: InputDecoration( + hintText: 'Details', + suffixIcon: _typeSaving + ? SizedBox( + width: 16, + height: 16, + child: ScaleTransition( + scale: _savePulse, + child: const Icon( + Icons.save, + size: 14, + ), + ), + ) + : _typeSaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: + Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : null, + ), + onChanged: (text) async { + setState(() { + _typeSaving = true; + _typeSaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + requestTypeOther: + text.isEmpty + ? null + : text, + ); + setState( + () => _typeSaved = + text.isNotEmpty, + ); + } catch (_) { + } finally { + setState( + () => + _typeSaving = false, + ); + if (_typeSaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => + _typeSaved = + false, + ); + } + }, + ); + } + } + }, + ), + ], + const SizedBox(height: 8), + const Text('Category'), + const SizedBox(height: 6), + DropdownButtonFormField( + initialValue: + task.requestCategory, + decoration: InputDecoration( + suffixIcon: _categorySaving + ? SizedBox( + width: 16, + height: 16, + child: + ScaleTransition( + scale: + _savePulse, + child: + const Icon( + Icons + .save, + size: 14, + ), + ), + ) + : _categorySaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : null, + ), + items: [ + const DropdownMenuItem( + value: null, + child: Text('None'), + ), + for (final c + in requestCategoryOptions) + DropdownMenuItem( + value: c, + child: Text(c), + ), + ], + onChanged: (v) async { + setState(() { + _categorySaving = true; + _categorySaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + requestCategory: v, + ); + setState( + () => _categorySaved = + v != null && + v.isNotEmpty, + ); + } catch (_) { + } finally { + setState( + () => _categorySaving = + false, + ); + if (_categorySaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => + _categorySaved = + false, + ); + } + }, + ); + } + } + }, + ), + ], + const SizedBox(height: 12), ], ), ), - ], - ), + ), - // Type & Category - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - if (!canUpdateStatus) ...[ - _MetaBadge( - label: 'Type', - value: task.requestType ?? 'None', - ), - const SizedBox(height: 8), - _MetaBadge( - label: 'Category', - value: - task.requestCategory ?? 'None', - ), - ] else ...[ - const Text('Type'), - const SizedBox(height: 6), - DropdownButtonFormField( - initialValue: task.requestType, - decoration: InputDecoration( - suffixIcon: _typeSaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), - ), - ) - : _typeSaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: - Colors.white, - ), - ), - ], - ), - ) - : null, + // Signatories (editable) + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only( + top: 8.0, + ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Requested by', + style: Theme.of( + context, + ).textTheme.bodySmall, ), - items: [ - const DropdownMenuItem( - value: null, - child: Text('None'), - ), - for (final t - in requestTypeOptions) - DropdownMenuItem( - value: t, - child: Text(t), + const SizedBox(height: 6), + TypeAheadFormField( + textFieldConfiguration: TextFieldConfiguration( + controller: + _requestedController, + decoration: InputDecoration( + hintText: + 'Requester name or id', + suffixIcon: _requestedSaving + ? SizedBox( + width: 16, + height: 16, + child: + ScaleTransition( + scale: + _savePulse, + child: + const Icon( + Icons + .save, + size: 14, + ), + ), + ) + : _requestedSaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : null, ), - ], - onChanged: (v) async { - setState(() { - _typeSaving = true; - _typeSaved = false; - }); - try { - await ref - .read( - tasksControllerProvider, - ) - .updateTask( - taskId: task.id, - requestType: v, - ); - setState( - () => _typeSaved = - v != null && v.isNotEmpty, - ); - } catch (_) { - } finally { - setState( - () => _typeSaving = false, - ); - if (_typeSaved) { - Future.delayed( - const Duration(seconds: 2), - () { - if (mounted) { - setState( - () => _typeSaved = - false, + onChanged: (v) { + _requestedDebounce.run(() async { + final name = v.trim(); + setState(() { + _requestedSaving = true; + _requestedSaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + requestedBy: + name.isEmpty + ? null + : name, + ); + if (name.isNotEmpty) { + try { + await ref + .read( + supabaseClientProvider, + ) + .from('clients') + .upsert({ + 'name': name, + }); + } catch (_) {} + } + setState(() { + _requestedSaved = + name.isNotEmpty; + }); + } catch (_) { + } finally { + setState(() { + _requestedSaving = + false; + }); + if (_requestedSaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => + _requestedSaved = + false, + ); + } + }, ); } - }, - ); - } - } - }, - ), - if (task.requestType == 'Other') ...[ - const SizedBox(height: 8), - TextFormField( - initialValue: - task.requestTypeOther, - decoration: InputDecoration( - hintText: 'Details', - suffixIcon: _typeSaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), - ), - ) - : _typeSaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: - Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: Colors - .white, - ), - ), - ], - ), - ) - : null, + } + }); + }, ), - onChanged: (text) async { + suggestionsCallback: (pattern) async { + final profiles = + ref + .watch(profilesProvider) + .valueOrNull ?? + []; + final fromProfiles = profiles + .map( + (p) => p.fullName.isEmpty + ? p.id + : p.fullName, + ) + .where( + (n) => n + .toLowerCase() + .contains( + pattern + .toLowerCase(), + ), + ) + .toList(); + try { + final clientRows = await ref + .read( + supabaseClientProvider, + ) + .from('clients') + .select('name') + .ilike( + 'name', + '%$pattern%', + ); + final clientNames = + (clientRows + as List?) + ?.map( + (r) => + r['name'] + as String, + ) + .whereType() + .toList() ?? + []; + final merged = { + ...fromProfiles, + ...clientNames, + }.toList(); + return merged; + } catch (_) { + return fromProfiles; + } + }, + itemBuilder: + (context, suggestion) => + ListTile( + title: Text(suggestion), + ), + onSuggestionSelected: (suggestion) async { + _requestedDebounce.cancel(); + _requestedController.text = + suggestion; setState(() { - _typeSaving = true; - _typeSaved = false; + _requestedSaving = true; + _requestedSaved = false; }); try { await ref @@ -993,21 +1360,34 @@ class _TaskDetailScreenState extends ConsumerState ) .updateTask( taskId: task.id, - requestTypeOther: - text.isEmpty + requestedBy: + suggestion.isEmpty ? null - : text, + : suggestion, ); + if (suggestion.isNotEmpty) { + try { + await ref + .read( + supabaseClientProvider, + ) + .from('clients') + .upsert({ + 'name': suggestion, + }); + } catch (_) {} + } setState( - () => _typeSaved = - text.isNotEmpty, + () => _requestedSaved = + suggestion.isNotEmpty, ); } catch (_) { } finally { setState( - () => _typeSaving = false, + () => _requestedSaving = + false, ); - if (_typeSaved) { + if (_requestedSaved) { Future.delayed( const Duration( seconds: 2, @@ -1015,8 +1395,9 @@ class _TaskDetailScreenState extends ConsumerState () { if (mounted) { setState( - () => _typeSaved = - false, + () => + _requestedSaved = + false, ); } }, @@ -1025,505 +1406,185 @@ class _TaskDetailScreenState extends ConsumerState } }, ), - ], - const SizedBox(height: 8), - const Text('Category'), - const SizedBox(height: 6), - DropdownButtonFormField( - initialValue: task.requestCategory, - decoration: InputDecoration( - suffixIcon: _categorySaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), - ), - ) - : _categorySaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: - Colors.white, - ), - ), - ], - ), - ) - : null, + + const SizedBox(height: 12), + Text( + 'Noted by (Supervisor/Senior)', + style: Theme.of( + context, + ).textTheme.bodySmall, ), - items: [ - const DropdownMenuItem( - value: null, - child: Text('None'), - ), - for (final c - in requestCategoryOptions) - DropdownMenuItem( - value: c, - child: Text(c), + const SizedBox(height: 6), + TypeAheadFormField( + textFieldConfiguration: TextFieldConfiguration( + controller: _notedController, + decoration: InputDecoration( + hintText: 'Supervisor/Senior', + suffixIcon: _notedSaving + ? SizedBox( + width: 16, + height: 16, + child: + ScaleTransition( + scale: + _savePulse, + child: + const Icon( + Icons + .save, + size: 14, + ), + ), + ) + : _notedSaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : null, ), - ], - onChanged: (v) async { - setState(() { - _categorySaving = true; - _categorySaved = false; - }); - try { - await ref - .read( - tasksControllerProvider, - ) - .updateTask( - taskId: task.id, - requestCategory: v, - ); - setState( - () => _categorySaved = - v != null && v.isNotEmpty, - ); - } catch (_) { - } finally { - setState( - () => _categorySaving = false, - ); - if (_categorySaved) { - Future.delayed( - const Duration(seconds: 2), - () { - if (mounted) { - setState( - () => _categorySaved = - false, + onChanged: (v) { + _notedDebounce.run(() async { + final name = v.trim(); + setState(() { + _notedSaving = true; + _notedSaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + notedBy: + name.isEmpty + ? null + : name, + ); + if (name.isNotEmpty) { + try { + await ref + .read( + supabaseClientProvider, + ) + .from('clients') + .upsert({ + 'name': name, + }); + } catch (_) {} + } + setState(() { + _notedSaved = + name.isNotEmpty; + }); + } catch (_) { + // ignore + } finally { + setState(() { + _notedSaving = false; + }); + if (_notedSaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => + _notedSaved = + false, + ); + } + }, ); } - }, - ); - } - } - }, - ), - ], - const SizedBox(height: 12), - ], - ), - ), - ), - - // Signatories (editable) - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - 'Requested by', - style: Theme.of( - context, - ).textTheme.bodySmall, - ), - const SizedBox(height: 6), - TypeAheadFormField( - textFieldConfiguration: TextFieldConfiguration( - controller: _requestedController, - decoration: InputDecoration( - hintText: 'Requester name or id', - suffixIcon: _requestedSaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), - ), - ) - : _requestedSaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: - Colors.white, - ), - ), - ], - ), - ) - : null, - ), - onChanged: (v) { - _requestedDebounce?.cancel(); - _requestedDebounce = Timer( - const Duration( - milliseconds: 700, - ), - () async { - final name = v.trim(); - setState(() { - _requestedSaving = true; - _requestedSaved = false; + } }); - try { - await ref - .read( - tasksControllerProvider, - ) - .updateTask( - taskId: task.id, - requestedBy: - name.isEmpty - ? null - : name, - ); - if (name.isNotEmpty) { - try { - await ref - .read( - supabaseClientProvider, - ) - .from('clients') - .upsert({ - 'name': name, - }); - } catch (_) {} - } - setState(() { - _requestedSaved = - name.isNotEmpty; - }); - } catch (_) { - } finally { - setState(() { - _requestedSaving = false; - }); - if (_requestedSaved) { - Future.delayed( - const Duration( - seconds: 2, - ), - () { - if (mounted) { - setState( - () => - _requestedSaved = - false, - ); - } - }, - ); - } - } }, - ); - }, - ), - suggestionsCallback: (pattern) async { - final profiles = - ref - .watch(profilesProvider) - .valueOrNull ?? - []; - final fromProfiles = profiles - .map( - (p) => p.fullName.isEmpty - ? p.id - : p.fullName, - ) - .where( - (n) => - n.toLowerCase().contains( - pattern.toLowerCase(), - ), - ) - .toList(); - try { - final clientRows = await ref - .read(supabaseClientProvider) - .from('clients') - .select('name') - .ilike('name', '%$pattern%'); - final clientNames = - (clientRows as List?) - ?.map( - (r) => - r['name'] as String, - ) - .whereType() - .toList() ?? - []; - final merged = { - ...fromProfiles, - ...clientNames, - }.toList(); - return merged; - } catch (_) { - return fromProfiles; - } - }, - itemBuilder: (context, suggestion) => - ListTile(title: Text(suggestion)), - onSuggestionSelected: (suggestion) async { - _requestedDebounce?.cancel(); - _requestedController.text = - suggestion; - setState(() { - _requestedSaving = true; - _requestedSaved = false; - }); - try { - await ref - .read(tasksControllerProvider) - .updateTask( - taskId: task.id, - requestedBy: - suggestion.isEmpty - ? null - : suggestion, - ); - if (suggestion.isNotEmpty) { + ), + suggestionsCallback: (pattern) async { + final profiles = + ref + .watch(profilesProvider) + .valueOrNull ?? + []; + final fromProfiles = profiles + .map( + (p) => p.fullName.isEmpty + ? p.id + : p.fullName, + ) + .where( + (n) => n + .toLowerCase() + .contains( + pattern + .toLowerCase(), + ), + ) + .toList(); try { - await ref + final clientRows = await ref .read( supabaseClientProvider, ) .from('clients') - .upsert({ - 'name': suggestion, - }); - } catch (_) {} - } - setState( - () => _requestedSaved = - suggestion.isNotEmpty, - ); - } catch (_) { - } finally { - setState( - () => _requestedSaving = false, - ); - if (_requestedSaved) { - Future.delayed( - const Duration(seconds: 2), - () { - if (mounted) { - setState( - () => _requestedSaved = - false, + .select('name') + .ilike( + 'name', + '%$pattern%', ); - } - }, - ); - } - } - }, - ), - - const SizedBox(height: 12), - Text( - 'Noted by (Supervisor/Senior)', - style: Theme.of( - context, - ).textTheme.bodySmall, - ), - const SizedBox(height: 6), - TypeAheadFormField( - textFieldConfiguration: TextFieldConfiguration( - controller: _notedController, - decoration: InputDecoration( - hintText: 'Supervisor/Senior', - suffixIcon: _notedSaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), + final clientNames = + (clientRows + as List?) + ?.map( + (r) => + r['name'] + as String, + ) + .whereType() + .toList() ?? + []; + final merged = { + ...fromProfiles, + ...clientNames, + }.toList(); + return merged; + } catch (_) { + return fromProfiles; + } + }, + itemBuilder: + (context, suggestion) => + ListTile( + title: Text(suggestion), ), - ) - : _notedSaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: - Colors.white, - ), - ), - ], - ), - ) - : null, - ), - onChanged: (v) { - _notedDebounce?.cancel(); - _notedDebounce = Timer( - const Duration( - milliseconds: 700, - ), - () async { - final name = v.trim(); - setState(() { - _notedSaving = true; - _notedSaved = false; - }); - try { - await ref - .read( - tasksControllerProvider, - ) - .updateTask( - taskId: task.id, - notedBy: name.isEmpty - ? null - : name, - ); - if (name.isNotEmpty) { - try { - await ref - .read( - supabaseClientProvider, - ) - .from('clients') - .upsert({ - 'name': name, - }); - } catch (_) {} - } - setState(() { - _notedSaved = - name.isNotEmpty; - }); - } catch (_) { - // ignore - } finally { - setState(() { - _notedSaving = false; - }); - if (_notedSaved) { - Future.delayed( - const Duration( - seconds: 2, - ), - () { - if (mounted) { - setState( - () => - _notedSaved = - false, - ); - } - }, - ); - } - } - }, - ); - }, - ), - suggestionsCallback: (pattern) async { - final profiles = - ref - .watch(profilesProvider) - .valueOrNull ?? - []; - final fromProfiles = profiles - .map( - (p) => p.fullName.isEmpty - ? p.id - : p.fullName, - ) - .where( - (n) => - n.toLowerCase().contains( - pattern.toLowerCase(), - ), - ) - .toList(); - try { - final clientRows = await ref - .read(supabaseClientProvider) - .from('clients') - .select('name') - .ilike('name', '%$pattern%'); - final clientNames = - (clientRows as List?) - ?.map( - (r) => - r['name'] as String, - ) - .whereType() - .toList() ?? - []; - final merged = { - ...fromProfiles, - ...clientNames, - }.toList(); - return merged; - } catch (_) { - return fromProfiles; - } - }, - itemBuilder: (context, suggestion) => - ListTile(title: Text(suggestion)), - onSuggestionSelected: - (suggestion) async { - _notedDebounce?.cancel(); + onSuggestionSelected: (suggestion) async { + _notedDebounce.cancel(); _notedController.text = suggestion; setState(() { @@ -1580,176 +1641,187 @@ class _TaskDetailScreenState extends ConsumerState } } }, - ), - - const SizedBox(height: 12), - Text( - 'Received by', - style: Theme.of( - context, - ).textTheme.bodySmall, - ), - const SizedBox(height: 6), - TypeAheadFormField( - textFieldConfiguration: TextFieldConfiguration( - controller: _receivedController, - decoration: InputDecoration( - hintText: 'Receiver name or id', - suffixIcon: _receivedSaving - ? SizedBox( - width: 16, - height: 16, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 14, - ), - ), - ) - : _receivedSaved - ? SizedBox( - width: 16, - height: 16, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 14, - color: Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: - Colors.white, - ), - ), - ], - ), - ) - : null, ), - onChanged: (v) { - _receivedDebounce?.cancel(); - _receivedDebounce = Timer( - const Duration( - milliseconds: 700, - ), - () async { - final name = v.trim(); - setState(() { - _receivedSaving = true; - _receivedSaved = false; - }); - try { - await ref - .read( - tasksControllerProvider, + + const SizedBox(height: 12), + Text( + 'Received by', + style: Theme.of( + context, + ).textTheme.bodySmall, + ), + const SizedBox(height: 6), + TypeAheadFormField( + textFieldConfiguration: TextFieldConfiguration( + controller: _receivedController, + decoration: InputDecoration( + hintText: + 'Receiver name or id', + suffixIcon: _receivedSaving + ? SizedBox( + width: 16, + height: 16, + child: + ScaleTransition( + scale: + _savePulse, + child: + const Icon( + Icons + .save, + size: 14, + ), + ), ) - .updateTask( - taskId: task.id, - receivedBy: - name.isEmpty - ? null - : name, + : _receivedSaved + ? SizedBox( + width: 16, + height: 16, + child: Stack( + alignment: Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 14, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : null, + ), + onChanged: (v) { + _receivedDebounce.run(() async { + final name = v.trim(); + setState(() { + _receivedSaving = true; + _receivedSaved = false; + }); + try { + await ref + .read( + tasksControllerProvider, + ) + .updateTask( + taskId: task.id, + receivedBy: + name.isEmpty + ? null + : name, + ); + if (name.isNotEmpty) { + try { + await ref + .read( + supabaseClientProvider, + ) + .from('clients') + .upsert({ + 'name': name, + }); + } catch (_) {} + } + setState(() { + _receivedSaved = + name.isNotEmpty; + }); + } catch (_) { + // ignore + } finally { + setState(() { + _receivedSaving = false; + }); + if (_receivedSaved) { + Future.delayed( + const Duration( + seconds: 2, + ), + () { + if (mounted) { + setState( + () => + _receivedSaved = + false, + ); + } + }, ); - if (name.isNotEmpty) { - try { - await ref - .read( - supabaseClientProvider, - ) - .from('clients') - .upsert({ - 'name': name, - }); - } catch (_) {} + } } - setState(() { - _receivedSaved = - name.isNotEmpty; - }); - } catch (_) { - // ignore - } finally { - setState(() { - _receivedSaving = false; - }); - if (_receivedSaved) { - Future.delayed( - const Duration( - seconds: 2, - ), - () { - if (mounted) { - setState( - () => - _receivedSaved = - false, - ); - } - }, - ); - } - } + }); }, - ); - }, - ), - suggestionsCallback: (pattern) async { - final profiles = - ref - .watch(profilesProvider) - .valueOrNull ?? - []; - final fromProfiles = profiles - .map( - (p) => p.fullName.isEmpty - ? p.id - : p.fullName, - ) - .where( - (n) => - n.toLowerCase().contains( - pattern.toLowerCase(), - ), - ) - .toList(); - try { - final clientRows = await ref - .read(supabaseClientProvider) - .from('clients') - .select('name') - .ilike('name', '%$pattern%'); - final clientNames = - (clientRows as List?) - ?.map( - (r) => - r['name'] as String, + ), + suggestionsCallback: (pattern) async { + final profiles = + ref + .watch(profilesProvider) + .valueOrNull ?? + []; + final fromProfiles = profiles + .map( + (p) => p.fullName.isEmpty + ? p.id + : p.fullName, + ) + .where( + (n) => n + .toLowerCase() + .contains( + pattern + .toLowerCase(), + ), + ) + .toList(); + try { + final clientRows = await ref + .read( + supabaseClientProvider, ) - .whereType() - .toList() ?? - []; - final merged = { - ...fromProfiles, - ...clientNames, - }.toList(); - return merged; - } catch (_) { - return fromProfiles; - } - }, - itemBuilder: (context, suggestion) => - ListTile(title: Text(suggestion)), - onSuggestionSelected: - (suggestion) async { - _receivedDebounce?.cancel(); + .from('clients') + .select('name') + .ilike( + 'name', + '%$pattern%', + ); + final clientNames = + (clientRows + as List?) + ?.map( + (r) => + r['name'] + as String, + ) + .whereType() + .toList() ?? + []; + final merged = { + ...fromProfiles, + ...clientNames, + }.toList(); + return merged; + } catch (_) { + return fromProfiles; + } + }, + itemBuilder: + (context, suggestion) => + ListTile( + title: Text(suggestion), + ), + onSuggestionSelected: (suggestion) async { + _receivedDebounce.cancel(); _receivedController.text = suggestion; setState(() { @@ -1808,875 +1880,880 @@ class _TaskDetailScreenState extends ConsumerState } } }, + ), + ], ), - ], - ), - ), - ), - - // Action taken (rich text) - Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - children: [ - const Text('Action taken'), - const Spacer(), - IconButton( - tooltip: - 'Improve action taken with Gemini', - icon: Image.asset( - 'assets/gemini_icon.png', - width: 24, - height: 24, - errorBuilder: - (context, error, stackTrace) { - return const Icon( - Icons.auto_awesome, - ); - }, - ), - onPressed: () => - _processActionTakenWithGemini( - context, - ref, - ), - ), - ], ), - const SizedBox(height: 6), - // Toolbar + editor with inline save indicator - GeminiAnimatedBorder( - isProcessing: _actionProcessing, - child: Container( - height: isWide ? 260 : 220, - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - border: Border.all( - color: Theme.of( - context, - ).colorScheme.outline, - ), - borderRadius: BorderRadius.circular( - 8, - ), - ), - child: Stack( + ), + + // Action taken (rich text) + Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( children: [ - Column( + const Text('Action taken'), + const Spacer(), + IconButton( + tooltip: + 'Improve action taken with Gemini', + icon: Image.asset( + 'assets/gemini_icon.png', + width: 24, + height: 24, + errorBuilder: + ( + context, + error, + stackTrace, + ) { + return const Icon( + Icons.auto_awesome, + ); + }, + ), + onPressed: () => + _processActionTakenWithGemini( + context, + ref, + ), + ), + ], + ), + const SizedBox(height: 6), + // Toolbar + editor with inline save indicator + GeminiAnimatedBorder( + isProcessing: _actionProcessing, + child: Container( + height: isWide ? 260 : 220, + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + border: Border.all( + color: Theme.of( + context, + ).colorScheme.outline, + ), + borderRadius: + BorderRadius.circular(8), + ), + child: Stack( children: [ - isWide - ? Row( - children: [ - IconButton( - tooltip: 'Bold', - icon: const Icon( - Icons - .format_bold, - ), - onPressed: () => - _actionController - ?.formatSelection( + Column( + children: [ + isWide + ? Row( + children: [ + IconButton( + tooltip: + 'Bold', + icon: const Icon( + Icons + .format_bold, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .bold, ), - ), - IconButton( - tooltip: 'Italic', - icon: const Icon( - Icons - .format_italic, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + IconButton( + tooltip: + 'Italic', + icon: const Icon( + Icons + .format_italic, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .italic, ), - ), - IconButton( - tooltip: - 'Underline', - icon: const Icon( - Icons - .format_underlined, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + IconButton( + tooltip: + 'Underline', + icon: const Icon( + Icons + .format_underlined, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .underline, ), - ), - IconButton( - tooltip: - 'Bullet list', - icon: const Icon( - Icons - .format_list_bulleted, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + IconButton( + tooltip: + 'Bullet list', + icon: const Icon( + Icons + .format_list_bulleted, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .ul, ), - ), - IconButton( - tooltip: - 'Numbered list', - icon: const Icon( - Icons - .format_list_numbered, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + IconButton( + tooltip: + 'Numbered list', + icon: const Icon( + Icons + .format_list_numbered, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .ol, ), - ), - const SizedBox( - width: 8, - ), - IconButton( - tooltip: - 'Heading 2', - icon: const Icon( - Icons - .format_size, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + const SizedBox( + width: 8, + ), + IconButton( + tooltip: + 'Heading 2', + icon: const Icon( + Icons + .format_size, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .h2, ), - ), - IconButton( - tooltip: - 'Heading 3', - icon: const Icon( - Icons - .format_size, - size: 18, - ), - onPressed: () => - _actionController - ?.formatSelection( + ), + IconButton( + tooltip: + 'Heading 3', + icon: const Icon( + Icons + .format_size, + size: 18, + ), + onPressed: () => + _actionController?.formatSelection( quill .Attribute .h3, ), - ), - IconButton( - tooltip: 'Undo', - icon: const Icon( - Icons.undo, - ), - onPressed: () => - _actionController - ?.undo(), - ), - IconButton( - tooltip: 'Redo', - icon: const Icon( - Icons.redo, - ), - onPressed: () => - _actionController - ?.redo(), - ), - IconButton( - tooltip: - 'Insert link', - icon: const Icon( - Icons.link, - ), - onPressed: () async { - final urlCtrl = - TextEditingController(); - final res = await m3ShowDialog( - context: - context, - builder: (ctx) => AlertDialog( - title: const Text( - 'Insert link', - ), - content: TextField( - controller: - urlCtrl, - decoration: const InputDecoration( - hintText: - 'https://', - ), - ), - actions: [ - TextButton( - onPressed: () => Navigator.of( - ctx, - ).pop(), - child: const Text( - 'Cancel', - ), - ), - TextButton( - onPressed: () => - Navigator.of( - ctx, - ).pop( - urlCtrl.text.trim(), - ), - child: const Text( - 'Insert', - ), - ), - ], + ), + IconButton( + tooltip: + 'Undo', + icon: const Icon( + Icons.undo, ), - ); - if (res == - null || - res.isEmpty) { - return; - } - final sel = - _actionController - ?.selection ?? - const TextSelection.collapsed( - offset: 0, + onPressed: () => + _actionController + ?.undo(), + ), + IconButton( + tooltip: + 'Redo', + icon: const Icon( + Icons.redo, + ), + onPressed: () => + _actionController + ?.redo(), + ), + IconButton( + tooltip: + 'Insert link', + icon: const Icon( + Icons.link, + ), + onPressed: () async { + final urlCtrl = + TextEditingController(); + final res = await m3ShowDialog( + context: + context, + builder: (ctx) => AlertDialog( + title: const Text( + 'Insert link', + ), + content: TextField( + controller: + urlCtrl, + decoration: const InputDecoration( + hintText: + 'https://', + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of( + ctx, + ).pop(), + child: const Text( + 'Cancel', + ), + ), + TextButton( + onPressed: () => + Navigator.of( + ctx, + ).pop( + urlCtrl.text.trim(), + ), + child: const Text( + 'Insert', + ), + ), + ], + ), ); - final start = sel - .baseOffset; - final end = sel - .extentOffset; - if (!sel.isCollapsed && - end > - start) { - final len = - end - - start; - try { - _actionController - ?.document - .delete( - start, - len, + if (res == + null || + res.isEmpty) { + return; + } + final sel = + _actionController + ?.selection ?? + const TextSelection.collapsed( + offset: + 0, ); - } catch (_) {} - _actionController - ?.document - .insert( - start, - res, - ); - } else { - _actionController - ?.document - .insert( - start, - res, - ); - } - }, - ), - IconButton( - tooltip: - 'Insert image', - icon: const Icon( - Icons.image, - ), - onPressed: () async { - try { - final r = await FilePicker - .platform - .pickFiles( + final start = + sel.baseOffset; + final end = + sel.extentOffset; + if (!sel.isCollapsed && + end > + start) { + final len = + end - + start; + try { + _actionController + ?.document + .delete( + start, + len, + ); + } catch ( + _ + ) {} + _actionController + ?.document + .insert( + start, + res, + ); + } else { + _actionController + ?.document + .insert( + start, + res, + ); + } + }, + ), + IconButton( + tooltip: + 'Insert image', + icon: const Icon( + Icons.image, + ), + onPressed: () async { + try { + final r = await FilePicker.platform.pickFiles( withData: true, type: FileType .image, ); - if (r == - null || - r + if (r == + null || + r.files.isEmpty) { + return; + } + final file = r .files - .isEmpty) { - return; - } - final file = r - .files - .first; - final bytes = - file.bytes; - if (bytes == - null) { - return; - } - final ext = - file.extension ?? - 'png'; - String? url; - try { - url = await ref - .read( - tasksControllerProvider, - ) - .uploadActionImage( - taskId: - task.id, - bytes: - bytes, - extension: - ext, + .first; + final bytes = + file.bytes; + if (bytes == + null) { + return; + } + final ext = + file.extension ?? + 'png'; + String? + url; + try { + url = await ref + .read( + tasksControllerProvider, + ) + .uploadActionImage( + taskId: task.id, + bytes: bytes, + extension: ext, + ); + } catch ( + e + ) { + showErrorSnackBar( + context, + 'Upload error: $e', ); - } catch (e) { - showErrorSnackBar( - context, - 'Upload error: $e', - ); - return; - } - if (url == - null) { - showErrorSnackBar( - context, - 'Image upload failed (no URL returned)', - ); - return; - } - final trimmedUrl = - url.trim(); - final idx = - _actionController - ?.selection - .baseOffset ?? - 0; - // ignore: avoid_print - print( - 'inserting image embed idx=$idx url=$trimmedUrl', - ); - _actionController - ?.document - .insert( - idx, - quill - .BlockEmbed.image( - trimmedUrl, - ), + return; + } + if (url == + null) { + showErrorSnackBar( + context, + 'Image upload failed (no URL returned)', + ); + return; + } + final trimmedUrl = + url.trim(); + final idx = + _actionController + ?.selection + .baseOffset ?? + 0; + // ignore: avoid_print + print( + 'inserting image embed idx=$idx url=$trimmedUrl', ); - } catch (_) {} - }, - ), - ], - ) - : SingleChildScrollView( - scrollDirection: - Axis.horizontal, - child: Row( - children: [ - IconButton( - tooltip: 'Bold', - icon: const Icon( - Icons - .format_bold, - ), - onPressed: () => - _actionController?.formatSelection( - quill - .Attribute - .bold, - ), - ), - IconButton( - tooltip: - 'Italic', - icon: const Icon( - Icons - .format_italic, - ), - onPressed: () => - _actionController?.formatSelection( - quill - .Attribute - .italic, - ), - ), - IconButton( - tooltip: - 'Underline', - icon: const Icon( - Icons - .format_underlined, - ), - onPressed: () => - _actionController?.formatSelection( - quill - .Attribute - .underline, - ), - ), - IconButton( - tooltip: - 'Bullet list', - icon: const Icon( - Icons - .format_list_bulleted, - ), - onPressed: () => - _actionController - ?.formatSelection( - quill - .Attribute - .ul, - ), - ), - IconButton( - tooltip: - 'Numbered list', - icon: const Icon( - Icons - .format_list_numbered, - ), - onPressed: () => - _actionController - ?.formatSelection( - quill - .Attribute - .ol, - ), - ), - const SizedBox( - width: 8, - ), - IconButton( - tooltip: - 'Heading 2', - icon: const Icon( - Icons - .format_size, - ), - onPressed: () => - _actionController - ?.formatSelection( - quill - .Attribute - .h2, - ), - ), - IconButton( - tooltip: - 'Heading 3', - icon: const Icon( - Icons - .format_size, - size: 18, - ), - onPressed: () => - _actionController - ?.formatSelection( - quill - .Attribute - .h3, - ), - ), - IconButton( - tooltip: 'Undo', - icon: - const Icon( - Icons - .undo, - ), - onPressed: () => - _actionController - ?.undo(), - ), - IconButton( - tooltip: 'Redo', - icon: - const Icon( - Icons - .redo, - ), - onPressed: () => - _actionController - ?.redo(), - ), - IconButton( - tooltip: - 'Insert link', - icon: - const Icon( - Icons - .link, - ), - onPressed: () async { - final urlCtrl = - TextEditingController(); - final res = await m3ShowDialog( - context: - context, - builder: (ctx) => AlertDialog( - title: const Text( - 'Insert link', - ), - content: TextField( - controller: - urlCtrl, - decoration: const InputDecoration( - hintText: - 'https://', - ), - ), - actions: [ - TextButton( - onPressed: () => Navigator.of( - ctx, - ).pop(), - child: const Text( - 'Cancel', - ), - ), - TextButton( - onPressed: () => Navigator.of(ctx).pop( - urlCtrl.text.trim(), - ), - child: const Text( - 'Insert', - ), - ), - ], - ), - ); - if (res == - null || - res.isEmpty) { - return; - } - final sel = - _actionController - ?.selection ?? - const TextSelection.collapsed( - offset: - 0, - ); - final start = - sel.baseOffset; - final end = sel - .extentOffset; - if (!sel.isCollapsed && - end > - start) { - final len = - end - - start; - try { _actionController ?.document - .delete( - start, - len, + .insert( + idx, + quill.BlockEmbed.image( + trimmedUrl, + ), ); } catch ( _ ) {} - _actionController - ?.document - .insert( - start, - res, - ); - } else { - _actionController - ?.document - .insert( - start, - res, - ); - } - }, - ), - IconButton( - tooltip: - 'Insert image', - icon: const Icon( - Icons.image, + }, ), - onPressed: () async { - try { - final r = await FilePicker - .platform - .pickFiles( + ], + ) + : SingleChildScrollView( + scrollDirection: + Axis.horizontal, + child: Row( + children: [ + IconButton( + tooltip: + 'Bold', + icon: const Icon( + Icons + .format_bold, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .bold, + ), + ), + IconButton( + tooltip: + 'Italic', + icon: const Icon( + Icons + .format_italic, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .italic, + ), + ), + IconButton( + tooltip: + 'Underline', + icon: const Icon( + Icons + .format_underlined, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .underline, + ), + ), + IconButton( + tooltip: + 'Bullet list', + icon: const Icon( + Icons + .format_list_bulleted, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .ul, + ), + ), + IconButton( + tooltip: + 'Numbered list', + icon: const Icon( + Icons + .format_list_numbered, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .ol, + ), + ), + const SizedBox( + width: 8, + ), + IconButton( + tooltip: + 'Heading 2', + icon: const Icon( + Icons + .format_size, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .h2, + ), + ), + IconButton( + tooltip: + 'Heading 3', + icon: const Icon( + Icons + .format_size, + size: 18, + ), + onPressed: () => + _actionController?.formatSelection( + quill + .Attribute + .h3, + ), + ), + IconButton( + tooltip: + 'Undo', + icon: const Icon( + Icons + .undo, + ), + onPressed: () => + _actionController + ?.undo(), + ), + IconButton( + tooltip: + 'Redo', + icon: const Icon( + Icons + .redo, + ), + onPressed: () => + _actionController + ?.redo(), + ), + IconButton( + tooltip: + 'Insert link', + icon: const Icon( + Icons + .link, + ), + onPressed: () async { + final urlCtrl = + TextEditingController(); + final res = await m3ShowDialog( + context: + context, + builder: (ctx) => AlertDialog( + title: const Text( + 'Insert link', + ), + content: TextField( + controller: + urlCtrl, + decoration: const InputDecoration( + hintText: 'https://', + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.of( + ctx, + ).pop(), + child: const Text( + 'Cancel', + ), + ), + TextButton( + onPressed: () => + Navigator.of( + ctx, + ).pop( + urlCtrl.text.trim(), + ), + child: const Text( + 'Insert', + ), + ), + ], + ), + ); + if (res == + null || + res.isEmpty) { + return; + } + final sel = + _actionController + ?.selection ?? + const TextSelection.collapsed( + offset: + 0, + ); + final start = + sel.baseOffset; + final end = + sel.extentOffset; + if (!sel.isCollapsed && + end > + start) { + final len = + end - + start; + try { + _actionController?.document.delete( + start, + len, + ); + } catch ( + _ + ) {} + _actionController + ?.document + .insert( + start, + res, + ); + } else { + _actionController + ?.document + .insert( + start, + res, + ); + } + }, + ), + IconButton( + tooltip: + 'Insert image', + icon: const Icon( + Icons + .image, + ), + onPressed: () async { + try { + final r = await FilePicker.platform.pickFiles( withData: true, type: FileType.image, ); - if (r == - null || - r + if (r == + null || + r.files.isEmpty) { + return; + } + final file = r .files - .isEmpty) { - return; - } - final file = r - .files - .first; - final bytes = - file.bytes; - if (bytes == - null) { - return; - } - final ext = - file.extension ?? - 'png'; - String? url; - try { - url = await ref - .read( - tasksControllerProvider, - ) - .uploadActionImage( - taskId: - task.id, - bytes: - bytes, - extension: - ext, + .first; + final bytes = + file.bytes; + if (bytes == + null) { + return; + } + final ext = + file.extension ?? + 'png'; + String? + url; + try { + url = await ref + .read( + tasksControllerProvider, + ) + .uploadActionImage( + taskId: task.id, + bytes: bytes, + extension: ext, + ); + } catch ( + e + ) { + showErrorSnackBar( + context, + 'Upload error: $e', ); - } catch ( - e - ) { - showErrorSnackBar( - context, - 'Upload error: $e', - ); - return; - } - if (url == - null) { - showErrorSnackBar( - context, - 'Image upload failed (no URL returned)', - ); - return; - } - final trimmedUrl = - url.trim(); - final idx = - _actionController - ?.selection - .baseOffset ?? - 0; - // ignore: avoid_print - print( - 'inserting image embed idx=$idx url=$trimmedUrl', - ); - _actionController - ?.document - .insert( + return; + } + if (url == + null) { + showErrorSnackBar( + context, + 'Image upload failed (no URL returned)', + ); + return; + } + final trimmedUrl = + url.trim(); + final idx = + _actionController?.selection.baseOffset ?? + 0; + // ignore: avoid_print + print( + 'inserting image embed idx=$idx url=$trimmedUrl', + ); + _actionController?.document.insert( idx, quill .BlockEmbed.image( trimmedUrl, ), ); - } catch (_) {} - }, + } catch ( + _ + ) {} + }, + ), + ], ), - ], + ), + Expanded( + child: MouseRegion( + cursor: + SystemMouseCursors + .text, + child: quill.QuillEditor.basic( + controller: + _actionController!, + focusNode: + _actionFocusNode, + scrollController: + _actionScrollController, + config: quill.QuillEditorConfig( + embedBuilders: const [ + _ImageEmbedBuilder(), + ], + scrollable: true, + padding: + EdgeInsets + .zero, + ), ), ), - Expanded( - child: MouseRegion( - cursor: SystemMouseCursors - .text, - child: quill.QuillEditor.basic( - controller: - _actionController!, - focusNode: - _actionFocusNode, - scrollController: - _actionScrollController, - config: quill.QuillEditorConfig( - embedBuilders: const [ - _ImageEmbedBuilder(), - ], - scrollable: true, - padding: - EdgeInsets.zero, - ), ), - ), + ], + ), + Positioned( + right: 6, + bottom: 6, + child: _actionSaving + ? SizedBox( + width: 20, + height: 20, + child: ScaleTransition( + scale: _savePulse, + child: const Icon( + Icons.save, + size: 16, + ), + ), + ) + : _actionSaved + ? SizedBox( + width: 20, + height: 20, + child: Stack( + alignment: + Alignment + .center, + children: const [ + Icon( + Icons.save, + size: 16, + color: Colors + .green, + ), + Positioned( + right: -2, + bottom: -2, + child: Icon( + Icons.check, + size: 10, + color: Colors + .white, + ), + ), + ], + ), + ) + : const SizedBox.shrink(), ), ], ), - Positioned( - right: 6, - bottom: 6, - child: _actionSaving - ? SizedBox( - width: 20, - height: 20, - child: ScaleTransition( - scale: _savePulse, - child: const Icon( - Icons.save, - size: 16, - ), - ), - ) - : _actionSaved - ? SizedBox( - width: 20, - height: 20, - child: Stack( - alignment: - Alignment.center, - children: const [ - Icon( - Icons.save, - size: 16, - color: - Colors.green, - ), - Positioned( - right: -2, - bottom: -2, - child: Icon( - Icons.check, - size: 10, - color: Colors - .white, - ), - ), - ], - ), - ) - : const SizedBox.shrink(), - ), - ], - ), - ), - ), - ], - ), - ), - // Attachments (Tab 5) - SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - const Text('File Attachments'), - const SizedBox(height: 12), - Center( - child: FilledButton.icon( - icon: const Icon(Icons.upload_file), - label: const Text( - 'Upload File (Max 25MB)', ), - onPressed: () => - _uploadTaskAttachment(task.id), ), + ], + ), + ), + // Attachments (Tab 5) + SingleChildScrollView( + child: Padding( + padding: const EdgeInsets.only( + top: 8.0, ), - const SizedBox(height: 16), - Builder( - builder: (context) { - // Load attachments once per task - if (_seededTaskId != null && - _seededTaskId == task.id && - _attachments == null && - !_loadingAttachments) { - WidgetsBinding.instance - .addPostFrameCallback((_) { - _loadAttachments(task.id); - }); - } - if (_loadingAttachments) { - return const Center( - child: - CircularProgressIndicator(), - ); - } - final files = _attachments ?? []; - if (files.isEmpty) { - return const Center( - child: Padding( - padding: EdgeInsets.all(16.0), - child: Text( - 'No attachments yet', - style: TextStyle( - color: Colors.grey, - ), - ), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + const Text('File Attachments'), + const SizedBox(height: 12), + Center( + child: FilledButton.icon( + icon: const Icon( + Icons.upload_file, ), - ); - } - return ListView.separated( - shrinkWrap: true, - physics: - const NeverScrollableScrollPhysics(), - itemCount: files.length, - separatorBuilder: - (context, index) => - const Divider(), - itemBuilder: (context, index) { - final file = files[index]; - return ListTile( - leading: const Icon( - Icons.insert_drive_file, - ), - title: Text(file), - subtitle: Text( - 'Tap to download', - style: Theme.of( - context, - ).textTheme.bodySmall, - ), - trailing: IconButton( - icon: const Icon( - Icons.delete, - color: Colors.red, + label: const Text( + 'Upload File (Max 25MB)', + ), + onPressed: () => + _uploadTaskAttachment( + task.id, ), - onPressed: () => - _deleteTaskAttachment( + ), + ), + const SizedBox(height: 16), + Builder( + builder: (context) { + // Load attachments once per task + if (_seededTaskId != null && + _seededTaskId == task.id && + _attachments == null && + !_loadingAttachments) { + WidgetsBinding.instance + .addPostFrameCallback(( + _, + ) { + _loadAttachments( task.id, - file, - ), - ), - onTap: () => - _downloadTaskAttachment( - task.id, - file, + ); + }); + } + if (_loadingAttachments) { + return const Center( + child: + CircularProgressIndicator(), + ); + } + final files = + _attachments ?? []; + if (files.isEmpty) { + return const Center( + child: Padding( + padding: EdgeInsets.all( + 16.0, ), + child: Text( + 'No attachments yet', + style: TextStyle( + color: Colors.grey, + ), + ), + ), + ); + } + return ListView.separated( + shrinkWrap: true, + physics: + const NeverScrollableScrollPhysics(), + itemCount: files.length, + separatorBuilder: + (context, index) => + const Divider(), + itemBuilder: (context, index) { + final file = files[index]; + return ListTile( + leading: const Icon( + Icons.insert_drive_file, + ), + title: Text(file), + subtitle: Text( + 'Tap to download', + style: Theme.of( + context, + ).textTheme.bodySmall, + ), + trailing: IconButton( + icon: const Icon( + Icons.delete, + color: Colors.red, + ), + onPressed: () => + _deleteTaskAttachment( + task.id, + file, + ), + ), + onTap: () => + _downloadTaskAttachment( + task.id, + file, + ), + ); + }, ); }, - ); - }, + ), + ], ), - ], + ), ), - ), + ], ), - ], - ), + ), + ], ), - ], - ), + ), + ], ), - ], - ), ), ), ], @@ -2847,8 +2924,9 @@ class _TaskDetailScreenState extends ConsumerState color: Theme.of(context) .colorScheme .surfaceContainerHighest, - borderRadius: - BorderRadius.circular(28), + borderRadius: BorderRadius.circular( + 28, + ), ), padding: const EdgeInsets.only( left: 16, @@ -2867,8 +2945,7 @@ class _TaskDetailScreenState extends ConsumerState border: InputBorder.none, isDense: true, contentPadding: - const EdgeInsets - .symmetric( + const EdgeInsets.symmetric( vertical: 10, ), ), @@ -2903,18 +2980,17 @@ class _TaskDetailScreenState extends ConsumerState IconButton( tooltip: 'Send', onPressed: canSendMessages - ? () => - _handleSendMessage( - task, - profilesAsync - .valueOrNull ?? - [], - ref.read( - currentUserIdProvider, - ), - canSendMessages, - typingChannelId, - ) + ? () => _handleSendMessage( + task, + profilesAsync + .valueOrNull ?? + [], + ref.read( + currentUserIdProvider, + ), + canSendMessages, + typingChannelId, + ) : null, icon: const Icon( Icons.send_rounded, @@ -3979,7 +4055,7 @@ class _TaskDetailScreenState extends ConsumerState var showTitleGemini = false; var titleDeepSeek = false; var descDeepSeek = false; - Timer? titleTypingTimer; + final titleTypingDebounce = Debouncer(const Duration(milliseconds: 700)); try { await m3ShowDialog( @@ -3996,196 +4072,194 @@ class _TaskDetailScreenState extends ConsumerState content: SizedBox( width: 600, child: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GeminiAnimatedBorder( - isProcessing: titleProcessing, - useDeepSeekColors: titleDeepSeek, - child: KeyboardListener( - focusNode: FocusNode(), - onKeyEvent: (event) { - // Only react to actual key-down (typing). - if (event is! KeyDownEvent && - event is! KeyRepeatEvent) { - return; - } - // Skip modifier-only keys. - if (event.character == null || - event.character!.isEmpty) { - return; - } - titleTypingTimer?.cancel(); - if (showTitleGemini) { - setDialogState( - () => showTitleGemini = false, - ); - } - titleTypingTimer = Timer( - const Duration(milliseconds: 700), - () { + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + Expanded( + child: GeminiAnimatedBorder( + isProcessing: titleProcessing, + useDeepSeekColors: titleDeepSeek, + child: KeyboardListener( + focusNode: FocusNode(), + onKeyEvent: (event) { + // Only react to actual key-down (typing). + if (event is! KeyDownEvent && + event is! KeyRepeatEvent) { + return; + } + // Skip modifier-only keys. + if (event.character == null || + event.character!.isEmpty) { + return; + } + if (showTitleGemini) { + setDialogState( + () => showTitleGemini = false, + ); + } + titleTypingDebounce.run(() { if (titleCtrl.text.trim().isNotEmpty) { setDialogState( () => showTitleGemini = true, ); } - }, - ); - }, - child: TypeAheadFormField( - textFieldConfiguration: - TextFieldConfiguration( - controller: titleCtrl, - enabled: !saving, - decoration: const InputDecoration( - labelText: 'Title', + }); + }, + child: TypeAheadFormField( + textFieldConfiguration: + TextFieldConfiguration( + controller: titleCtrl, + enabled: !saving, + decoration: const InputDecoration( + labelText: 'Title', + ), ), - ), - suggestionsCallback: (pattern) async { - return SubjectSuggestionEngine.suggest( - existingSubjects: existingSubjects, - query: pattern, - limit: 8, - ); - }, - itemBuilder: (context, suggestion) => - ListTile( - dense: true, - title: Text(suggestion), - ), - onSuggestionSelected: (suggestion) { - titleTypingTimer?.cancel(); - titleCtrl - ..text = suggestion - ..selection = TextSelection.collapsed( - offset: suggestion.length, + suggestionsCallback: (pattern) async { + return SubjectSuggestionEngine.suggest( + existingSubjects: existingSubjects, + query: pattern, + limit: 8, ); - setDialogState( - () => showTitleGemini = false, - ); - }, + }, + itemBuilder: (context, suggestion) => + ListTile( + dense: true, + title: Text(suggestion), + ), + onSuggestionSelected: (suggestion) { + titleTypingDebounce.cancel(); + titleCtrl + ..text = suggestion + ..selection = TextSelection.collapsed( + offset: suggestion.length, + ); + setDialogState( + () => showTitleGemini = false, + ); + }, + ), ), ), ), - ), - // Show Gemini button only after the user pauses - // typing and has not selected a suggestion. - if (showTitleGemini) - GeminiButton( - textController: titleCtrl, - onTextUpdated: (updatedText) { - titleTypingTimer?.cancel(); - setDialogState(() { - titleCtrl.text = updatedText; - showTitleGemini = false; - }); - }, - onProcessingStateChanged: (isProcessing) { - setDialogState(() { - titleProcessing = isProcessing; - }); - }, - onProviderChanged: (isDeepSeek) { - setDialogState( - () => titleDeepSeek = isDeepSeek, + // Show Gemini button only after the user pauses + // typing and has not selected a suggestion. + if (showTitleGemini) + GeminiButton( + textController: titleCtrl, + onTextUpdated: (updatedText) { + titleTypingDebounce.cancel(); + setDialogState(() { + titleCtrl.text = updatedText; + showTitleGemini = false; + }); + }, + onProcessingStateChanged: (isProcessing) { + setDialogState(() { + titleProcessing = isProcessing; + }); + }, + onProviderChanged: (isDeepSeek) { + setDialogState( + () => titleDeepSeek = isDeepSeek, + ); + }, + tooltip: 'Improve task title with Gemini', + promptBuilder: (_) => + 'Fix the spelling and grammar of this IT ' + 'helpdesk ticket subject. Make it concise, ' + 'clear, and professional in English. ' + 'Return ONLY the corrected subject, ' + 'no explanations:', + ), + ], + ), + const SizedBox(height: 8), + Row( + children: [ + Expanded( + child: GeminiAnimatedTextField( + controller: descCtrl, + enabled: !saving, + labelText: 'Description', + maxLines: 4, + isProcessing: descProcessing, + useDeepSeekColors: descDeepSeek, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: GeminiButton( + textController: descCtrl, + onTextUpdated: (updatedText) { + setDialogState(() { + descCtrl.text = updatedText; + }); + }, + onProcessingStateChanged: (isProcessing) { + setDialogState(() { + descProcessing = isProcessing; + }); + }, + onProviderChanged: (isDeepSeek) { + setDialogState( + () => descDeepSeek = isDeepSeek, + ); + }, + tooltip: 'Improve description with Gemini', + promptBuilder: (_) { + final subject = titleCtrl.text.trim(); + final hint = subject.isNotEmpty + ? 'about "$subject" ' + : ''; + return 'Improve this IT helpdesk ticket ' + 'description ${hint}for clarity and ' + 'professionalism. Fix grammar and translate ' + 'to English. Return ONLY the improved ' + 'description, no explanations:'; + }, + ), + ), + ], + ), + const SizedBox(height: 8), + Consumer( + builder: (dialogContext, dialogRef, _) { + final officesAsync = dialogRef.watch( + officesOnceProvider, + ); + return officesAsync.when( + data: (offices) { + final officesSorted = List.from(offices) + ..sort( + (a, b) => a.name.toLowerCase().compareTo( + b.name.toLowerCase(), + ), + ); + return OfficeSelectorField( + offices: officesSorted, + selectedOfficeId: selectedOffice, + allowUnassigned: true, + onChanged: saving + ? null + : (v) => setDialogState( + () => selectedOffice = v, + ), ); }, - tooltip: 'Improve task title with Gemini', - promptBuilder: (_) => - 'Fix the spelling and grammar of this IT ' - 'helpdesk ticket subject. Make it concise, ' - 'clear, and professional in English. ' - 'Return ONLY the corrected subject, ' - 'no explanations:', - ), - ], - ), - const SizedBox(height: 8), - Row( - children: [ - Expanded( - child: GeminiAnimatedTextField( - controller: descCtrl, - enabled: !saving, - labelText: 'Description', - maxLines: 4, - isProcessing: descProcessing, - useDeepSeekColors: descDeepSeek, - ), - ), - Padding( - padding: const EdgeInsets.only(left: 8.0), - child: GeminiButton( - textController: descCtrl, - onTextUpdated: (updatedText) { - setDialogState(() { - descCtrl.text = updatedText; - }); - }, - onProcessingStateChanged: (isProcessing) { - setDialogState(() { - descProcessing = isProcessing; - }); - }, - onProviderChanged: (isDeepSeek) { - setDialogState(() => descDeepSeek = isDeepSeek); - }, - tooltip: 'Improve description with Gemini', - promptBuilder: (_) { - final subject = titleCtrl.text.trim(); - final hint = subject.isNotEmpty - ? 'about "$subject" ' - : ''; - return 'Improve this IT helpdesk ticket ' - 'description ${hint}for clarity and ' - 'professionalism. Fix grammar and translate ' - 'to English. Return ONLY the improved ' - 'description, no explanations:'; - }, - ), - ), - ], - ), - const SizedBox(height: 8), - Consumer( - builder: (dialogContext, dialogRef, _) { - final officesAsync = dialogRef.watch( - officesOnceProvider, - ); - return officesAsync.when( - data: (offices) { - final officesSorted = List.from(offices) - ..sort( - (a, b) => a.name.toLowerCase().compareTo( - b.name.toLowerCase(), - ), - ); - return OfficeSelectorField( - offices: officesSorted, - selectedOfficeId: selectedOffice, - allowUnassigned: true, - onChanged: saving - ? null - : (v) => setDialogState( - () => selectedOffice = v, - ), - ); - }, - loading: () => const Padding( - padding: EdgeInsets.symmetric(vertical: 12), - child: LinearProgressIndicator(), - ), - error: (error, _) => const SizedBox.shrink(), - ); - }, - ), - ], + loading: () => const Padding( + padding: EdgeInsets.symmetric(vertical: 12), + child: LinearProgressIndicator(), + ), + error: (error, _) => const SizedBox.shrink(), + ); + }, + ), + ], + ), ), ), - ), actions: [ TextButton( onPressed: saving @@ -4254,7 +4328,7 @@ class _TaskDetailScreenState extends ConsumerState }, ); } finally { - titleTypingTimer?.cancel(); + titleTypingDebounce.cancel(); } } @@ -4309,7 +4383,7 @@ class _TaskDetailScreenState extends ConsumerState {'insert': '$trimmed\n'}, ]); - _actionDebounce?.cancel(); + _actionDebounce.cancel(); await ref .read(tasksControllerProvider) .updateTask(taskId: widget.taskId, actionTaken: deltaJson); @@ -4326,7 +4400,7 @@ class _TaskDetailScreenState extends ConsumerState TextSelection.collapsed(offset: trimmed.length), ); // Cancel any debounce that may have slipped through. - _actionDebounce?.cancel(); + _actionDebounce.cancel(); } if (context.mounted) { @@ -4961,8 +5035,8 @@ class _TaskPendingBannerState extends State<_TaskPendingBanner> child: Text( 'Pending sync — created offline. Edits will queue automatically.', style: Theme.of(context).textTheme.labelMedium?.copyWith( - color: scheme.onErrorContainer, - ), + color: scheme.onErrorContainer, + ), ), ), ], diff --git a/lib/screens/tasks/task_pdf.dart b/lib/screens/tasks/task_pdf.dart index b401d2ab..52bbe910 100644 --- a/lib/screens/tasks/task_pdf.dart +++ b/lib/screens/tasks/task_pdf.dart @@ -10,11 +10,11 @@ import 'package:pdf/pdf.dart' as pdf; import 'package:printing/printing.dart'; import 'package:pdfrx/pdfrx.dart'; -import '../../models/task.dart'; -import '../../models/ticket.dart'; -import '../../models/task_activity_log.dart'; +import '../../models/task.model.dart'; +import '../../models/ticket.model.dart'; +import '../../models/task_activity_log.model.dart'; import '../../models/task_assignment.dart'; -import '../../models/profile.dart'; +import '../../models/profile.model.dart'; import '../../utils/app_time.dart'; Future buildTaskPdfBytes( diff --git a/lib/screens/tasks/tasks_list_screen.dart b/lib/screens/tasks/tasks_list_screen.dart index b25652a7..0cf816e7 100644 --- a/lib/screens/tasks/tasks_list_screen.dart +++ b/lib/screens/tasks/tasks_list_screen.dart @@ -7,14 +7,15 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:tasq/utils/app_time.dart'; import 'package:go_router/go_router.dart'; +import 'package:intl/intl.dart'; -import '../../models/notification_item.dart'; -import '../../models/office.dart'; +import '../../models/notification_item.model.dart'; +import '../../models/office.model.dart'; import '../../widgets/office_picker.dart'; -import '../../models/profile.dart'; -import '../../models/task.dart'; +import '../../models/profile.model.dart'; +import '../../models/task.model.dart'; import '../../models/task_assignment.dart'; -import '../../models/ticket.dart'; +import '../../models/ticket.model.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/profile_provider.dart'; import '../../providers/tasks_provider.dart'; @@ -1411,14 +1412,8 @@ String _assignedAgent(Map profileById, String? userId) { return profile.fullName.isNotEmpty ? profile.fullName : profile.id; } -String _formatTimestamp(DateTime value) { - final year = value.year.toString().padLeft(4, '0'); - final month = value.month.toString().padLeft(2, '0'); - final day = value.day.toString().padLeft(2, '0'); - final hour = value.hour.toString().padLeft(2, '0'); - final minute = value.minute.toString().padLeft(2, '0'); - return '$year-$month-$day $hour:$minute'; -} +String _formatTimestamp(DateTime value) => + DateFormat('yyyy-MM-dd HH:mm').format(value); class _StatusBadge extends StatelessWidget { const _StatusBadge({required this.status}); diff --git a/lib/screens/teams/teams_screen.dart b/lib/screens/teams/teams_screen.dart index 207de466..465132dc 100644 --- a/lib/screens/teams/teams_screen.dart +++ b/lib/screens/teams/teams_screen.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import '../../theme/m3_motion.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; -import '../../models/team.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; +import '../../models/team.model.dart'; import '../../providers/teams_provider.dart'; import '../../providers/profile_provider.dart'; import '../../providers/tickets_provider.dart'; diff --git a/lib/screens/tickets/ticket_detail_screen.dart b/lib/screens/tickets/ticket_detail_screen.dart index 75450226..fd909176 100644 --- a/lib/screens/tickets/ticket_detail_screen.dart +++ b/lib/screens/tickets/ticket_detail_screen.dart @@ -4,9 +4,9 @@ import 'package:tasq/utils/app_time.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import '../../models/office.dart'; -import '../../models/profile.dart'; -import '../../models/ticket.dart'; +import '../../models/office.model.dart'; +import '../../models/profile.model.dart'; +import '../../models/ticket.model.dart'; import '../../models/ticket_message.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/supabase_provider.dart'; diff --git a/lib/screens/tickets/tickets_list_screen.dart b/lib/screens/tickets/tickets_list_screen.dart index 20cb35ec..9816219e 100644 --- a/lib/screens/tickets/tickets_list_screen.dart +++ b/lib/screens/tickets/tickets_list_screen.dart @@ -3,17 +3,19 @@ import '../../theme/m3_motion.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:tasq/utils/app_time.dart'; import 'package:go_router/go_router.dart'; +import 'package:intl/intl.dart'; -import '../../models/office.dart'; +import '../../models/office.model.dart'; import '../../widgets/office_picker.dart'; -import '../../models/notification_item.dart'; -import '../../models/profile.dart'; -import '../../models/ticket.dart'; +import '../../models/notification_item.model.dart'; +import '../../models/profile.model.dart'; +import '../../models/ticket.model.dart'; import '../../providers/notifications_provider.dart'; import '../../providers/profile_provider.dart'; import '../../providers/tickets_provider.dart'; import '../../providers/realtime_controller.dart'; import '../../providers/typing_provider.dart'; +import '../../providers/user_offices_provider.dart'; import '../../widgets/mono_text.dart'; import '../../widgets/reconnect_overlay.dart'; import 'package:skeletonizer/skeletonizer.dart'; @@ -288,7 +290,10 @@ class _TicketsListScreenState extends ConsumerState { TasQColumn( header: 'Ticket ID', technical: true, - cellBuilder: (context, ticket) => Text(ticket.id), + cellBuilder: (context, ticket) => Tooltip( + message: ticket.id, + child: Text(_shortId(ticket.id)), + ), ), TasQColumn( header: 'Subject', @@ -362,7 +367,7 @@ class _TicketsListScreenState extends ConsumerState { const SizedBox(height: 2), Text('Filed by: $assigned'), const SizedBox(height: 4), - MonoText('ID ${ticket.id}'), + MonoText('ID ${_shortId(ticket.id)}'), const SizedBox(height: 2), Text(_formatTimestamp(ticket.createdAt)), ], @@ -450,6 +455,17 @@ class _TicketsListScreenState extends ConsumerState { return Consumer( builder: (context, ref, _) { final officesAsync = ref.watch(officesProvider); + final profile = ref.watch(currentProfileProvider).valueOrNull; + final isGlobal = const { + 'admin', + 'programmer', + 'dispatcher', + 'it_staff', + }.contains(profile?.role); + final myOfficeIds = { + for (final a in ref.watch(userOfficesProvider).valueOrNull ?? []) + if (a.userId == profile?.id) a.officeId, + }; return Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.stretch, @@ -468,8 +484,18 @@ class _TicketsListScreenState extends ConsumerState { ), const SizedBox(height: 12), officesAsync.when( - data: (offices) { - if (offices.isEmpty) return const Text('No offices assigned.'); + data: (allOffices) { + // ticketsProvider only shows non-global users their own + // offices' tickets, so only offer those offices here — + // otherwise the new ticket vanishes from the filer's list. + final offices = isGlobal + ? allOffices + : allOffices + .where((o) => myOfficeIds.contains(o.id)) + .toList(); + if (offices.isEmpty) { + return const Text('No offices assigned.'); + } final officesSorted = List.from(offices) ..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase())); return OfficeSelectorField( @@ -761,6 +787,11 @@ class _StatusSummaryCard extends StatelessWidget { } } +/// First 8 chars of the UUID, like a short git hash; the full id is in the +/// tooltip. Tickets have no human-friendly number. +String _shortId(String id) => + id.length > 8 ? id.substring(0, 8).toUpperCase() : id; + String _assignedAgent(Map profileById, String? userId) { if (userId == null || userId.isEmpty) { return 'Unassigned'; @@ -772,14 +803,8 @@ String _assignedAgent(Map profileById, String? userId) { return profile.fullName.isNotEmpty ? profile.fullName : profile.id; } -String _formatTimestamp(DateTime value) { - final year = value.year.toString().padLeft(4, '0'); - final month = value.month.toString().padLeft(2, '0'); - final day = value.day.toString().padLeft(2, '0'); - final hour = value.hour.toString().padLeft(2, '0'); - final minute = value.minute.toString().padLeft(2, '0'); - return '$year-$month-$day $hour:$minute'; -} +String _formatTimestamp(DateTime value) => + DateFormat('yyyy-MM-dd HH:mm').format(value); class _StatusBadge extends StatelessWidget { const _StatusBadge({required this.status}); diff --git a/lib/screens/whereabouts/whereabouts_screen.dart b/lib/screens/whereabouts/whereabouts_screen.dart index 1dca4b68..254c907f 100644 --- a/lib/screens/whereabouts/whereabouts_screen.dart +++ b/lib/screens/whereabouts/whereabouts_screen.dart @@ -4,9 +4,9 @@ import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart' show LatLng; import '../../models/app_settings.dart'; -import '../../models/attendance_log.dart'; +import '../../models/attendance_log.model.dart'; import '../../models/live_position.dart'; -import '../../models/profile.dart'; +import '../../models/profile.model.dart'; import '../../providers/attendance_provider.dart'; import '../../providers/profile_provider.dart'; import '../../providers/whereabouts_provider.dart'; diff --git a/lib/screens/workforce/rotation_settings_dialog.dart b/lib/screens/workforce/rotation_settings_dialog.dart index 8966fe10..d3ca42c1 100644 --- a/lib/screens/workforce/rotation_settings_dialog.dart +++ b/lib/screens/workforce/rotation_settings_dialog.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../../models/profile.dart'; +import '../../models/profile.model.dart'; import '../../models/rotation_config.dart'; import '../../providers/profile_provider.dart'; import '../../providers/rotation_config_provider.dart'; @@ -287,9 +287,8 @@ class _RotationOrderTabState extends ConsumerState<_RotationOrderTab> { child: ReorderableListView.builder( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), itemCount: order.length, - onReorder: (oldIndex, newIndex) { + onReorderItem: (oldIndex, newIndex) { setState(() { - if (newIndex > oldIndex) newIndex--; final item = order.removeAt(oldIndex); order.insert(newIndex, item); }); @@ -422,9 +421,8 @@ class _FridayAmTabState extends ConsumerState<_FridayAmTab> { child: ReorderableListView.builder( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), itemCount: order.length, - onReorder: (oldIndex, newIndex) { + onReorderItem: (oldIndex, newIndex) { setState(() { - if (newIndex > oldIndex) newIndex--; final item = order.removeAt(oldIndex); order.insert(newIndex, item); }); @@ -1394,7 +1392,9 @@ class _HolidaySettingsTabState extends ConsumerState<_HolidaySettingsTab> { child: const Text('Cancel'), ), FilledButton( - onPressed: () => Navigator.of(dialogContext).pop(true), + onPressed: name.trim().isEmpty + ? null + : () => Navigator.of(dialogContext).pop(true), child: const Text('Add'), ), ], @@ -1404,7 +1404,7 @@ class _HolidaySettingsTabState extends ConsumerState<_HolidaySettingsTab> { }, ); - if (confirmed != true || name.isEmpty) return; + if (confirmed != true || name.trim().isEmpty) return; setState(() { _holidays = [ diff --git a/lib/screens/workforce/workforce_screen.dart b/lib/screens/workforce/workforce_screen.dart index 99324bc1..a5180bbe 100644 --- a/lib/screens/workforce/workforce_screen.dart +++ b/lib/screens/workforce/workforce_screen.dart @@ -4,10 +4,10 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:tasq/utils/app_time.dart'; import 'package:timezone/timezone.dart' as tz; -import '../../models/duty_schedule.dart'; -import '../../models/profile.dart'; +import '../../models/duty_schedule.model.dart'; +import '../../models/profile.model.dart'; import '../../models/rotation_config.dart'; -import '../../models/swap_request.dart'; +import '../../models/swap_request.model.dart'; import '../../providers/profile_provider.dart'; import '../../providers/rotation_config_provider.dart'; @@ -1005,7 +1005,13 @@ class _ScheduleGeneratorPanelState rotationConfig: rotationConfig, ); generated.sort((a, b) => a.startTime.compareTo(b.startTime)); - final warnings = _buildWarnings(start, end, generated, rotationConfig); + final warnings = _buildWarnings( + start, + end, + generated, + schedules, + rotationConfig, + ); if (!mounted) return; setState(() { @@ -1229,6 +1235,7 @@ class _ScheduleGeneratorPanelState _startDate ?? AppTime.now(), _endDate ?? AppTime.now(), _draftSchedules, + ref.read(dutySchedulesProvider).valueOrNull ?? const [], ref.read(rotationConfigProvider).valueOrNull, ); }); @@ -1455,6 +1462,7 @@ class _ScheduleGeneratorPanelState _startDate ?? result.startTime, _endDate ?? result.endTime, _draftSchedules, + ref.read(dutySchedulesProvider).valueOrNull ?? const [], ref.read(rotationConfigProvider).valueOrNull, ); }); @@ -2171,6 +2179,7 @@ class _ScheduleGeneratorPanelState DateTime start, DateTime end, List<_DraftSchedule> drafts, + List existing, RotationConfig? rotationConfig, ) { final warnings = []; @@ -2187,15 +2196,27 @@ class _ScheduleGeneratorPanelState required.addAll({'am', 'pm'}); } - final available = drafts - .where( - (draft) => - draft.startTime.year == day.year && - draft.startTime.month == day.month && - draft.startTime.day == day.day, - ) - .map((draft) => _normalizeShiftType(draft.shiftType)) - .toSet(); + final available = { + ...drafts + .where( + (draft) => + draft.startTime.year == day.year && + draft.startTime.month == day.month && + draft.startTime.day == day.day, + ) + .map((draft) => _coverageShiftType(draft.shiftType)), + // Shifts already committed for this day count as covered, so + // regenerating a partially/fully scheduled range doesn't report + // false "uncovered" gaps that contradict the Schedule tab. + ...existing + .where( + (schedule) => + schedule.startTime.year == day.year && + schedule.startTime.month == day.month && + schedule.startTime.day == day.day, + ) + .map((schedule) => _coverageShiftType(schedule.shiftType)), + }; for (final shift in required) { if (!available.contains(shift)) { @@ -2219,6 +2240,17 @@ class _ScheduleGeneratorPanelState return value; } + // The uncovered-shifts check requires a generic 'on_call' each day, but the + // generator emits the weekend variants 'on_call_saturday'/'on_call_sunday'. + // Fold those to 'on_call' for coverage only (not for templates/generation), + // otherwise every Saturday and Sunday reports a false "missing On Call". + String _coverageShiftType(String value) { + if (value == 'on_call_saturday' || value == 'on_call_sunday') { + return 'on_call'; + } + return _normalizeShiftType(value); + } + String _shiftLabel(String value, RotationConfig? rotationConfig) { final configured = rotationConfig?.shiftTypes.firstWhere( (s) => s.id == value, diff --git a/lib/services/gemini_service.dart b/lib/services/gemini_service.dart deleted file mode 100644 index e80fb62e..00000000 --- a/lib/services/gemini_service.dart +++ /dev/null @@ -1,144 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter_dotenv/flutter_dotenv.dart'; -import 'package:google_generative_ai/google_generative_ai.dart'; -import 'package:http/http.dart' as http; - -class GeminiService { - static final GeminiService _instance = GeminiService._internal(); - - late final String _apiKey; - - /// Cache of valid model IDs (flash/lite, supporting generateContent). - List _validModels = []; - - factory GeminiService() => _instance; - - GeminiService._internal() { - final apiKey = dotenv.env['GEMINI_API_KEY']; - if (apiKey == null || apiKey.isEmpty) { - throw Exception('GEMINI_API_KEY not found in .env file'); - } - _apiKey = apiKey; - } - - // --------------------------------------------------------------------------- - // Model discovery - // --------------------------------------------------------------------------- - - /// Queries the Gemini REST API for available models and caches those that - /// - support `generateContent`, AND - /// - contain "flash" or "lite" in their name (free-tier / fast models). - /// - /// Returns a stable cached list on subsequent calls. - Future> _getValidModels() async { - if (_validModels.isNotEmpty) return _validModels; - - try { - final uri = Uri.parse( - 'https://generativelanguage.googleapis.com/v1beta/models?key=$_apiKey', - ); - final response = await http.get(uri); - - if (response.statusCode == 200) { - final data = jsonDecode(response.body) as Map; - final rawModels = (data['models'] as List?) ?? []; - - final discovered = []; - for (final m in rawModels) { - final fullName = (m['name'] as String? ?? ''); - final lower = fullName.toLowerCase(); - final methods = - (m['supportedGenerationMethods'] as List?) ?? []; - - if (methods.contains('generateContent') && - (lower.contains('flash') || lower.contains('lite'))) { - // Strip the "models/" prefix so it can be passed directly to - // GenerativeModel(model: ...). - final id = fullName.startsWith('models/') - ? fullName.substring('models/'.length) - : fullName; - discovered.add(id); - } - } - - // Sort descending so newer/more-capable models are tried first. - discovered.sort((a, b) => b.compareTo(a)); - _validModels = discovered; - } - } catch (_) { - // Fall back to hard-coded list of known free-tier models below. - } - - // If discovery failed or returned nothing, use safe known fallbacks. - if (_validModels.isEmpty) { - _validModels = [ - 'gemini-2.5-flash-lite', - 'gemini-2.5-flash', - 'gemini-2.0-flash', - 'gemini-1.5-flash', - ]; - } - - return _validModels; - } - - // --------------------------------------------------------------------------- - // Public API - // --------------------------------------------------------------------------- - - /// Fixes spelling/grammar, improves clarity, and translates [text] to - /// professional English. - /// - /// Provide a custom [promptInstruction] to give Gemini field-specific - /// context (subject, description, action-taken). If omitted a sensible - /// default is used. - /// - /// Automatically retries with the next available model on 429 / quota - /// errors to minimise wasted quota calls. - Future enhanceText(String text, {String? promptInstruction}) async { - if (text.trim().isEmpty) return text; - final instruction = - promptInstruction ?? - 'Fix spelling and grammar, improve clarity, and translate to ' - 'professional English. Return ONLY the improved text, no explanations:'; - final prompt = '$instruction\n\n"$text"'; - return _generateWithRetry(prompt, fallback: text); - } - - // --------------------------------------------------------------------------- - // Internal helpers - // --------------------------------------------------------------------------- - - /// Sends [prompt] to Gemini, retrying across all valid models on 429 errors. - /// Returns the model response on success, or throws if all models fail. - Future _generateWithRetry( - String prompt, { - required String fallback, - }) async { - final models = await _getValidModels(); - - for (int i = 0; i < models.length; i++) { - try { - final model = GenerativeModel(model: models[i], apiKey: _apiKey); - final response = await model.generateContent([Content.text(prompt)]); - return response.text ?? fallback; - } catch (e) { - final msg = e.toString().toLowerCase(); - final is429 = - msg.contains('429') || - msg.contains('quota') || - msg.contains('resource_exhausted'); - - if (!is429 || i == models.length - 1) { - // Non-quota error or last model — give up. - throw Exception('Gemini request failed: $e'); - } - // Quota hit — try the next model. - } - } - - // Should not reach here, but safety fallback. - throw Exception('All Gemini models exhausted'); - } -} diff --git a/lib/services/notification_bridge.dart b/lib/services/notification_bridge.dart index a91b7d54..93c12207 100644 --- a/lib/services/notification_bridge.dart +++ b/lib/services/notification_bridge.dart @@ -2,10 +2,28 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; -import '../models/notification_item.dart'; +import '../models/notification_item.model.dart'; import '../providers/notifications_provider.dart'; import '../providers/notification_navigation_provider.dart'; import '../routing/app_router.dart'; +import '../utils/snackbar.dart'; + +/// The newest unread item in [next] that wasn't in [prev], or null. +/// +/// Returns null for the first snapshot ([prev] == null) so the existing inbox +/// doesn't raise a banner on startup. [next] is sorted newest-first. +@visibleForTesting +NotificationItem? newestArrival( + List? prev, + List next, +) { + if (prev == null) return null; + final seen = {for (final n in prev) n.id}; + for (final n in next) { + if (n.isUnread && !seen.contains(n.id)) return n; + } + return null; +} /// Wraps the app and installs both a Supabase realtime listener and the /// FCM handlers described in the frontend design. @@ -24,8 +42,8 @@ class NotificationBridge extends ConsumerStatefulWidget { class _NotificationBridgeState extends ConsumerState with WidgetsBindingObserver { - // store previous notifications to diff - List _prevList = []; + // Last loaded snapshot to diff against; null until the inbox first loads. + List? _prevList; @override void initState() { @@ -92,24 +110,25 @@ class _NotificationBridgeState extends ConsumerState }; void _showBanner(String type, NotificationItem item) { - // Use a post-frame callback so that the ScaffoldMessenger from - // MaterialApp is available in the element tree. + // This widget sits above TasqApp's MaterialApp.router, so + // ScaffoldMessenger.of(context) would resolve to a messenger with no + // Scaffold. Use the app-level messenger key instead. WidgetsBinding.instance.addPostFrameCallback((_) { if (!mounted) return; - try { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(_bannerLabel(type)), - action: SnackBarAction( - label: 'View', - onPressed: () => - _goToDetail(taskId: item.taskId, ticketId: item.ticketId), + scaffoldMessengerKey.currentState?.showSnackBar( + SnackBar( + content: Text(_bannerLabel(type)), + action: SnackBarAction( + label: 'View', + onPressed: () => _goToDetail( + route: item.announcementId != null ? '/announcements' : null, + taskId: item.taskId, + ticketId: item.ticketId, + itServiceRequestId: item.itServiceRequestId, ), ), - ); - } catch (_) { - // ScaffoldMessenger not available yet (before first frame) — ignore. - } + ), + ); }); } @@ -163,16 +182,12 @@ class _NotificationBridgeState extends ConsumerState previous, next, ) { - final prevList = _prevList; - final nextList = next.maybeWhen( - data: (d) => d, - orElse: () => [], - ); - if (nextList.length > prevList.length) { - final newItem = nextList.last; - _showBanner(newItem.type, newItem); - } + // Loading/error emissions (e.g. invalidate on resume) keep the snapshot. + final nextList = next.valueOrNull; + if (nextList == null) return; + final item = newestArrival(_prevList, nextList); _prevList = nextList; + if (item != null) _showBanner(item.type, item); }); // Listen for pending navigation from local-notification taps diff --git a/lib/theme/m3_motion.dart b/lib/theme/m3_motion.dart index 4f79f275..b48081a7 100644 --- a/lib/theme/m3_motion.dart +++ b/lib/theme/m3_motion.dart @@ -871,44 +871,3 @@ class _M3BounceIconState extends State return ScaleTransition(scale: _entrance, child: badge); } } - -// ═══════════════════════════════════════════════════════════════ -// M3AnimatedCounter — smooth number animation -// ═══════════════════════════════════════════════════════════════ - -/// Animates an integer value from its previous value to [value] using a -/// [TweenAnimationBuilder], producing a smooth counting effect on metric -/// cards and dashboard KPIs. -/// -/// ```dart -/// M3AnimatedCounter( -/// value: totalTasks, -/// style: theme.textTheme.headlineMedium, -/// ) -/// ``` -class M3AnimatedCounter extends StatelessWidget { - const M3AnimatedCounter({ - super.key, - required this.value, - this.style, - this.duration = M3Motion.standard, - }); - - final int value; - final TextStyle? style; - final Duration duration; - - @override - Widget build(BuildContext context) { - if (m3ReducedMotion(context)) { - return Text(value.toString(), style: style); - } - - return TweenAnimationBuilder( - tween: IntTween(begin: 0, end: value), - duration: duration, - curve: M3Motion.emphasizedEnter, - builder: (_, v, _) => Text(v.toString(), style: style), - ); - } -} diff --git a/lib/utils/app_time.dart b/lib/utils/app_time.dart index 9d3b3e74..876c0cec 100644 --- a/lib/utils/app_time.dart +++ b/lib/utils/app_time.dart @@ -29,6 +29,16 @@ class AppTime { return toAppTime(DateTime.parse(value)); } + /// "Just now", "5m ago", "3h ago", "2d ago", then a short date after a week. + static String relative(DateTime value) { + final diff = now().difference(value); + if (diff.inMinutes < 1) return 'Just now'; + if (diff.inMinutes < 60) return '${diff.inMinutes}m ago'; + if (diff.inHours < 24) return '${diff.inHours}h ago'; + if (diff.inDays < 7) return '${diff.inDays}d ago'; + return formatDate(value); + } + /// Converts a [DateTime] into a human-readable short date string. /// /// Example: **Jan 05, 2025**. This matches the format previously used by diff --git a/lib/utils/debouncer.dart b/lib/utils/debouncer.dart new file mode 100644 index 00000000..92877c69 --- /dev/null +++ b/lib/utils/debouncer.dart @@ -0,0 +1,17 @@ +import 'dart:async'; + +/// Runs an action after [duration] of inactivity, cancelling any pending +/// run each time [run] is called again. +class Debouncer { + Debouncer(this.duration); + + final Duration duration; + Timer? _timer; + + void run(void Function() action) { + _timer?.cancel(); + _timer = Timer(duration, action); + } + + void cancel() => _timer?.cancel(); +} diff --git a/lib/utils/device_security.dart b/lib/utils/device_security.dart index a3d2c76d..4bd68ac8 100644 --- a/lib/utils/device_security.dart +++ b/lib/utils/device_security.dart @@ -1,12 +1,14 @@ import 'dart:io'; +import 'package:flutter/foundation.dart'; import 'package:safe_device/safe_device.dart'; /// Returns true if the device appears compromised for attendance purposes: /// rooted (Android) / jailbroken (iOS), or developer mode enabled. /// Returns false on any error so a detection failure never blocks a valid user. Future isDeviceCompromised() async { - if (!Platform.isAndroid && !Platform.isIOS) return false; + // dart:io Platform throws on web, so check kIsWeb first. + if (kIsWeb || (!Platform.isAndroid && !Platform.isIOS)) return false; try { final isJailBroken = await SafeDevice.isJailBroken; final isDeveloperMode = await SafeDevice.isDevelopmentModeEnable; diff --git a/lib/utils/snackbar.dart b/lib/utils/snackbar.dart index 025e3dee..a72be413 100644 --- a/lib/utils/snackbar.dart +++ b/lib/utils/snackbar.dart @@ -29,6 +29,20 @@ ContentType _mapSnackType(SnackType t) { } } +/// Reduces exception dumps that callers interpolate into messages (e.g. +/// `'Error: \$e'` → `Error: PostgrestException(message: X, code: …)`) to +/// just the human-readable `X`, so users never see raw exception syntax. +@visibleForTesting +String humanizeErrorText(String text) => text + .replaceAllMapped( + RegExp( + r'\w*Exception\(message: (.*?)(?:, (?:statusCode|code|details|hint|error):.*)?\)$', + dotAll: true, + ), + (m) => m[1]!, + ) + .replaceAll(RegExp(r'\bException: '), ''); + /// Core function used by all of the convenience helpers below. void showAwesomeSnackBar( BuildContext context, { @@ -49,7 +63,7 @@ void showAwesomeSnackBar( padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8), child: AwesomeSnackbarContent( title: title, - message: message, + message: humanizeErrorText(message), contentType: _mapSnackType(snackType), ), ), @@ -176,7 +190,7 @@ void showAwesomeSnackBarGlobal({ padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8), child: AwesomeSnackbarContent( title: title, - message: message, + message: humanizeErrorText(message), contentType: _mapSnackType(snackType), ), ), diff --git a/lib/utils/task_duration.dart b/lib/utils/task_duration.dart index 9ee0affc..b281fc81 100644 --- a/lib/utils/task_duration.dart +++ b/lib/utils/task_duration.dart @@ -1,4 +1,4 @@ -import '../models/task_activity_log.dart'; +import '../models/task_activity_log.model.dart'; /// Finds the canonical execution start time for a task. /// diff --git a/lib/widgets/app_shell.dart b/lib/widgets/app_shell.dart index f892110b..4d3091c3 100644 --- a/lib/widgets/app_shell.dart +++ b/lib/widgets/app_shell.dart @@ -158,7 +158,11 @@ class _AppNavigationRailState extends State { @override Widget build(BuildContext context) { final cs = Theme.of(context).colorScheme; - final currentIndex = _currentIndex(widget.location, widget.items); + // Exact match only: routes outside the rail (profile, notifications) + // highlight nothing instead of falling back to Dashboard. + final currentIndex = widget.items.indexWhere( + (item) => _isSelected(widget.location, item.route), + ); // M3 Expressive: tonal surface container instead of a hard border divider. // Custom scrollable layout replaces NavigationRail so items are reachable @@ -481,15 +485,17 @@ List _buildSections(String role) { icon: Icons.groups_outlined, selectedIcon: Icons.groups, ), - NavItem( - label: 'Reports', - route: '/reports', - icon: Icons.analytics_outlined, - selectedIcon: Icons.analytics, - ), + if (!isStandard) + NavItem( + label: 'Reports', + route: '/reports', + icon: Icons.analytics_outlined, + selectedIcon: Icons.analytics, + ), ]; - if (role == 'admin' || role == 'programmer' || role == 'dispatcher') { + // Must match the /settings guard in app_router.dart (admin/programmer). + if (role == 'admin' || role == 'programmer') { return [ NavSection(label: 'Operations', items: mainItems), NavSection( diff --git a/lib/widgets/office_picker.dart b/lib/widgets/office_picker.dart index e8b6bffc..ce868c52 100644 --- a/lib/widgets/office_picker.dart +++ b/lib/widgets/office_picker.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import '../models/office.dart'; +import '../models/office.model.dart'; import '../theme/m3_motion.dart'; import 'app_breakpoints.dart'; diff --git a/lib/widgets/task_assignment_section.dart b/lib/widgets/task_assignment_section.dart index 8a03b051..051eba3f 100644 --- a/lib/widgets/task_assignment_section.dart +++ b/lib/widgets/task_assignment_section.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../theme/m3_motion.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import '../models/profile.dart'; +import '../models/profile.model.dart'; import '../models/task_assignment.dart'; import '../providers/profile_provider.dart'; import '../providers/tasks_provider.dart'; @@ -68,13 +68,15 @@ class TaskAssignmentSection extends ConsumerWidget { children: [ Row( children: [ - Text( - 'Assigned IT Staff', - style: Theme.of( - context, - ).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.w700), + Expanded( + child: Text( + 'Assigned IT Staff', + overflow: TextOverflow.ellipsis, + style: Theme.of( + context, + ).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.w700), + ), ), - const Spacer(), if (canAssign) TextButton.icon( onPressed: () => _showAssignmentDialog( diff --git a/lib/widgets/tasq_adaptive_list.dart b/lib/widgets/tasq_adaptive_list.dart index c2f1351d..d0420a7e 100644 --- a/lib/widgets/tasq_adaptive_list.dart +++ b/lib/widgets/tasq_adaptive_list.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import '../theme/app_typography.dart'; import '../theme/app_surfaces.dart'; import '../theme/m3_motion.dart'; +import 'app_breakpoints.dart'; import 'mono_text.dart'; /// A column configuration for the [TasQAdaptiveList] desktop table view. @@ -359,7 +360,10 @@ class TasQAdaptiveList extends StatelessWidget { // On medium screens (< 1200px) hide columns that are marked hideOnMedium, // preventing the horizontal scrollbar from appearing on tablet viewports. - final isMediumScreen = constraints.maxWidth < 1200; + // Measure the screen, not this list: after the nav rail and page padding + // the list is < 1200px on most desktops, which hid e.g. Tasks' Status. + final isMediumScreen = + MediaQuery.sizeOf(context).width < AppBreakpoints.desktop; final visibleColumns = isMediumScreen ? columns.where((c) => !c.hideOnMedium).toList() : columns; diff --git a/lib/widgets/update_dialog.dart b/lib/widgets/update_dialog.dart index ae5d19be..07dd4a20 100644 --- a/lib/widgets/update_dialog.dart +++ b/lib/widgets/update_dialog.dart @@ -5,6 +5,7 @@ import 'package:flutter_quill/flutter_quill.dart' as quill; import '../models/app_version.dart'; import '../services/app_update_service.dart'; +import '../utils/snackbar.dart'; /// A reusable dialog that can render both flexible and forced updates and /// report download progress. Callers should wrap this with `showDialog` and @@ -47,9 +48,7 @@ class _UpdateDialogState extends State { _failed = true; _downloading = false; }); - ScaffoldMessenger.of( - context, - ).showSnackBar(SnackBar(content: Text('Download failed: $err'))); + showErrorSnackBar(context, 'Download failed: $err'); } } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2056cf53..a2b69fb9 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -11,7 +11,6 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST - pdfium_flutter ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index ccd1910f..df8f2ccc 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -16,6 +16,7 @@ import flutter_image_compress_macos import flutter_local_notifications import geolocator_apple import package_info_plus +import pdfium_flutter import printing import quill_native_bridge_macos import share_plus @@ -35,6 +36,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) + PDFiumFlutterPlugin.register(with: registry.registrar(forPlugin: "PDFiumFlutterPlugin")) PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin")) QuillNativeBridgePlugin.register(with: registry.registrar(forPlugin: "QuillNativeBridgePlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 63dc7864..89b515a0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -69,10 +69,10 @@ packages: dependency: transitive description: name: archive - sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" + sha256: a96e8b390886ee8abb49b7bd3ac8df6f451c621619f52a26e815fdcf568959ff url: "https://pub.dev" source: hosted - version: "4.0.7" + version: "4.0.9" args: dependency: transitive description: @@ -373,10 +373,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" charcode: dependency: transitive description: @@ -465,6 +465,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" + cupertino_ui: + dependency: transitive + description: + name: cupertino_ui + sha256: c23816577a1280cff409e989541767887011f8f1d8c1863a794ed308af46f2a9 + url: "https://pub.dev" + source: hosted + version: "1.1.1" dart_earcut: dependency: transitive description: @@ -537,22 +545,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.4.1" - dio: - dependency: "direct main" - description: - name: dio - sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c - url: "https://pub.dev" - source: hosted - version: "5.9.2" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340" - url: "https://pub.dev" - source: hosted - version: "2.1.2" ed25519_edwards: dependency: transitive description: @@ -581,10 +573,10 @@ packages: dependency: transitive description: name: ffi - sha256: d07d37192dbf97461359c1518788f203b0c9102cfd2c35a716b823741219542c + sha256: "6d7fd89431262d8f3125e81b50d3847a091d846eafcd4fdb88dd06f36d705a45" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" file: dependency: transitive description: @@ -799,7 +791,7 @@ packages: source: hosted version: "0.1.5" flutter_keyboard_visibility: - dependency: "direct main" + dependency: "direct overridden" description: name: flutter_keyboard_visibility sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8" @@ -935,10 +927,10 @@ packages: dependency: "direct main" description: name: flutter_quill - sha256: b96bb8525afdeaaea52f5d02f525e05cc34acd176467ab6d6f35d434cf14fde2 + sha256: "1f773f5f75e2628d80361c2c840c592791a0a157ebd587c9e37cf2cb8b8519b7" url: "https://pub.dev" source: hosted - version: "11.5.0" + version: "11.6.0" flutter_quill_delta_from_html: dependency: transitive description: @@ -985,10 +977,10 @@ packages: dependency: "direct main" description: name: font_awesome_flutter - sha256: b9011df3a1fa02993630b8fb83526368cf2206a711259830325bab2f1d2a4eb0 + sha256: "09dcde8ab90ffae1a7d65ff2ef96fc62a17ad9d0ce7c127b317ded676b0d5935" url: "https://pub.dev" source: hosted - version: "10.12.0" + version: "11.0.0" functions_client: dependency: transitive description: @@ -1161,10 +1153,10 @@ packages: dependency: transitive description: name: image - sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" + sha256: a1e7f4951e538a568e14b856702afc9ae1d2f4b202daced8d22c1b9cd211ce89 url: "https://pub.dev" source: hosted - version: "4.5.4" + version: "4.10.1" image_picker: dependency: "direct main" description: @@ -1233,10 +1225,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" + sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" url: "https://pub.dev" source: hosted - version: "0.20.2" + version: "0.20.3" io: dependency: transitive description: @@ -1337,26 +1329,34 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.20" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" + material_ui: + dependency: transitive + description: + name: material_ui + sha256: "134ab2f0843545c4e661e4ba2753fe1bcf0753cb690d5a9ee4870638a40411e9" + url: "https://pub.dev" + source: hosted + version: "1.4.0" meta: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.19.0" mgrs_dart: dependency: transitive description: @@ -1489,10 +1489,10 @@ packages: dependency: "direct main" description: name: pdf - sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416" + sha256: e47a275b267873d5944ad5f5ff0dcc7ac2e36c02b3046a0ffac9b72fd362c44b url: "https://pub.dev" source: hosted - version: "3.11.3" + version: "3.12.0" pdf_widget_wrapper: dependency: transitive description: @@ -1505,34 +1505,34 @@ packages: dependency: transitive description: name: pdfium_dart - sha256: f1683b9070ddc5c9189c6ee008c285791da66328ce1b882c7162d3393f3a4a74 + sha256: e296a26c030e6e0fb34b32ce7481a3cfa0c2d35ce80f6269551c685759f4c91f url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "0.3.1" pdfium_flutter: dependency: transitive description: name: pdfium_flutter - sha256: "0c8b7d5d11d20a1486eade599648e907067568955bd14a1b06de076a968b60a1" + sha256: "59897274513984b347fc98e7bf71ba457678daea8b5568cd7c688979aeb77765" url: "https://pub.dev" source: hosted - version: "0.1.9" + version: "0.3.1" pdfrx: dependency: "direct main" description: name: pdfrx - sha256: e32e0c786528eec2b3c56b43f59ef1debce3a27c7accd862b95413f949afcfa9 + sha256: "52e78d84a706e5d63d2502689fe8e800d823bc780ac4341b2d3683a4d726505a" url: "https://pub.dev" source: hosted - version: "2.2.24" + version: "2.6.5" pdfrx_engine: dependency: transitive description: name: pdfrx_engine - sha256: a8914433d1f6188b903c53d36b9d7dc908bfa89131591a9db22f1a22470d3a48 + sha256: f74ca9ea4ec722545f054a1d6ee1bf01222409ecd9458e5945c0cc5feaa3d2c6 url: "https://pub.dev" source: hosted - version: "0.3.9" + version: "0.6.1" permission_handler: dependency: "direct main" description: @@ -1649,10 +1649,10 @@ packages: dependency: "direct main" description: name: printing - sha256: "482cd5a5196008f984bb43ed0e47cbfdca7373490b62f3b27b3299275bf22a93" + sha256: "689170c9ddb1bda85826466ba80378aa8993486d3c959a71cd7d2d80cb606692" url: "https://pub.dev" source: hosted - version: "5.14.2" + version: "5.14.3" proj4dart: dependency: transitive description: @@ -2038,10 +2038,10 @@ packages: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.12" timezone: dependency: "direct main" description: @@ -2166,10 +2166,10 @@ packages: dependency: transitive description: name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + sha256: "92b9910f66ed1057fd4da7b040ae7c74cafacf885bdc81be496928d5049b032d" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.3" vm_service: dependency: transitive description: @@ -2267,5 +2267,5 @@ packages: source: hosted version: "2.1.0" sdks: - dart: ">=3.10.7 <4.0.0" - flutter: ">=3.38.4" + dart: ">=3.13.0 <4.0.0" + flutter: ">=3.47.0" diff --git a/pubspec.yaml b/pubspec.yaml index 8706a577..757807c3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.10.7 + sdk: ^3.12.0 dependencies: flutter: @@ -15,7 +15,7 @@ dependencies: flutter_riverpod: ^2.6.1 go_router: ^14.6.2 flutter_dotenv: ^5.2.1 - font_awesome_flutter: ^10.7.0 + font_awesome_flutter: ^11.0.0 google_fonts: ^8.0.2 audioplayers: ^6.1.0 geolocator: ^13.0.1 @@ -24,12 +24,11 @@ dependencies: flutter_map: ^8.2.2 latlong2: ^0.9.0 flutter_typeahead: ^4.1.0 - flutter_quill: ^11.5.0 + flutter_quill: ^11.6.0 file_picker: ^10.3.10 pdf: ^3.11.3 - pdfrx: ^2.2.24 + pdfrx: ^2.6.0 printing: ^5.14.2 - flutter_keyboard_visibility: ^5.4.1 awesome_snackbar_content: ^0.1.8 permission_handler: ^12.0.1 flutter_local_notifications: ^20.1.0 @@ -51,7 +50,6 @@ dependencies: google_mlkit_face_detection: ^0.13.2 qr_flutter: ^4.1.0 flutter_image_compress: ^2.4.0 - dio: ^5.1.2 package_info_plus: ^9.0.0 share_plus: ^10.0.0 pub_semver: ^2.1.1 @@ -78,6 +76,7 @@ flutter: - assets/ - assets/fonts/ +# flutter_typeahead pulls in 5.x transitively, and 5.x breaks the Android build (c31187ef). dependency_overrides: flutter_keyboard_visibility: ^6.0.0 diff --git a/supabase/functions/admin_user_management/index.ts b/supabase/functions/admin_user_management/index.ts index 8104e4fa..a7cfb456 100644 --- a/supabase/functions/admin_user_management/index.ts +++ b/supabase/functions/admin_user_management/index.ts @@ -91,7 +91,9 @@ serve(async (req) => { .eq("id", authData.user.id) .maybeSingle(); const role = (profile?.role ?? "").toString().toLowerCase(); - if (profileError || role != "admin") { + // QA-016: admins and programmers may manage users (the UI already exposes + // User Management to both roles). + if (profileError || (role != "admin" && role != "programmer")) { return jsonResponse({ error: "Forbidden" }, 403); } diff --git a/supabase/migrations/20260924090000_isr_rls_hardening.sql b/supabase/migrations/20260924090000_isr_rls_hardening.sql new file mode 100644 index 00000000..29423459 --- /dev/null +++ b/supabase/migrations/20260924090000_isr_rls_hardening.sql @@ -0,0 +1,173 @@ +-- QA-015: it_service_requests and its assignments used USING (true), so any +-- signed-in user could read every office's requests, edit any request, assign +-- staff, or approve (status -> scheduled) via the REST API. The app only hid +-- these actions in the UI. Mirror the app's rules server-side: +-- * admin/programmer/dispatcher/it_staff see and manage all requests +-- * other users see their own requests and their offices' requests, and may +-- edit only their own while draft/pending_approval +-- * assigned staff may update the requests they're assigned to +-- * only admins approve (enforced by trigger; RLS can't compare OLD/NEW) + +-- ----- it_service_requests ----- +DROP POLICY IF EXISTS "Authenticated users can read it_service_requests" ON it_service_requests; +DROP POLICY IF EXISTS "ISR: select" ON it_service_requests; +CREATE POLICY "ISR: select" ON it_service_requests + FOR SELECT TO authenticated USING ( + creator_id = auth.uid() + OR EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin','programmer','dispatcher','it_staff')) + OR office_id IN (SELECT uo.office_id FROM public.user_offices uo + WHERE uo.user_id = auth.uid()) + ); + +DROP POLICY IF EXISTS "Authenticated users can update it_service_requests" ON it_service_requests; +DROP POLICY IF EXISTS "ISR: update" ON it_service_requests; +CREATE POLICY "ISR: update" ON it_service_requests + FOR UPDATE TO authenticated USING ( + EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin','programmer','dispatcher','it_staff')) + OR (creator_id = auth.uid() AND status IN ('draft','pending_approval')) + OR EXISTS (SELECT 1 FROM public.it_service_request_assignments a + WHERE a.request_id = it_service_requests.id + AND a.user_id = auth.uid()) + ); +-- WITH CHECK defaults to USING, so a creator can't move their own request +-- out of draft/pending_approval (e.g. self-approve to 'scheduled'). + +CREATE OR REPLACE FUNCTION public.isr_guard_approval() +RETURNS trigger +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = public +AS $$ +BEGIN + -- Only end-user requests are guarded; service-role jobs have no auth.uid(). + IF auth.uid() IS NOT NULL + AND (NEW.approved_by_user_id IS DISTINCT FROM OLD.approved_by_user_id + OR (OLD.status = 'pending_approval' + AND NEW.status NOT IN ('pending_approval', 'cancelled'))) + AND NOT EXISTS (SELECT 1 FROM public.profiles + WHERE id = auth.uid() AND role = 'admin') THEN + RAISE EXCEPTION 'Only admins can approve IT service requests' + USING ERRCODE = '42501'; + END IF; + RETURN NEW; +END; +$$; + +DROP TRIGGER IF EXISTS isr_guard_approval ON it_service_requests; +CREATE TRIGGER isr_guard_approval + BEFORE UPDATE ON it_service_requests + FOR EACH ROW EXECUTE FUNCTION public.isr_guard_approval(); + +-- ----- it_service_request_assignments ----- +-- Same people who may edit the request may assign/unassign staff. +DROP POLICY IF EXISTS "Authenticated users can insert it_service_request_assignments" ON it_service_request_assignments; +DROP POLICY IF EXISTS "ISR assignments: insert" ON it_service_request_assignments; +CREATE POLICY "ISR assignments: insert" ON it_service_request_assignments + FOR INSERT TO authenticated WITH CHECK ( + EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin','programmer','dispatcher','it_staff')) + OR EXISTS (SELECT 1 FROM public.it_service_requests r + WHERE r.id = it_service_request_assignments.request_id + AND r.creator_id = auth.uid() + AND r.status IN ('draft','pending_approval')) + ); + +DROP POLICY IF EXISTS "Authenticated users can delete it_service_request_assignments" ON it_service_request_assignments; +DROP POLICY IF EXISTS "ISR assignments: delete" ON it_service_request_assignments; +CREATE POLICY "ISR assignments: delete" ON it_service_request_assignments + FOR DELETE TO authenticated USING ( + EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin','programmer','dispatcher','it_staff')) + OR EXISTS (SELECT 1 FROM public.it_service_requests r + WHERE r.id = it_service_request_assignments.request_id + AND r.creator_id = auth.uid() + AND r.status IN ('draft','pending_approval')) + ); + +-- ----- insert_it_service_request_with_number ----- +-- Two problems surfaced after the SELECT policy above was tightened: +-- 1. The number generator reads MAX(request_number) under the CALLER's RLS. +-- A non-privileged creator now sees only their own/office rows, so MAX +-- came back empty and it regenerated 'ISR-YYYY-0001', colliding with the +-- unique constraint. It must count ALL rows -> SECURITY DEFINER. +-- 2. Migration 20260604 added an 8-arg overload via CREATE OR REPLACE without +-- dropping the original 7-arg function, leaving two overloads (PGRST203 on +-- partial calls). Drop both signatures, then recreate one. +DROP FUNCTION IF EXISTS insert_it_service_request_with_number(text, text[], uuid, uuid, text, uuid, text); +DROP FUNCTION IF EXISTS insert_it_service_request_with_number(text, text[], uuid, uuid, uuid, text, uuid, text); + +CREATE FUNCTION insert_it_service_request_with_number( + p_event_name text, + p_services text[], + p_creator_id uuid, + p_id uuid DEFAULT NULL, + p_office_id uuid DEFAULT NULL, + p_requested_by text DEFAULT NULL, + p_requested_by_user_id uuid DEFAULT NULL, + p_status text DEFAULT 'draft' +) +RETURNS TABLE(id uuid, request_number text) +LANGUAGE plpgsql +SECURITY DEFINER +SET search_path = public +AS $$ +DECLARE + v_seq int; + v_id uuid; + v_number text; + v_creator uuid; + v_status text; + v_is_privileged boolean; +BEGIN + -- Under SECURITY DEFINER the INSERT bypasses the WITH CHECK creator guard, so + -- pin the creator to the caller (a signed-in user can't forge someone else's + -- ownership). Service-role callers (auth.uid() null) keep the passed value. + v_creator := COALESCE(auth.uid(), p_creator_id); + + -- Alias the table: the RETURNS TABLE(id …) OUT column shadows an unqualified + -- `id`, so reference profiles columns as p.id / p.role. + SELECT EXISTS ( + SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin','programmer','dispatcher','it_staff') + ) INTO v_is_privileged; + + -- Non-privileged creators can only start a request in draft/pending_approval, + -- so they can't create one already 'scheduled' to skip admin approval. + v_status := p_status; + IF auth.uid() IS NOT NULL AND NOT v_is_privileged + AND v_status NOT IN ('draft','pending_approval') THEN + v_status := 'pending_approval'; + END IF; + + -- ponytail: MAX+1 is racy under concurrent creates (two callers can compute + -- the same seq; the loser hits the unique constraint). Fine at this volume; + -- switch to a per-year sequence if ISR creation ever goes concurrent. + SELECT COALESCE(MAX( + CAST(NULLIF(regexp_replace(r.request_number, '^ISR-\d{4}-', ''), '') AS int) + ), 0) + 1 + INTO v_seq + FROM it_service_requests r + WHERE r.request_number LIKE 'ISR-' || EXTRACT(YEAR FROM now())::text || '-%'; + + v_number := 'ISR-' || EXTRACT(YEAR FROM now())::text || '-' || LPAD(v_seq::text, 4, '0'); + v_id := COALESCE(p_id, gen_random_uuid()); + + INSERT INTO it_service_requests ( + id, request_number, event_name, services, + creator_id, office_id, requested_by, requested_by_user_id, status + ) + VALUES ( + v_id, v_number, p_event_name, p_services, + v_creator, p_office_id, p_requested_by, p_requested_by_user_id, v_status + ); + + RETURN QUERY SELECT v_id, v_number; +END; +$$; diff --git a/supabase/migrations/20260926090000_pass_slip_rls_hardening.sql b/supabase/migrations/20260926090000_pass_slip_rls_hardening.sql new file mode 100644 index 00000000..b929d46b --- /dev/null +++ b/supabase/migrations/20260926090000_pass_slip_rls_hardening.sql @@ -0,0 +1,38 @@ +-- QA-046: pass_slips self-approval bypass. +-- +-- The original "pass_slips_update" policy (20260306090200_pass_slips.sql) is: +-- FOR UPDATE USING (user_id = auth.uid() +-- OR profile.role IN ('admin','dispatcher')) +-- with NO WITH CHECK. Postgres then reuses the USING expression as the +-- WITH CHECK, so the row OWNER can PATCH their own pass slip to any values -- +-- including `status = 'approved'`, `approved_by`, `approved_at`. The approve/ +-- reject buttons are only gated in the UI, so any signed-in user could +-- self-approve their own pass slip through the REST API (the same class of +-- flaw as QA-015 on it_service_requests). +-- +-- Intended behaviour (see pass_slip_provider.dart): +-- * admin/dispatcher may approve/reject (and otherwise manage) any slip +-- * the owner may only mark their OWN already-approved slip 'completed' +-- (they return from the excusal); they must never set 'approved'/'rejected'. + +DROP POLICY IF EXISTS "pass_slips_update" ON pass_slips; +CREATE POLICY "pass_slips_update" ON pass_slips FOR UPDATE TO authenticated +USING ( + -- Approvers can act on any slip. + EXISTS ( + SELECT 1 FROM profiles p + WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher') + ) + -- The owner may only touch their own slip once it is approved (to complete it). + OR (user_id = auth.uid() AND status = 'approved') +) +WITH CHECK ( + EXISTS ( + SELECT 1 FROM profiles p + WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher') + ) + -- The owner's only allowed transition is approved -> completed. This blocks + -- self-approval: a pending slip's owner matches neither branch here, and the + -- USING clause above already refuses to expose a non-approved slip to them. + OR (user_id = auth.uid() AND status = 'completed') +); diff --git a/supabase/migrations/20260926100000_swap_requests_rls_hardening.sql b/supabase/migrations/20260926100000_swap_requests_rls_hardening.sql new file mode 100644 index 00000000..74dfd428 --- /dev/null +++ b/supabase/migrations/20260926100000_swap_requests_rls_hardening.sql @@ -0,0 +1,67 @@ +-- QA-047: swap_requests authorization bypass. +-- +-- Live REST probes with a non-privileged it_staff token showed: +-- * SELECT is not scoped: any authenticated user reads EVERY swap (60/60), +-- including 48 they are neither requester nor recipient of. +-- * UPDATE is not scoped: the requester could PATCH their OWN swap straight +-- to status='accepted' (forging the recipient's acceptance), and a total +-- non-participant could PATCH ANY swap's status/recipient. This bypasses the +-- identity checks in respond_shift_swap() entirely (same class as QA-015). +-- +-- The base swap_requests policies live in a migration that predates this repo +-- ("already exists in many deployments"), so their names aren't known here; +-- the DO block drops whatever SELECT/INSERT/UPDATE/DELETE policies exist and +-- this migration then defines the complete, hardened set. Safe because: +-- * respond_shift_swap() (accept/reject/escalate) is SECURITY DEFINER +-- (20260322170000+), so it mutates rows regardless of these policies. +-- * request_shift_swap() inserts with requester_id = auth.uid(). +-- * The only direct table UPDATE the app makes is reassignSwap(), an +-- admin/dispatcher action (workforce_provider.dart:reassignSwap). + +ALTER TABLE public.swap_requests ENABLE ROW LEVEL SECURITY; + +DO $$ +DECLARE + pol record; +BEGIN + FOR pol IN + SELECT policyname FROM pg_policies + WHERE schemaname = 'public' AND tablename = 'swap_requests' + LOOP + EXECUTE format('DROP POLICY IF EXISTS %I ON public.swap_requests', pol.policyname); + END LOOP; +END $$; + +-- SELECT: only the two participants and admins/dispatchers. The provider still +-- filters client-side, so tightening here only removes rows a user shouldn't +-- have seen in the first place. +CREATE POLICY "swap_requests: select" ON public.swap_requests + FOR SELECT TO authenticated USING ( + requester_id = auth.uid() + OR recipient_id = auth.uid() + OR EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')) + ); + +-- INSERT: a user may only open a swap as themselves (request_shift_swap pins +-- requester_id to auth.uid()). +CREATE POLICY "swap_requests: insert" ON public.swap_requests + FOR INSERT TO authenticated WITH CHECK ( + requester_id = auth.uid() + ); + +-- UPDATE: only admins/dispatchers may write the row directly (reassignSwap). +-- Participants accept/reject/escalate through respond_shift_swap(), which is +-- SECURITY DEFINER and therefore not bound by this policy. This is what closes +-- the bypass: a requester/recipient can no longer forge status directly. +CREATE POLICY "swap_requests: update" ON public.swap_requests + FOR UPDATE TO authenticated USING ( + EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')) + ) + WITH CHECK ( + EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() AND p.role IN ('admin', 'dispatcher')) + ); + +-- No DELETE policy: direct deletes stay blocked (unchanged behaviour). diff --git a/supabase/migrations/20260926110000_isr_attachment_delete_hardening.sql b/supabase/migrations/20260926110000_isr_attachment_delete_hardening.sql new file mode 100644 index 00000000..900829e5 --- /dev/null +++ b/supabase/migrations/20260926110000_isr_attachment_delete_hardening.sql @@ -0,0 +1,25 @@ +-- QA-027: it_service_attachments delete was open to any signed-in user. +-- +-- The bucket stays public for reads (per product decision), but the DELETE +-- policy allowed ANY authenticated user to delete ANY file in the bucket +-- (USING (bucket_id = 'it_service_attachments')). Tighten it to the uploader +-- (storage sets objects.owner to the uploader's auth.uid) plus the privileged +-- IT-request roles that manage requests, so users can't delete each other's +-- attachments. Read/upload policies are left unchanged. + +DROP POLICY IF EXISTS "Authenticated users can delete it_service_attachments" ON storage.objects; +CREATE POLICY "Authenticated users can delete it_service_attachments" + ON storage.objects + FOR DELETE + TO authenticated + USING ( + bucket_id = 'it_service_attachments' + AND ( + owner = auth.uid() + OR EXISTS ( + SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin', 'programmer', 'dispatcher', 'it_staff') + ) + ) + ); diff --git a/supabase/migrations/20260926120000_task_attachment_write_hardening.sql b/supabase/migrations/20260926120000_task_attachment_write_hardening.sql new file mode 100644 index 00000000..6b720f86 --- /dev/null +++ b/supabase/migrations/20260926120000_task_attachment_write_hardening.sql @@ -0,0 +1,47 @@ +-- QA-027 follow-up: task_attachments storage writes were open to the `public` +-- role, i.e. UNAUTHENTICATED users could upload, overwrite, and delete task +-- attachments (worse than the it_service_attachments delete hole). The bucket +-- stays public for reads (bucket.public = true, unchanged); lock down writes: +-- * INSERT: any authenticated user (uploads happen while signed in) +-- * UPDATE/DELETE: the uploader (objects.owner) or a task-privileged role +-- The read policy ("task attachments policy 6srt2u_0") is left untouched. + +DROP POLICY IF EXISTS "task attachments policy 6srt2u_1" ON storage.objects; -- was INSERT/public +CREATE POLICY "task_attachments_insert" ON storage.objects + FOR INSERT TO authenticated + WITH CHECK (bucket_id = 'task_attachments'); + +DROP POLICY IF EXISTS "task attachments policy 6srt2u_2" ON storage.objects; -- was UPDATE/public +CREATE POLICY "task_attachments_update" ON storage.objects + FOR UPDATE TO authenticated + USING ( + bucket_id = 'task_attachments' + AND ( + owner = auth.uid() + OR EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin', 'programmer', 'dispatcher', 'it_staff')) + ) + ) + WITH CHECK ( + bucket_id = 'task_attachments' + AND ( + owner = auth.uid() + OR EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin', 'programmer', 'dispatcher', 'it_staff')) + ) + ); + +DROP POLICY IF EXISTS "task attachments policy 6srt2u_3" ON storage.objects; -- was DELETE/public +CREATE POLICY "task_attachments_delete" ON storage.objects + FOR DELETE TO authenticated + USING ( + bucket_id = 'task_attachments' + AND ( + owner = auth.uid() + OR EXISTS (SELECT 1 FROM public.profiles p + WHERE p.id = auth.uid() + AND p.role IN ('admin', 'programmer', 'dispatcher', 'it_staff')) + ) + ); diff --git a/test/announcements_test.dart b/test/announcements_test.dart index 5f8c3148..56558431 100644 --- a/test/announcements_test.dart +++ b/test/announcements_test.dart @@ -1,8 +1,8 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:tasq/models/announcement.dart'; -import 'package:tasq/models/announcement_comment.dart'; +import 'package:tasq/models/announcement.model.dart'; +import 'package:tasq/models/announcement_comment.model.dart'; import 'package:tasq/providers/announcements_provider.dart'; import 'package:tasq/utils/app_time.dart'; diff --git a/test/dashboard_metrics_provider_test.dart b/test/dashboard_metrics_provider_test.dart index b60b46fb..52d18760 100644 --- a/test/dashboard_metrics_provider_test.dart +++ b/test/dashboard_metrics_provider_test.dart @@ -3,19 +3,19 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:tasq/models/it_service_request.dart'; -import 'package:tasq/models/it_service_request_assignment.dart'; -import 'package:tasq/models/profile.dart'; -import 'package:tasq/models/ticket.dart'; -import 'package:tasq/models/task.dart'; +import 'package:tasq/models/it_service_request.model.dart'; +import 'package:tasq/models/it_service_request_assignment.model.dart'; +import 'package:tasq/models/profile.model.dart'; +import 'package:tasq/models/ticket.model.dart'; +import 'package:tasq/models/task.model.dart'; import 'package:tasq/models/task_assignment.dart'; import 'package:tasq/models/ticket_message.dart'; -import 'package:tasq/models/duty_schedule.dart'; -import 'package:tasq/models/attendance_log.dart'; +import 'package:tasq/models/duty_schedule.model.dart'; +import 'package:tasq/models/attendance_log.model.dart'; import 'package:tasq/models/live_position.dart'; -import 'package:tasq/models/leave_of_absence.dart'; -import 'package:tasq/models/pass_slip.dart'; -import 'package:tasq/models/team.dart'; +import 'package:tasq/models/leave_of_absence.model.dart'; +import 'package:tasq/models/pass_slip.model.dart'; +import 'package:tasq/models/team.model.dart'; import 'package:tasq/models/team_member.dart'; import 'package:tasq/screens/dashboard/dashboard_screen.dart'; import 'package:tasq/utils/app_time.dart'; @@ -327,10 +327,13 @@ void main() { final schedule = DutySchedule( id: 's2', + // Anchor the shift around `now` so the shift is always active when the + // suite runs; a hard-coded 08:00–16:00 window made this test pass only + // during daytime and report 'Off duty' (correctly) at night. userId: profile.id, shiftType: 'am', - startTime: DateTime(now.year, now.month, now.day, 8), - endTime: DateTime(now.year, now.month, now.day, 16), + startTime: now.subtract(const Duration(hours: 1)), + endTime: now.add(const Duration(hours: 4)), status: 'scheduled', createdAt: now, checkInAt: null, diff --git a/test/geofence_admin_screen_test.dart b/test/geofence_admin_screen_test.dart index b33803ff..4e13ab0e 100644 --- a/test/geofence_admin_screen_test.dart +++ b/test/geofence_admin_screen_test.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:geolocator/geolocator.dart'; import 'package:tasq/models/app_settings.dart'; -import 'package:tasq/models/profile.dart'; +import 'package:tasq/models/profile.model.dart'; import 'package:tasq/providers/profile_provider.dart'; import 'package:tasq/providers/workforce_provider.dart'; import 'package:tasq/providers/location_provider.dart'; diff --git a/test/it_job_checklist_test.dart b/test/it_job_checklist_test.dart index 0bc1a125..220fad0a 100644 --- a/test/it_job_checklist_test.dart +++ b/test/it_job_checklist_test.dart @@ -1,7 +1,7 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:tasq/models/task.dart'; +import 'package:tasq/models/task.model.dart'; import 'package:tasq/models/task_assignment.dart'; -import 'package:tasq/models/notification_item.dart'; +import 'package:tasq/models/notification_item.model.dart'; import 'package:tasq/utils/app_time.dart'; void main() { diff --git a/test/layout_smoke_test.dart b/test/layout_smoke_test.dart index 29c1bd15..6b9c0581 100644 --- a/test/layout_smoke_test.dart +++ b/test/layout_smoke_test.dart @@ -5,20 +5,20 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:awesome_snackbar_content/awesome_snackbar_content.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:tasq/models/attendance_log.dart'; -import 'package:tasq/models/notification_item.dart'; -import 'package:tasq/models/office.dart'; -import 'package:tasq/models/pass_slip.dart'; -import 'package:tasq/models/profile.dart'; -import 'package:tasq/models/task.dart'; +import 'package:tasq/models/attendance_log.model.dart'; +import 'package:tasq/models/notification_item.model.dart'; +import 'package:tasq/models/office.model.dart'; +import 'package:tasq/models/pass_slip.model.dart'; +import 'package:tasq/models/profile.model.dart'; +import 'package:tasq/models/task.model.dart'; import 'package:tasq/models/task_assignment.dart'; -import 'package:tasq/models/ticket.dart'; +import 'package:tasq/models/ticket.model.dart'; import 'package:tasq/models/user_office.dart'; -import 'package:tasq/models/team.dart'; +import 'package:tasq/models/team.model.dart'; import 'package:tasq/utils/app_time.dart'; import 'package:go_router/go_router.dart'; import 'package:tasq/models/team_member.dart'; -import 'package:tasq/models/announcement.dart'; +import 'package:tasq/models/announcement.model.dart'; import 'package:tasq/providers/announcements_provider.dart'; import 'package:tasq/utils/snackbar.dart' show scaffoldMessengerKey; import 'package:tasq/providers/attendance_provider.dart'; @@ -554,6 +554,7 @@ void main() { ); await tester.pumpAndSettle(); + await _pickOffice(tester); await tester.tap(find.text('Create')); await tester.pumpAndSettle(); @@ -597,6 +598,7 @@ void main() { ); await tester.pumpAndSettle(); + await _pickOffice(tester); await tester.tap(find.text('Create')); await tester.pump(); // start saving expect(find.byType(CircularProgressIndicator), findsOneWidget); @@ -627,6 +629,7 @@ void main() { ); await tester.pumpAndSettle(); + await _pickOffice(tester); await tester.tap(find.text('Create')); await tester.pumpAndSettle(); @@ -678,6 +681,7 @@ void main() { ); await tester.pumpAndSettle(); + await _pickOffice(tester); await tester.tap(find.text('Create')); await tester.pump(); expect(find.byType(CircularProgressIndicator), findsOneWidget); @@ -802,7 +806,21 @@ Future _pumpScreen( Future _setSurfaceSize(WidgetTester tester, Size size) async { await tester.binding.setSurfaceSize(size); + // setSurfaceSize alone leaves MediaQuery at the 800x600 default; size the + // view too so breakpoint checks see the same width as the layout. + tester.view.physicalSize = size; + tester.view.devicePixelRatio = 1.0; addTearDown(() async { await tester.binding.setSurfaceSize(null); + tester.view.resetPhysicalSize(); + tester.view.resetDevicePixelRatio(); }); } + +/// Office is required in the ticket/task create dialogs. +Future _pickOffice(WidgetTester tester) async { + await tester.tap(find.text('Select office…')); + await tester.pumpAndSettle(); + await tester.tap(find.widgetWithText(ListTile, 'HQ').last); + await tester.pumpAndSettle(); +} diff --git a/test/leave_stream_update_test.dart b/test/leave_stream_update_test.dart index ae060703..2f5b45d2 100644 --- a/test/leave_stream_update_test.dart +++ b/test/leave_stream_update_test.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:tasq/models/leave_of_absence.dart'; -import 'package:tasq/models/profile.dart'; +import 'package:tasq/models/leave_of_absence.model.dart'; +import 'package:tasq/models/profile.model.dart'; import 'package:tasq/screens/attendance/attendance_screen.dart'; import 'package:tasq/providers/leave_provider.dart'; import 'package:tasq/providers/profile_provider.dart'; diff --git a/test/notification_bridge_test.dart b/test/notification_bridge_test.dart new file mode 100644 index 00000000..89321ee0 --- /dev/null +++ b/test/notification_bridge_test.dart @@ -0,0 +1,37 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:tasq/models/notification_item.model.dart'; +import 'package:tasq/services/notification_bridge.dart'; + +NotificationItem _n(String id, {DateTime? readAt}) => NotificationItem( + id: id, + userId: 'u', + actorId: null, + ticketId: null, + taskId: null, + itServiceRequestId: null, + messageId: null, + type: 'assignment', + createdAt: DateTime(2026), + readAt: readAt, +); + +void main() { + test('first snapshot never raises a banner', () { + expect(newestArrival(null, [_n('b'), _n('a')]), isNull); + }); + + test('picks the newest unseen item, not the oldest', () { + final prev = [_n('a')]; + final next = [_n('c'), _n('b'), _n('a')]; // newest-first + expect(newestArrival(prev, next)?.id, 'c'); + }); + + test('ignores already-read and already-seen items', () { + final prev = [_n('a')]; + expect( + newestArrival(prev, [_n('b', readAt: DateTime(2026)), _n('a')]), + isNull, + ); + expect(newestArrival(prev, [_n('a')]), isNull); + }); +} diff --git a/test/offline_sync_test.dart b/test/offline_sync_test.dart index 3151b986..ae3d1ea0 100644 --- a/test/offline_sync_test.dart +++ b/test/offline_sync_test.dart @@ -86,10 +86,10 @@ void main() { await tester.pumpWidget(buildBanner(online: true)); await tester.pump(); - expect(find.byIcon(Icons.wifi_off), findsNothing); + expect(find.byIcon(Icons.wifi_off_rounded), findsNothing); expect( find.text( - 'No internet \u2014 changes saved locally, will sync automatically', + 'No internet \u2014 changes saved locally', ), findsNothing, ); @@ -99,10 +99,10 @@ void main() { await tester.pumpWidget(buildBanner(online: false)); await tester.pump(); - expect(find.byIcon(Icons.wifi_off), findsOneWidget); + expect(find.byIcon(Icons.wifi_off_rounded), findsOneWidget); expect( find.text( - 'No internet \u2014 changes saved locally, will sync automatically', + 'No internet \u2014 changes saved locally', ), findsOneWidget, ); @@ -127,12 +127,12 @@ void main() { ), ); await tester.pump(); - expect(find.byIcon(Icons.wifi_off), findsOneWidget); + expect(find.byIcon(Icons.wifi_off_rounded), findsOneWidget); // Go online — update provider state, then let AnimatedSize animate. container.read(isOnlineProvider.notifier).state = true; await tester.pumpAndSettle(); - expect(find.byIcon(Icons.wifi_off), findsNothing); + expect(find.byIcon(Icons.wifi_off_rounded), findsNothing); }); testWidgets('banner transitions from online to offline', (tester) async { @@ -151,12 +151,12 @@ void main() { ), ); await tester.pump(); - expect(find.byIcon(Icons.wifi_off), findsNothing); + expect(find.byIcon(Icons.wifi_off_rounded), findsNothing); // Go offline — update provider state, then let AnimatedSize animate. container.read(isOnlineProvider.notifier).state = false; await tester.pumpAndSettle(); - expect(find.byIcon(Icons.wifi_off), findsOneWidget); + expect(find.byIcon(Icons.wifi_off_rounded), findsOneWidget); }); testWidgets('child widget is always rendered regardless of connectivity', diff --git a/test/profile_screen_test.dart b/test/profile_screen_test.dart index b618854b..99892209 100644 --- a/test/profile_screen_test.dart +++ b/test/profile_screen_test.dart @@ -3,8 +3,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:tasq/models/office.dart'; -import 'package:tasq/models/profile.dart'; +import 'package:tasq/models/office.model.dart'; +import 'package:tasq/models/profile.model.dart'; import 'package:tasq/models/user_office.dart'; import 'package:tasq/providers/profile_provider.dart'; import 'package:tasq/providers/tickets_provider.dart'; diff --git a/test/searchable_multi_select_dropdown_test.dart b/test/searchable_multi_select_dropdown_test.dart index 6326644c..c681565a 100644 --- a/test/searchable_multi_select_dropdown_test.dart +++ b/test/searchable_multi_select_dropdown_test.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:tasq/models/office.dart'; +import 'package:tasq/models/office.model.dart'; import 'package:tasq/widgets/multi_select_picker.dart'; void main() { diff --git a/test/snackbar_humanize_test.dart b/test/snackbar_humanize_test.dart new file mode 100644 index 00000000..f022eb48 --- /dev/null +++ b/test/snackbar_humanize_test.dart @@ -0,0 +1,32 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:tasq/utils/snackbar.dart'; + +void main() { + test('strips exception dumps down to the message', () { + expect( + humanizeErrorText( + 'Sign in failed: AuthApiException(message: Invalid login credentials, ' + 'statusCode: 400, code: invalid_credentials)', + ), + 'Sign in failed: Invalid login credentials', + ); + expect( + humanizeErrorText( + 'Error: PostgrestException(message: Could not find f(a, b) in the ' + 'schema cache, code: PGRST202, details: x, hint: y)', + ), + 'Error: Could not find f(a, b) in the schema cache', + ); + expect( + humanizeErrorText('Error: Exception: Not authenticated'), + 'Error: Not authenticated', + ); + }); + + test('leaves plain messages alone', () { + expect( + humanizeErrorText('Event name is required'), + 'Event name is required', + ); + }); +} diff --git a/test/task_assignment_section_test.dart b/test/task_assignment_section_test.dart index 9c5ad9bc..fb59e6d7 100644 --- a/test/task_assignment_section_test.dart +++ b/test/task_assignment_section_test.dart @@ -3,8 +3,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'dart:async'; -import 'package:tasq/models/profile.dart'; -import 'package:tasq/models/task.dart'; +import 'package:tasq/models/profile.model.dart'; +import 'package:tasq/models/task.model.dart'; import 'package:tasq/models/task_assignment.dart'; import 'package:tasq/providers/profile_provider.dart'; import 'package:tasq/providers/tasks_provider.dart'; diff --git a/test/tasks_provider_test.dart b/test/tasks_provider_test.dart index bfc12e75..07844761 100644 --- a/test/tasks_provider_test.dart +++ b/test/tasks_provider_test.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; import 'package:tasq/providers/tasks_provider.dart'; -import 'package:tasq/models/task.dart'; -import 'package:tasq/models/task_activity_log.dart'; +import 'package:tasq/models/task.model.dart'; +import 'package:tasq/models/task_activity_log.model.dart'; import 'package:tasq/utils/app_time.dart'; // Minimal fake supabase client similar to integration test work, diff --git a/test/teams_screen_test.dart b/test/teams_screen_test.dart index 5e0b06e9..76de3550 100644 --- a/test/teams_screen_test.dart +++ b/test/teams_screen_test.dart @@ -3,9 +3,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:tasq/models/office.dart'; -import 'package:tasq/models/profile.dart'; -import 'package:tasq/models/team.dart'; +import 'package:tasq/models/office.model.dart'; +import 'package:tasq/models/profile.model.dart'; +import 'package:tasq/models/team.model.dart'; import 'package:tasq/models/team_member.dart'; import 'package:tasq/providers/teams_provider.dart'; import 'package:tasq/providers/profile_provider.dart'; diff --git a/test/user_management_screen_test.dart b/test/user_management_screen_test.dart index 690bb391..f14d8450 100644 --- a/test/user_management_screen_test.dart +++ b/test/user_management_screen_test.dart @@ -3,8 +3,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:tasq/models/office.dart'; -import 'package:tasq/models/profile.dart'; +import 'package:tasq/models/office.model.dart'; +import 'package:tasq/models/profile.model.dart'; import 'package:tasq/models/ticket_message.dart'; import 'package:tasq/models/user_office.dart'; import 'package:tasq/providers/profile_provider.dart'; diff --git a/test/workforce_swap_test.dart b/test/workforce_swap_test.dart index b55a6c8e..5992a7a9 100644 --- a/test/workforce_swap_test.dart +++ b/test/workforce_swap_test.dart @@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; -import 'package:tasq/models/profile.dart'; -import 'package:tasq/models/duty_schedule.dart'; +import 'package:tasq/models/profile.model.dart'; +import 'package:tasq/models/duty_schedule.model.dart'; import 'package:tasq/models/rotation_config.dart'; -import 'package:tasq/models/swap_request.dart'; +import 'package:tasq/models/swap_request.model.dart'; import 'package:tasq/providers/rotation_config_provider.dart'; import 'package:tasq/providers/supabase_provider.dart'; import 'package:tasq/providers/workforce_provider.dart'; diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index a3ed56bc..8f2c6a3a 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -16,7 +16,6 @@ list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST flutter_local_notifications_windows - pdfium_flutter ) set(PLUGIN_BUNDLED_LIBRARIES)