- Create migration for booking_requests table with necessary fields and indexes.
- Implement BookingRequestRepository for database operations related to booking requests.
- Develop BookingRequestService to handle business logic for submitting, accepting, rejecting, and canceling booking requests.
- Create DTOs for creating booking requests and reviewing them.
- Define BookingRequest entity to map to the booking_requests table.
- Add UI components for managing shipment requests, including detail and list pages.
- Implement OperationDatePicker component for selecting available shipment days.
- Implemented a shared file viewer modal using `useFileViewer` hook to allow inline viewing of documents (images, PDFs, videos, etc.) across the application.
- Updated `ContractClearanceReviewSection`, `ContractRequestDetailPage`, `ContractViewPage`, and booking-related components to utilize the new file viewer for document previews.
- Added "Approve all" button in `ContractClearanceReviewSection` to bulk approve documents.
- Enhanced document action buttons to include view and download options based on file type.
- Introduced `isViewable` utility to determine if a file can be previewed inline.
- Created `FileViewer` component to handle rendering of various file types and added appropriate fallback for unsupported formats.
- DashboardLayout now accepts userName, userEmail, userInitials, onLogout
props; computes initials from name; replaces hardcoded "John Doe" values
- Portal App.tsx pulls display name and email from useAuth user object and
passes them to DashboardLayout
- handleLogout performs unconditional local cleanup (cookies + localStorage
+ hard redirect to /auth) so a failed API call never leaves the user stuck
- main.tsx purges cookies whose value is the literal string "undefined",
clearing stale tokens written before the envelope interceptor fix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>