feat(tickets): sortable list columns (MAPPS-289) #306

Merged
YousifShkara merged 1 commit from feat/MAPPS-289-sortable-list-columns into main 2026-06-21 10:55:38 +02:00
Owner

The Tickets list headers were marked sortable: true but never wired to an onsort handler, so clicking the column showed a pointer cursor but did nothing. Mirror the ContactSortKey pattern from contacts.rs: a TicketSortKey enum tracks the active column (Ticket / Company / Status / Priority / Assigned / Updated), a Signal<Option<(key, SortDirection)>> holds direction with toggle-cycling logic, and the filtered set is sorted client-side over the already-filtered rows. The default sort matches the existing ?sort=-updated_at server query so the first paint is unchanged; clicking a header re-orders without an extra round trip. The other list pages (Companies, Contacts) already had functional sort; the Tickets list closes the gap. Remaining lists (Projects, Assets, Contracts, Invoices) follow the same pattern and are tracked as a follow-up under this ticket - this PR captures the highest-traffic surface (the QA report specifically called out the ticket queue).

#MAPPS-289

The Tickets list headers were marked `sortable: true` but never wired to an `onsort` handler, so clicking the column showed a pointer cursor but did nothing. Mirror the `ContactSortKey` pattern from contacts.rs: a `TicketSortKey` enum tracks the active column (Ticket / Company / Status / Priority / Assigned / Updated), a `Signal<Option<(key, SortDirection)>>` holds direction with toggle-cycling logic, and the filtered set is sorted client-side over the already-filtered rows. The default sort matches the existing `?sort=-updated_at` server query so the first paint is unchanged; clicking a header re-orders without an extra round trip. The other list pages (Companies, Contacts) already had functional sort; the Tickets list closes the gap. Remaining lists (Projects, Assets, Contracts, Invoices) follow the same pattern and are tracked as a follow-up under this ticket - this PR captures the highest-traffic surface (the QA report specifically called out the ticket queue). #MAPPS-289
feat(tickets): sortable list columns (MAPPS-289)
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 4m22s
Create release / Create release from merged PR (pull_request) Has been skipped
6e3f15fe2a
The Tickets list headers were marked `sortable: true` but never wired to an `onsort` handler, so clicking the column showed a pointer cursor but did nothing. Mirror the `ContactSortKey` pattern from contacts.rs: a `TicketSortKey` enum tracks the active column (Ticket / Company / Status / Priority / Assigned / Updated), a `Signal<Option<(key, SortDirection)>>` holds direction with toggle-cycling logic, and the filtered set is sorted client-side over the already-filtered rows. The default sort matches the existing `?sort=-updated_at` server query so the first paint is unchanged; clicking a header re-orders without an extra round trip. The other list pages (Companies, Contacts) already had functional sort; the Tickets list closes the gap. Remaining lists (Projects, Assets, Contracts, Invoices) follow the same pattern and are tracked as a follow-up under this ticket - this PR captures the highest-traffic surface (the QA report specifically called out the ticket queue).

#MAPPS-289
YousifShkara deleted branch feat/MAPPS-289-sortable-list-columns 2026-06-21 10:55:38 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!306
No description provided.