Add column configuration to default prebuilt worklists

Objective

  • Let teams choose which columns appear on Attik’s six default (prebuilt) worklists in Tools → Work — the same column flexibility custom worklists already have — without changing what records each list includes.
  • Reduce the workaround of recreating a default queue as a custom worklist just to get the right columns (called out explicitly for Open Quotes, including the on hold status view).
  • Improve scan speed for operational queues (quote follow-up, on-hold triage, unpaid jobs, etc.) by surfacing the fields each team cares about on the row.

Background

  • Custom worklists (Mongo worklist documents) support saved column configuration via visibleColumns, riGroupFields, and crGroupFields on worklistSchema, configured in NewWorklistDrawer.tsx and rendered through WorklistResolver.tsx with WorklistTableHeader, SingleJobsBar, SingleQuoteBar, and SingleEventBar.
  • Default prebuilt worklists are not Mongo documents. They are hardcoded in WorklistMenu.tsx (DEFAULT_WORKLISTS: quotes, published, agreements, unconfirmed, paid, invoices) and routed in [[...type]]/page.tsx to dedicated task-check components (QuoteList, IsPublished, AgreementsNeeded, UnconfirmedOrders, JobsNotPaid, InvoicesDue).
  • Those default components do not persist or expose column configuration. Row components (SingleJobsBar, SingleQuoteBar) already accept visibleColumns, but defaults never pass them — they fall back to catalog defaults in columnConfig.ts via getEffectiveVisibleColumns.
  • A WorklistColumnsButton.tsx component exists for in-view column toggling on custom worklists but is not wired to any page today; column changes on custom worklists are currently set at create/edit time in NewWorklistDrawer.tsx.
  • On the June 16 implementation call, users said default quote and on-hold quote views still need column selection similar to custom worklists, while keeping built-in list criteria locked.
  • “On hold” is not a separate default worklist route — it is the Open Quotes worklist (/work/quotes) filtered to status=on_hold via HardcodedFiltersBar / WorklistFiltersBar.
  • ATT-1639 (Done) shipped customizable columns for custom worklists only; this work closes the gap for prebuilt defaults.
  • No attachments, linked documents, or inline media on this ticket.

Product Decisions

Locked

  1. Criteria stay locked — Default worklist inclusion logic (API params, status filters, date windows, grouping rules) must not become user-editable. Only which columns display on each row is in scope.
  2. Prefer configuring defaults over duplicating — Teams should be able to tune columns on the built-in lists instead of being forced to recreate equivalent custom worklists.
  3. Primary user pain (June 16 call)Open Quotes (all status tabs, especially on hold) is the highest-priority default surface; other defaults are in scope unless explicitly deferred.

Open

  1. v1 surface scope — Ship column config for all six default worklists at once, or quotes-first (including on-hold filter) with inspection defaults in a follow-up?
  2. Persistence model — Store column prefs per company per default-worklist key (shared by all staff), per user, or another model? Custom worklists store config on the worklist document (_companyId-scoped).
  3. Column editing UXIn-view column picker (wire up WorklistColumnsButton or equivalent on the list toolbar) vs admin/settings-only vs both? Custom worklists today only expose column pickers in the create/edit drawer.
  4. Grouped default layoutsJobs Not Paid and Open Invoices render via GroupedClientJobsBar (client-grouped), not the single-row grid used by WorklistResolver. Should column configuration apply to grouped rows, or only to single-row defaults (Unconfirmed Orders, Not Published, Agreements Not Signed, Open Quotes)?
  5. Required-info and contact columns — Should defaults support the same grp_ri / grp_cr group columns and individual ri_* / cr_* keys as custom worklists, or a static-catalog-only subset for v1?
  6. Relationship to ATT-1938ATT-1938 covers distinct required-info columns with blank-state visibility. Should this issue depend on or ship after ATT-1938, or ship with today’s grouped/stacked RI display and upgrade when ATT-1938 lands?
  7. Table header parity — Custom worklists show WorklistTableHeader above rows; most defaults do not. Is a sticky column header row required for defaults when optional columns are enabled?

Scope

Frontend (attik-frontend)

  • Default worklist entry pointsWorklistMenu.tsx keys and routes; src/app/tools/work/[[...type]]/page.tsx dispatches to QuoteList, IsPublished, AgreementsNeeded, UnconfirmedOrders, JobsNotPaid, InvoicesDue.
  • Row renderingSingleJobsBar.tsx, SingleQuoteBar.tsx, and grouped GroupedClientJobsBar.tsx already partially support visibleColumns; defaults must load saved prefs and pass them through (plus WorklistTableHeader if product requires header parity).
  • Column catalog — Reuse src/util/worklist/columnConfig.ts entity types (inspections, quotes); map each default worklist to the correct entity type (all inspection-based defaults → inspections; Open Quotes → quotes).
  • Existing column UINewWorklistDrawer.tsx column picker pattern and/or unused WorklistColumnsButton.tsx are likely reuse points; product decision needed on which surface to expose for defaults.
  • Filters unchangedHardcodedFiltersBar.tsx / WorklistFiltersBar.tsx (including quote status tabs like on hold) stay as-is; this work is column display only.

Backend (attik-backend)

  • No persistence today for default-worklist column prefs (grep shows no defaultWorklist preference model). A new schema/route (e.g. company-scoped prefs keyed by default worklist id) or extension of an existing settings document is likely needed — exact shape is an engineering choice once persistence model (Open #2) is locked.
  • worklistSchema.ts visibleColumns / riGroupFields / crGroupFields fields define the column shape custom worklists use; defaults should store compatible column key arrays if reusing the same rendering path.

Out of scope (unless product expands Open decisions)

  • Changing default worklist criteria, sort, limits, or filters.
  • ATT-1513 exclude/hide on default worklists (separate backlog issue).
  • ATT-1938 distinct per-field required-info columns with blank cells (adjacent; dependency TBD).
  • Converting default worklists into editable Mongo worklist documents.

References

  • ATT-1639 — Custom worklist columns (Done)
  • ATT-1938 — Required-info as distinct worklist columns (Triage, adjacent)
  • ATT-1513 — Exclude on default worklists (Backlog, adjacent)
  • Frontend: attik-frontend/src/app/tools/work/WorklistMenu.tsx, attik-frontend/src/util/worklist/columnConfig.ts, attik-frontend/src/components/task-check/WorklistResolver.tsx
  • Backend: attik-backend/src/models/worklistSchema.ts

Please authenticate to join the conversation.

Upvoters
Status

Planned

Board
🏠

Main App

Date

1 day ago

Author

Linear

Subscribe to post

Get notified by email when there are changes.