Description
Performing the same action (archive, tag, delete) on multiple invoices requires repeating the action individually for each one, which is slow for users managing dozens of invoices. A multi-select mode with a contextual bulk-action toolbar should allow operating on several invoices at once.
Technical Context
src/components/invoice/InvoiceList.tsx adds a checkbox to each card or row when multi-select mode is active. A src/hooks/useInvoiceSelection.ts hook maintains a Set<string> of selected IDs. src/components/invoice/BulkActionToolbar.tsx (new) renders a sticky bottom bar with "Archive", "Tag", and "Delete" actions when one or more invoices are selected. Actions call batch API endpoints: src/app/api/invoices/bulk/route.ts (new).
Acceptance Criteria
Description
Performing the same action (archive, tag, delete) on multiple invoices requires repeating the action individually for each one, which is slow for users managing dozens of invoices. A multi-select mode with a contextual bulk-action toolbar should allow operating on several invoices at once.
Technical Context
src/components/invoice/InvoiceList.tsxadds a checkbox to each card or row when multi-select mode is active. Asrc/hooks/useInvoiceSelection.tshook maintains aSet<string>of selected IDs.src/components/invoice/BulkActionToolbar.tsx(new) renders a sticky bottom bar with "Archive", "Tag", and "Delete" actions when one or more invoices are selected. Actions call batch API endpoints:src/app/api/invoices/bulk/route.ts(new).Acceptance Criteria