Skip to content

feat(network-orders): orders grouped by checkout with status tabs, store stacks and next actions - #125

Closed
roncodes wants to merge 13 commits into
release/v0.4.25from
feat/network-orders
Closed

roncodes wants to merge 13 commits into
release/v0.4.25from
feat/network-orders

Conversation

@roncodes

Copy link
Copy Markdown
Member

Summary

Network orders from design board 3d: everything placed through the marketplace app, grouped by checkout. Stacked on #124; review the top commit.

  • A multi-store checkout (meta.checkout_id, falling back to meta.master_order_id) is one expandable row: checkout id with order and item counts, customer, a stack of store pills (up to four, then "+N"), fulfillment, group total with the tip and how it splits, the shared driver (or "N drivers" / "Unassigned"), and the least-advanced child's status as "1 of 3 preparing". Expanding shows each store's order with the same cells. A checkout with one order stays a plain order row.
  • Status tabs (All, Needs action, Preparing, Ready for pickup, Out for delivery, Completed, Canceled) set the status query param with the statuses they cover; a Grouped / Flat toggle (view query param) falls back to the plain table.
  • Order rows promote the next workflow action (Accept, Mark ready, …) from storefront-order-actions to a button and keep the rest (assign driver, cancel, view, delete) behind an ellipsis; delivery orders without a driver get an inline Assign driver button.
  • Index\Order resource now keeps meta.checkout_id so the console can group.
  • Utilities: utils/order-groups (status rank, tabs, groupOrdersByCheckout), width-style-px helper for the expanded columns.

Not here: ember-ui table/cell/identity-stack extraction (the stores cell is Storefront-local for now), tabs driven by a custom order config's activity flow, "Contact store" for offline stores.

Related Issue

Storefront UX overhaul, design canvas board 3d.

Type of Change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Test
  • Chore

Implementation Notes

Grouping is client-side over the page the server returns, using ember-ui Table's @canExpand block form with the yielded expanded-row. Store pills resolve through the store descriptor registered in #124; stores are loaded once per network in the route for the lookup.

Validation

  • Tests — not run locally per the maintainer's request.
  • Lint — not run locally (CI).
  • Build — not run locally (CI).
  • Manual validation — maintainer.

Documentation Impact

  • No documentation changes needed
  • Documentation updated in fleetbase/fleetbase.io
  • Documentation needed but not included

API Reference Impact

  • No API reference changes needed
  • Updated fleetbase/postman
  • API reference updates required but not included

API reference notes: checkout_id is now included in the internal order index meta; the public v1 index resource extends it, so public consumers also see meta.checkout_id (additive).

Documentation Notes

docs/storefront → networks → orders: grouping by checkout, status tabs. needs-docs for the series.

Risk

The network orders page no longer offers the column filters of the previous table in grouped view (flat view keeps the registered columns). Grouping is per page, so a checkout whose orders span two pages shows as two partial groups.

Screenshots / Recordings

Design canvas board 3d: https://claude.ai/artifact/771ptEFmi4BLmYHBZuUhWF

The dummy app never ran: ember-classic-decorator (unused) crashes on Ember 5,
lazy loading kept the engine's modules out of the test bundle, and the host
services, config and intl data the panels need were missing. Mirrors what
fleetops already does: eager loading when `ember test` runs from this package,
an inert stand-in for the console's extensions module, the API config the
core adapter reads at module scope, and the legacy built-in components the
engine's templates still use.

The dummy intl service ignores missing locale data, since headless Chrome has
no number formats for every bundled locale, and the order details and network
controller tests stub the host router, fetch and app cache the way the widget
tests already do.
…rce card

Catalog, truck and network index pages use Layout::Resource::CardsGrid with
one card each on Layout::Resource::Card, following the Fleet-Ops anatomy:
identity and subtitle in the header, media or facts in the body, status,
icon actions and meta in the footer, with registry slots at each end.

A catalog card shows its categories with product counts, its hours as a
seven-day strip (the new Storefront::HoursStrip) and its product total; a
draft is dashed. A truck card is a Vehicle::Pill with the online dot, the
vehicle photo, where it serves, and a presence badge that says serving,
offline, inactive, or online with no catalog. A network card shows the logo on
its backdrop, the online state, the currency and member count.

"Food trucks" reads "Trucks" in the UI; the food-truck model, routes and
permissions keep their names. The catalogs and trucks pages gain the search
the header already offered.
@roncodes roncodes added needs-docs Requires documentation updates needs-human-review Requires human review before proceeding type:feature Feature or enhancement labels Oct 10, 2026
@roncodes
roncodes force-pushed the feat/network-orders branch 2 times, most recently from 6ad4f09 to 5aa98b5 Compare October 10, 2026 08:16
… and crashed createRecord; the store summary is store_summary
…s own sidebar for each

- storefront service tracks a network context derived from the network route
- StoreSelector becomes the context switcher with a Networks group and create-network
- application route loads networks; sidebar rewrites for the network context
- network page is a full page with an identity strip; the list hides while one is open
- new Trucks section for a network backed by FoodTruckFilter::network
- network orders and customers are scoped to the network being viewed, not the active store
- createNewNetwork lives on the storefront service
…enu without Networks

- trigger: context icon, name, STORE/NETWORK label and caret; blue for a store, indigo for a network; invitation badge
- menu: Stores and Networks groups with tiles, currency or member count, a check on the active one, readable in dark mode; footer actions read New store / New network
- store navigation follows the design order (Dashboard, Orders, Products, Catalogs, Customers, Trucks, Promotions, Settings); networks live in the switcher, not the menu
- network page loses the All networks button; leaving a network is the switcher's job
@roncodes
roncodes force-pushed the feat/network-orders branch from 5aa98b5 to 8d0fce0 Compare October 10, 2026 09:30
…e sidebar re-renders on a switch; networks report their store count
…d an invite panel

- network index is now an Overview (stat tiles, members with 7-day share, invitations, recent orders); settings move to networks.index.network.settings
- NetworkController gains overview, invitations, resend and revoke; one Invite per recipient carrying category, expiry, message and approval in meta
- OrderFilter/CustomerFilter gain a network filter on meta.storefront_network_id; the network orders and customers routes use it
- Storefront::Network::InvitePanel (by email, shareable link, add a store you manage) replaces the share-network and add-stores modals
- stores page: store identity column via a new store descriptor, All/Online/Offline/Invited tabs, bulk assign category and remove, invitation rows with resend/revoke/invite again
- store and network resource descriptors registered with the shared identity registry; SelectOption::Store wrapper; width-style helper
…ost re-export broke console boot before the lazy engine loaded
…ore stacks and next actions

- a multi-store checkout is one expandable row (customer, stores, fulfillment, total with tip split, shared driver, least-advanced status) that opens into each store's order
- status tabs (needs action, preparing, ready for pickup, out for delivery, completed, canceled) drive the status query param; grouped/flat toggle
- new cells: reference, stores (identity stack of store pills), fulfillment, total, driver (inline assign), status, placed, actions (next action promoted, rest behind an ellipsis)
- order index resource keeps meta.checkout_id so the console can group
…lide with the networks list's page, sort and query
@roncodes
roncodes force-pushed the feat/network-orders branch from 8d0fce0 to bde3613 Compare October 10, 2026 10:19
@roncodes

Copy link
Copy Markdown
Member Author

Superseded by the single overhaul PR (one branch, one PR targeting release/v0.4.25, per maintainer request).

@roncodes roncodes closed this Oct 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-docs Requires documentation updates needs-human-review Requires human review before proceeding type:feature Feature or enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant