- Frontend uses workOrderNumber/title/assignedTo, backend expects
WorkerOrderNumber/WorkerOrderTitle/AssignTo
- Prevents null overwrite of existing data on save
- Filter comments by commentType field (customer, vendor, internal)
- Add AuditTimeline component showing field changes with old → new values
- Pass auditLog from API response to view page
- Extract CommentTimeline into reusable component
- Filter comments: customer (from ingest pipeline, has recordType/commenter)
vs vendor (internal, has userName from ApplicationUser)
- Add tab UI to switch between streams with counts
- Format comment timestamps with formatDateTime
- Show "No comments yet" when a tab is empty
- Remove estimatedHours from form state, API mapping, and form UI
- Replace Low/Medium/High/Urgent priority options with Sev 1 through Sev 5
- Adjust date row from 3 columns to 2 columns
- Fetch locations from /api/Contact/GetLocations on mount
- Replace hardcoded dropdown options with dynamic list
- Switch form field from location (string) to locationId (int)
- Include locationId in API response mapping
- Create WorkOrderViewPage with details grid, status badge, and activity timeline
- Add /workorders/:id route for view, keep /workorders/edit/:id for edit
- List page now navigates to view page instead of edit
- Include comments and commenter fields in API response mapping
- Merge API response into form state instead of replacing it
- Null values from the API now fall back to the form's default values
- Prevents React controlled-to-uncontrolled input warning
- Create shared hooks/usePaginatedList.js accepting a fetch function and optional extra params
- Update all 7 list pages to use the shared hook
- Delete 11 individual hook files (useItems, useEmployees, useLocations, etc.)
- Restore error propagation in all fetch methods (was commented out)
- Change static header objects to functions so auth token is fresh per request
- Add missing return in putFormBody
- Properly throw on 401 unauthorized responses
- Make tokenUtility.js the single source of truth for localStorage
- Add getRawToken() and isAuthenticated() to tokenUtility
- Rewrite authService.js to delegate storage to tokenUtility
- Fix calendar api.js direct localStorage access
- Remove unused setToken import from apiUtil.js
- Use relative API URLs instead of hardcoded production/localhost URLs
- Fix setupProxy.js for http-proxy-middleware v3 syntax
- Point proxy to backend HTTP port for dev compatibility