Description
useInvoiceForm manages both invoice metadata (title, dates, currency, recipients) and line-item state in a single hook, making it over 300 lines and hard to maintain. Splitting it into useLineItems (item CRUD, totals, reordering) and useInvoiceMeta (top-level fields, validation) improves cohesion and testability.
Acceptance Criteria
Context
- Target file:
src/hooks/useInvoiceForm.ts
Description
useInvoiceFormmanages both invoice metadata (title, dates, currency, recipients) and line-item state in a single hook, making it over 300 lines and hard to maintain. Splitting it intouseLineItems(item CRUD, totals, reordering) anduseInvoiceMeta(top-level fields, validation) improves cohesion and testability.Acceptance Criteria
src/hooks/useLineItems.tscontains all line-item state and handlerssrc/hooks/useInvoiceMeta.tscontains all invoice-level metadata state and validationuseInvoiceFormis updated to compose the two sub-hooks and re-export a unified API so callers require no changesuseInvoiceFormneeds to be modifiedContext
src/hooks/useInvoiceForm.ts