Implement company AI onboarding/recommendation models, services, repository, and tender UI integration with supporting tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
Addresses PR review on the auth interceptor:
- Guard against unbounded retry recursion: tag the replayed request with
extra['auth_retried'] and skip the refresh/replay path on a second 401 so
it can't recurse refresh -> replay indefinitely. Drop the redundant manual
Authorization header on the replay (onRequest re-injects it).
- Fix the concurrent-refresh race: coalesce concurrent 401s onto a single
in-flight refresh future so the rotating refresh token is only consumed
once, instead of later refreshes posting an already-consumed token and
spuriously logging out. (Chose the shared-future approach over
QueuedInterceptor, which deadlocks with the replay-via-same-Dio pattern.)
- Centralise the 'bearer' / 'refresh_token' / 'customer_data' pref keys in
a PrefKeys constants class used by the interceptor, network manager, auth
service and router so they can't silently diverge.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Added a new logo SVG asset to the AssetsManager for better branding.
- Updated the AuthViewModel to notify listeners on authentication error changes.
- Modified DesktopNavigationWidget to use the new logo SVG with specified dimensions for improved layout.
- Introduced new board-related assets in AssetsManager.
- Updated NetworkManager to increase connection and receive timeouts to 20 seconds.
- Added BoardRouteData for navigation to the BoardScreen.
- Updated app routes to include the new board route.
- Modified DesktopNavigationWidget to include a navigation item for the board.
- Added a new string constant for the board label in TendersStrings.
- Added a new clock icon asset to the AssetsManager.
- Updated MeetingTimeBottomSheet and MeetingTimeDialog to include a close button for better user experience.
- Introduced MeetingTimeSuccessfulRegisteredBottomSheet and MeetingTimeSuccessfulRegisteredDialog for confirming meeting time registration.
- Refactored submission dialogs to improve layout and interaction consistency.
- Updated `pubspec.lock` to reflect new versions for several packages, including `async`, `fake_async`, `leak_tracker`, and `vm_service`.
- Modified `TenderApprovalStatus` enum to include a new status `approved`.
- Updated routing for `YourTendersRouteData` to accept a status parameter and pass it to the `YourTendersScreen`.
- Adjusted API calls and view models to utilize the new status handling, ensuring proper filtering and display of tender data based on approval status.
- Enhanced filter dialog to support new status options and improved user feedback in the UI for submitted and approved tenders.
- Renamed BottomNavigation to TenderBottomNavigation for clarity.
- Updated TendersScreen to use TenderBottomNavigation.
- Converted TendersScreen from StatelessWidget to StatefulWidget to manage tab state.
- Added TabController for handling tab changes and improved layout with SafeArea and PageView.