Files
alla-tms/docs/announcement-list-table-redesign.md
2026-07-16 09:53:14 +07:00

3.2 KiB

Announcement List Table Redesign

Existing Structure Review

  • Reused the existing announcements feature and kept the same route-handler, React Query, permission, and workflow stack.
  • Reused the shared table stack:
    • DataTable
    • useDataTable
    • DataTableColumnHeader
    • DataTableFacetedFilter
    • DataTableViewOptions
  • Reused the current announcement state transitions, pin/unpin endpoints, audit logging, and pagination flow.
  • Replaced only the presentation layer of the list page from cards to an enterprise-style data table.

Files Changed

  • src/features/announcements/api/types.ts
  • src/features/announcements/api/service.ts
  • src/features/announcements/components/announcements-listing.tsx
  • src/features/announcements/components/announcements-page.tsx
  • src/features/announcements/components/announcement-columns.tsx
  • src/features/announcements/components/announcement-toolbar.tsx
  • src/features/announcements/components/announcement-action-menu.tsx
  • src/features/announcements/server/announcement-data.ts
  • src/app/api/announcements/route.ts

UI Before / After

  • Before: announcement rows were rendered as stacked cards with inline action buttons.
  • After: the page uses a structured data table with fixed columns, sortable headers, row selection, and a per-row dropdown action menu.
  • Search and filter controls were kept but moved into a table-friendly toolbar layout.
  • Pinned status is now visible in a dedicated pin column instead of only inside the card header.

Table Columns

  • Selection checkbox
  • Pin indicator
  • Announcement title with content preview
  • Status badge
  • Published date
  • End date
  • Creator
  • Attachment
  • Action menu

Action Menu

  • Replaced inline buttons with a dropdown menu per row.
  • Menu entries still depend on the same permission and workflow checks:
    • View
    • Edit
    • Submit
    • Approve
    • Return
    • Reject
    • Publish
    • Pin / Unpin
    • Archive
    • Delete
  • Review and delete actions still reuse the existing dialogs.

Responsive Result

  • The toolbar stacks vertically on smaller widths and expands horizontally on larger screens.
  • The table stays inside the shared horizontal scroll container instead of overflowing the page.
  • The actions column remains pinned to the right for easier management on wide datasets.

Performance Impact

  • Kept the existing server pagination and React Query cache path.
  • Added sorting as an additive query parameter without changing the response shape.
  • Preserved the existing pinned-first ordering behavior, then applied requested table sorting.
  • No duplicate fetch path or alternate data source was introduced.

Regression Check

  • Search still uses the existing announcement query path.
  • Status and pin filters still work through the same list endpoint.
  • Pagination behavior is unchanged.
  • Workflow actions still call the same mutation and pin/unpin endpoints.
  • Permission checks remain enforced both in UI behavior and server routes.

Future Improvements

  • Add real bulk actions once the backend supports batch publish/archive/delete/pin operations.
  • Add optional mobile card mode if the product team wants a more touch-optimized small-screen presentation.
  • Add richer filter dimensions such as creator or year if the backend exposes options for them.