You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Frontend half of two Client-Detail follow-ups, plus the StatusLine doc refresh. Quotation step -> document link: - Milestone gains documentId; setMilestone threads an optional trailing documentId (contract: doneOn, paymentId, documentId). - Ticking `quotation_sent` on the status line now opens DocumentPickerDialog instead of stamping a bare date. It mirrors PaymentPickerDialog exactly — same state shape in ClientDetail, same Dialog props — and lists the client's QUOTATION/PROFORMA documents straight from the already-loaded ledger (no extra fetch), with "Create new document…" handing off to the composer. Ticket classification: - Ticket gains `type`; getTicketTypes() reads the `ticket.types` setting (config over code) with a code fallback only for the load window. - New-ticket dialog gets a Type select; Tickets page gets Type filter chips wired to the ?type= list param and a Type column. - Every ticket's module cell deep-links to /clients/<id>?tab=modules, and each Client 360 module block gets "Raise ticket for this module", which opens the new-ticket dialog pre-filled with that client + module code. Also refreshes the now-stale StatusLine JSDoc so it describes all three hand-off dialogs — payment, credentials (account_creation) and document. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
1 day ago | |
|---|---|---|
| .. | ||
| public | 4 days ago | |
| src | 1 day ago | |
| test | 3 days ago | |
| index.html | 4 days ago | |
| package.json | 3 days ago | |
| tsconfig.json | 2 weeks ago | |
| vite.config.ts | 5 days ago | |