feat(accounts): add client-side column sorting to Accounts and Groups
Verified against a live server: x:Account/query rejects sort on every property tried, including real ones like emailAddress, with unsupportedSort — the schema's empty list.sort is accurate, this is a systemic server gap, not something specific to this fork's synthetic columns. Added client-side sorting (SCHEMA-DEVIATION: account-client-sort) for Email Address, Full Name, Usage/Quota, and Aliases on both lists, reusing the fetch-all-then-sort-locally mechanism already established for mailbox-client-hierarchy-sort: clicking a sortable header switches that one query to an unpaginated fetch, sorts the results in memory by the appropriate accessor (numeric for Usage/Aliases, string compare otherwise), then paginates client-side. Role isn't included (not a sortable scalar). Normal server-paginated lists are unaffected — this only activates when a client-sortable column is actually clicked. Verified end-to-end: sort indicators appear only on the intended columns, clicking Email Address/Aliases correctly reorders rows and toggles ascending/descending, Groups behaves the same as Accounts.
This commit is contained in:
@@ -74,6 +74,13 @@ itself stays byte-for-byte alignable with upstream's version of the file.
|
||||
- **Why**: neither list's schema exposes alias count as a column, only the full `aliases` list on the detail view.
|
||||
- **Ideal fix**: the server's `x:Account/User` and `x:Account/Group` list schemas include a computed alias-count column natively; this column definition is deleted.
|
||||
|
||||
### `account-client-sort` 🟡
|
||||
|
||||
- **Where**: [`src/components/lists/DynamicList.tsx`](src/components/lists/DynamicList.tsx) — `CLIENT_SORT_ACCESSORS`, `clientSortField`, and the `fetchData` branch that also triggers on `clientSortField`
|
||||
- **What**: on the `x:Account/User` and `x:Account/Group` lists, clicking the Email/Full Name/Usage/Aliases column headers sorts by fetching every matching row (bypassing server pagination, same mechanism as `mailbox-client-hierarchy-sort`) and sorting it client-side, instead of sending a JMAP `sort` to the server.
|
||||
- **Why**: neither list's schema declares any sortable property at all (`list.sort` is absent) — confirmed against a live server: `x:Account/query` with `sort: [{"property":"emailAddress",...}]` returns `unsupportedSort` for every property tried, including the real ones. This is a systemic gap in the current Stalwart server, not specific to this fork's synthetic columns.
|
||||
- **Ideal fix**: the server's `x:Account/User`/`x:Account/Group` query methods accept `sort` on at least `emailAddress`, `description`, `usedDiskQuota`, and the schema declares them in `list.sort`; the client-sort branch and `CLIENT_SORT_ACCESSORS` are deleted in favor of the normal server-paginated `sortableFields` path already used elsewhere.
|
||||
|
||||
## Not a deviation (for reference)
|
||||
|
||||
A few other `viewName === '...'` / `objectName === '...'` checks exist in
|
||||
|
||||
Reference in New Issue
Block a user