feat(favorites): full-width pages for expenses, income, payments, equipment, vendors and teams; drawer expand icons
What and why
Handover §4.P, third PR. Owner, verbatim: "Each favorite opens its record's full view … entities without a full view page need one (same rule as tasks/docs)" and "Add a tiny "expand to full width" icon to the task sidebar and every similar right-side preview panel: it opens the record as that full-width page with its own URL — bookmarkable and shareable".
Stacked on #10590 (which is stacked on #10589); base = #10590's branch, so this diff shows only this PR. Merge #10589 → #10590 → this.
ngx-record-view-route-page(ui-core/shared): a routed full-width record page driven by the route'sdata.recordView(load(id, injector),sections,subtitle,favorite), on thengx-record-view-pageframe from #10589 (back link, star, not-found / forbidden / error states). A feature states its service call and its sections; the page, its states and its URL come for free.- New
view/:idpages, each guarded by its list's own view permission: expenses (/pages/accounting/expenses/view/:id,ORG_EXPENSES_VIEW), income (…/income/view/:id,ORG_INCOMES_VIEW), payments (…/payments/view/:id,ORG_PAYMENT_VIEW), equipment (/pages/organization/equipment/view/:id), vendors (…/vendors/view/:id) and teams (…/teams/view/:id). Expense and income pages share their section builders with the list drawers (moved out of the components), so a record reads the same in both. - Favorites of these types now open their page (a favorited vendor or team opened a list; before #10589 a vendor opened "not found").
- Expand icons on the expense and income drawers (to the new pages) and on the users, organizations and job-employee drawers (to the full pages those records already have: user edit, organization edit, employee view).
Still to come (next PR): full pages + expand icons for the drawer-only records without any page today — approval requests, recurring expenses (organization and employee), goal KPIs and time frames, inventory merchants, proposal templates, Zapier actions/triggers.
Red → green
apps/gauzy favorite-links.routes.spec.ts with the new links but without the new routes:
Tests: 6 failed, 35 passed, 41 total
● Equipment → /pages/organization/equipment/view/<id>
● Expense → /pages/accounting/expenses/view/<id>
● Income → /pages/accounting/income/view/<id>
● OrganizationTeam → /pages/organization/teams/view/<id>
● OrganizationVendor → /pages/organization/vendors/view/<id>
● Payment → /pages/accounting/payments/view/<id>
Green: favorite-links.routes.spec.ts 41/41 (each link resolved against the real router config, lazy modules loaded); packages/ui-core record-view-route-page.component.spec.ts (loads through the route config, reuse across ids, not-found / forbidden / error, star) + entities-mapping.spec.ts + record-view specs 56/56; task-view-page.component.spec.ts.
Builds / checks
gauzyweb app built with this branch (AOT,dist/apps/gauzy-prc); cspell + prettier on the changed files.- Browser check on the fresh-DB local instance: see the comment below.
🤖 Generated with Claude Code
Summary by cubic
Favorited records and right-side preview drawers now open a full-width view page at its own URL instead of the list, for expenses, income, payments, equipment, vendors, teams, approval requests, recurring expenses, goal KPIs and time frames, inventory merchants, and proposal templates; the pages are bookmarkable and shareable, and the drawers get an expand-to-full-width icon linking to them.
Details
ngx-record-view-route-pagerenders a record from the route'sdata.recordViewwith not-found, forbidden, and error states; pages use the header's organization, reload when it is switched, discard a load a newer switch overtook, and read another organization's record as not found.- Each type gets a
view/:idroute guarded by its list's view permission, and loaders answer the record the URL names rather than whatever a list read returns; a new load clears the previous record from the header. - Drawers share their section builders with the pages so a record reads the same in both; expand icons appear only where the viewer can open the linked page (
ORG_USERS_EDIT,ALL_ORG_EDIT,ORG_EMPLOYEES_VIEW). - Zapier actions/triggers keep the drawer only, since they are catalog entries fetched from Zapier rather than records.