toga-ai 1.0.365 → 1.0.366
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
| Doc | Summary | Files |
|
|
4
4
|
|-----|---------|-------|
|
|
5
5
|
| [TOGa Supply (toga2-supply) Architecture](architecture.md) | `toga2-supply` is the **React + Vite frontend** for TOGa Supply — warehouse fulfillment tooling (shipment selection, fulfill & ship against carrier APIs, NetSui | toga2-supply/src/api/toga.ts, toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx |
|
|
6
|
-
| [Fulfill & Ship](features/fulfill-and-ship.md) | Fulfill & Ship lets a warehouse user select sales-order line items, enter serials, pick a carrier/method, and in one action: create the Item Fulfillment records | toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx, toga2-supply/src/pages/EditShipment/view/components/SelectedShipmentItemsTable.tsx, toga2-supply/src/pages/EditShipment/view/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/src/pages/EditShipment/viewModel/FIELDS/DUMMYUPDATESHIPMENTFIELDS.json, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/tailwind.config.cjs, toga2-supply/src/pages/EditShipment/view/modals/ReturnShippingModal.tsx, toga2-supply/src/styles/index.scss, toga2-supply/src/components/ui/BaseInput/BaseInput.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/EditShipment/viewModel/signatureTypes.ts, toga2-supply/src/pages/EditShipment/view/modals/SelectReturnAddressModal.tsx, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/formatShipmentData.ts, toga2-supply/src/pages/EditShipment/types.ts, toga2-supply/src/pages/Shipments/view/ShipmentsPage.tsx, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx, toga2-supply/src/pages/Shipments/api/ShipmentsApi.ts, toga2-supply/src/pages/Shipments/types.ts, toga2-supply/src/pages/FulfilledShipments/view/FulfilledShipmentsPage.tsx, toga2-supply/src/components/ui/CardTable/CardTable.tsx, toga2-supply/src/components/ui/CardTable/types.ts, toga2-supply/src/assets/pen-line.svg, _underscore/Model/Client/ItemFulfillment.php, _underscore/Trait/Netsuite/ItemFulfillment.php, _underscore/Component/Library/Carriers/Ups/Ups.php |
|
|
6
|
+
| [Fulfill & Ship](features/fulfill-and-ship.md) | Fulfill & Ship lets a warehouse user select sales-order line items, enter serials, pick a carrier/method, and in one action: create the Item Fulfillment records | toga2-supply/src/components/ui/BaseInput/UnitSelect.tsx, toga2-supply/src/pages/EditShipment/view/modals/SerialNumbersModal.tsx, toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx, toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx, toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx, toga2-supply/src/pages/EditShipment/view/components/SelectedShipmentItemsTable.tsx, toga2-supply/src/pages/EditShipment/view/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/src/pages/EditShipment/viewModel/FIELDS/DUMMYUPDATESHIPMENTFIELDS.json, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/renderEditShipmentFormInput.tsx, toga2-supply/tailwind.config.cjs, toga2-supply/src/pages/EditShipment/view/modals/ReturnShippingModal.tsx, toga2-supply/src/styles/index.scss, toga2-supply/src/components/ui/BaseInput/BaseInput.tsx, toga2-supply/src/pages/EditShipment/api/UpdateShipmentApi.ts, toga2-supply/src/pages/EditShipment/viewModel/signatureTypes.ts, toga2-supply/src/pages/EditShipment/view/modals/SelectReturnAddressModal.tsx, toga2-supply/src/pages/EditShipment/helpers/ShipmentDetailsForm/formatShipmentData.ts, toga2-supply/src/pages/EditShipment/types.ts, toga2-supply/src/pages/Shipments/view/ShipmentsPage.tsx, toga2-supply/src/pages/Shipments/view/components/ShipmentsCardTableForm/ShipmentsCardTableForm.tsx, toga2-supply/src/pages/Shipments/api/ShipmentsApi.ts, toga2-supply/src/pages/Shipments/types.ts, toga2-supply/src/pages/FulfilledShipments/view/FulfilledShipmentsPage.tsx, toga2-supply/src/components/ui/CardTable/CardTable.tsx, toga2-supply/src/components/ui/CardTable/types.ts, toga2-supply/src/assets/pen-line.svg, _underscore/Model/Client/ItemFulfillment.php, _underscore/Trait/Netsuite/ItemFulfillment.php, _underscore/Component/Library/Carriers/Ups/Ups.php |
|
|
7
7
|
| [AWS Amplify Build & Deploy (non-prod environments)](workflows/amplify-build-and-deploy.md) | How `toga2-supply` (React + Vite) builds and deploys on **AWS Amplify**. | toga2-supply/amplify.yml, toga2-supply/.gitattributes, toga2-supply/.github/workflows/sync-stage-environments.yml, toga2-supply/.env.qc-security |
|
|
@@ -6,9 +6,11 @@ project: TOGa Supply
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-07-
|
|
9
|
+
updated: 2026-07-17
|
|
10
10
|
owners: [mhammontree]
|
|
11
11
|
files:
|
|
12
|
+
- toga2-supply/src/components/ui/BaseInput/UnitSelect.tsx
|
|
13
|
+
- toga2-supply/src/pages/EditShipment/view/modals/SerialNumbersModal.tsx
|
|
12
14
|
- toga2-supply/src/pages/ShipmentItems/view/ShipmentItemsPage.tsx
|
|
13
15
|
- toga2-supply/src/pages/EditShipment/view/EditShipmentPage.tsx
|
|
14
16
|
- toga2-supply/src/pages/EditShipment/view/components/forms/EditShipmentForm.tsx
|
|
@@ -135,8 +137,11 @@ bare string** — see the gotcha below before wiring a new select field.
|
|
|
135
137
|
|
|
136
138
|
- **Renderer extension points (how to add a non-BaseInput control).** `renderEditShipmentFormInput.tsx`
|
|
137
139
|
special-cases fields by boolean flags on the JSON field object (existing: `isClearAll`, `isReadOnly`;
|
|
138
|
-
added `isUnitSelector` =
|
|
139
|
-
not persisted).
|
|
140
|
+
added `isUnitSelector` = the in./cm unit selector, mirroring the Return Shipping modal — visual-only,
|
|
141
|
+
not persisted). The `isUnitSelector` branch now renders the shared **`UnitSelect`** component
|
|
142
|
+
(`src/components/ui/BaseInput/UnitSelect.tsx`) — a react-select styled to match the compact
|
|
143
|
+
`BaseInput` dropdowns (white menu, checkmark, FA chevron) — instead of a native `<select>`, so its
|
|
144
|
+
menu matches the other dropdowns; `ReturnShippingModal` uses the same component. **Reuse pattern for any custom control: add a flag to the JSON field + a branch in the
|
|
140
145
|
renderer** rather than forcing it through `BaseInput`. A per-section `sectionTitleContainerClasses` is
|
|
141
146
|
also read by `EditShipmentForm.tsx`'s shared section-title wrapper (default unchanged) so a section can
|
|
142
147
|
e.g. right-align its title (used to right-align the Item Count column's title + value to a shared edge).
|
|
@@ -281,6 +286,38 @@ the call 403s and returns no label.
|
|
|
281
286
|
|
|
282
287
|
## Gotchas / known issues
|
|
283
288
|
|
|
289
|
+
- **⚠ A portaled react-select menu loses the control's inherited font size.** `BaseInput`'s
|
|
290
|
+
react-select menus now portal to `<body>` (`menuPortalTarget={document.body}` +
|
|
291
|
+
`styles.menuPortal` `zIndex 9999`, on both single- and multi-select) so the menu can't be
|
|
292
|
+
painted over by a sibling scroll box / stacking context (the symptom was the device-list
|
|
293
|
+
table clipping the dropdown). **Side effect:** once portaled, the menu is a child of `<body>`,
|
|
294
|
+
not the control, so it no longer inherits the control's font size and jumps to the browser
|
|
295
|
+
default (~16px). Fix: pin it back with `text-sm` on the react-select `menu` `classNames`.
|
|
296
|
+
Whenever you portal a react-select menu, re-assert font size on the menu.
|
|
297
|
+
(`src/components/ui/BaseInput/BaseInput.tsx`.)
|
|
298
|
+
- **⚠ Sticky table headers need a z-index ABOVE `BaseToolTip`'s `z-[9999]`.** `BasicTable` gained
|
|
299
|
+
a `stickyHeaderZ` prop (default `z-10`). `BaseToolTip` wraps its children in a `z-[9999]`
|
|
300
|
+
layer, so a tooltip-wrapped cell (e.g. a trash/delete column) shows THROUGH a sticky header
|
|
301
|
+
while scrolling unless the header's z beats it. **But you can't just crank it globally:** an
|
|
302
|
+
in-page table's header must stay `z-10` so it can never paint above a modal; a table that lives
|
|
303
|
+
*inside* a modal can safely use a very high z (`z-[10000]`) because it's already inside the
|
|
304
|
+
modal's stacking context. Pick the z per table location, not one global value.
|
|
305
|
+
- **⚠ Config-driven fixed-width form labels silently misalign when a label exceeds its width.**
|
|
306
|
+
Right-aligned label columns sized `w-[Npx] shrink-0` rely on every label fitting in `N`px —
|
|
307
|
+
flexbox `min-width:auto` will grow just the labels whose text is longer than `N` and shove
|
|
308
|
+
*their* inputs to the right, so only some rows misalign. Two rules: (1) size the label column to
|
|
309
|
+
the LONGEST label; (2) keep the label→input spacing identical on EVERY row — a stray double
|
|
310
|
+
space (`"items-center pb-3"`) made one row miss a bulk `gap-2` sweep and sit 8px off. Concrete
|
|
311
|
+
fix: the Update Info address block was matched to the Edit Return Label block (labels `w-[70px]`,
|
|
312
|
+
ZIP `w-[36px]`, `flex items-center gap-2`), address column widened `col5 w-80`→`w-96`, and a
|
|
313
|
+
ZIP-favoring grid split `grid-cols-[1fr_1fr_1fr_1.25fr_1.25fr]` so a full ZIP+4 fits.
|
|
314
|
+
- **Fixed-height modals overflow short viewports — size to the viewport, not to px.** The Add
|
|
315
|
+
Serial Numbers modal was `h-[822px]` and overflowed short screens. Reusable pattern that fixed
|
|
316
|
+
it: modal `max-h-[90vh] overflow-y-auto`, the inner scrolling list sized to the viewport
|
|
317
|
+
(`max-h-[40vh]`) rather than fixed px, drop the fixed `h-[90%]`/`h-[822px]` wrapper, and give the
|
|
318
|
+
in-modal sticky header a z above tooltips (see the `stickyHeaderZ` gotcha — modal tables can use
|
|
319
|
+
`z-[10000]`). Files: `src/pages/EditShipment/view/modals/SerialNumbersModal.tsx`,
|
|
320
|
+
`SelectedShipmentItemsTable.tsx`.
|
|
284
321
|
- **⚠ Native `<datalist>` renders its OWN dropdown arrow, un-hideable by Tailwind.** An
|
|
285
322
|
`<input list>` combobox (the Edit Return Label Addressee) shows a **second dark arrow** (the
|
|
286
323
|
webkit calendar-picker indicator) that a Tailwind arbitrary variant can't reliably hide. Kill it
|
|
@@ -497,6 +534,23 @@ not the base `_Model_Client_ItemFulfillment`. Tested with GroWrk; UPS support wa
|
|
|
497
534
|
for Compass and is not yet in prod.
|
|
498
535
|
|
|
499
536
|
## Change history
|
|
537
|
+
- 2026-07-17 — TRUE-79191 (David design-review pass, toga2-supply UI): documented four durable,
|
|
538
|
+
app-wide component gotchas — (1) **`BaseInput` react-select menus now portal to `<body>`**
|
|
539
|
+
(`menuPortalTarget` + `menuPortal zIndex 9999`) so a sibling scroll box can't clip them, and the
|
|
540
|
+
side effect that a portaled menu loses the control's font size (re-pin with `text-sm` on the `menu`
|
|
541
|
+
classNames); (2) **`BasicTable` gained `stickyHeaderZ`** (default `z-10`) because sticky headers
|
|
542
|
+
must beat `BaseToolTip`'s `z-[9999]` to stop tooltip-wrapped cells showing through — but in-page
|
|
543
|
+
tables must stay `z-10` (never above a modal) while in-modal tables can use `z-[10000]`; (3) the
|
|
544
|
+
**fixed-width form-label misalignment** footgun (size the column to the longest label + keep
|
|
545
|
+
identical label→input spacing on every row); and (4) the **fixed-height-modal overflow** pattern
|
|
546
|
+
(modal `max-h-[90vh] overflow-y-auto` + inner list `max-h-[40vh]`, drop fixed px) via the Add Serial
|
|
547
|
+
Numbers modal. Also: new shared **`UnitSelect`** component (react-select styled to match the compact
|
|
548
|
+
dropdowns) replaced the native in./cm `<select>` in the renderer's `isUnitSelector` branch and in
|
|
549
|
+
`ReturnShippingModal`; `SupplyFormGuardrail` now renders a dimmed click-to-cancel backdrop
|
|
550
|
+
(`fixed inset-0 z-[9920] bg-black/40`) so it reads as a lightbox; and the Update Info address block
|
|
551
|
+
was aligned to the Edit Return Label block (labels `w-[70px]`/ZIP `w-[36px]`, address col `w-96`,
|
|
552
|
+
ZIP-favoring 5-col grid). The return-validation spinner (left of the modal's Cancel while validating)
|
|
553
|
+
and the Select Return Address Figma tuning were cosmetic — no separate doc change. (mhammontree)
|
|
500
554
|
- 2026-07-17 — TRUE-79191: replaced the boolean `requiresSignature` with a **4-level `signatureType`
|
|
501
555
|
enum** (None Specified / Indirect / Direct / Adult) — `viewModel/signatureTypes.ts` is the single
|
|
502
556
|
source of truth (options, `signatureCardLabel`, `requiresSignatureFromLevel` back-compat,
|
package/package.json
CHANGED