diff --git a/HANDOFF.md b/HANDOFF.md index 52e1e73..d79d9ee 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -8,6 +8,12 @@ Latest verified commit: `f090ba7` This codebase has recent updates around auth/onboarding, help/privacy pages, dashboard search, product creation/edit/review/detail, admin review/detail, stock/price editing, seller in-review listing, backend request logging, expired-session redirects, product keyword limits, sanitized backend error display, AddProductRequest validation, and 10 MB upload limits. +Latest local verification before the newest push: + +```bash +npm run build +``` + The latest build was verified successfully with: ```bash @@ -20,6 +26,60 @@ Latest TypeScript verification after the validation/upload changes: npx tsc --noEmit ``` +## Latest Codex Changes After `2cfff02` + +### Product edit image payload preservation + +File: +- `src/app/(dashboard)/products/[productId]/edit/page.tsx` + +Behavior: +- Edit-product save keeps `imageId` as the main image field. +- If the main image already exists inside `productImages`, the save payload preserves it at the same sequence. +- If the main image is replaced, the old main image entry inside `productImages` is replaced with the new `imageId` at the same sequence. +- The edit gallery UI hides duplicate thumbnails where `form.imageId` is also present in `form.productImages`, but the underlying array is preserved for payload sequence. + +Expected image payload shape: + +```json +{ + "imageId": "imageBaru.jpg", + "productImages": [ + { "imageId": "gallery-0.jpg", "sequence": 1 }, + { "imageId": "imageBaru.jpg", "sequence": 2 }, + { "imageId": "gallery-2.jpg", "sequence": 3 } + ] +} +``` + +### Product detail image gallery + +Files: +- `src/app/(dashboard)/products/[productId]/detail/page.tsx` +- `src/components/product-variant-showcase.tsx` +- `src/lib/product-variants.ts` + +Behavior: +- Product detail image thumbnails are deduplicated between root `imageId` and `productImages`. +- Thumbnail strip is horizontally scrollable when there are many images. +- Clicking a thumbnail updates the large preview image. +- The active thumbnail receives a visible selected state. + +### Product submenu click lock fix + +Files: +- `src/app/(dashboard)/layout.tsx` +- `src/app/(dashboard)/products/page.tsx` +- `src/components/product-submenu-nav.tsx` + +Behavior: +- Product submenu items now use Next `` instead of manual `button` + `router.push`. +- `All Product` now navigates to `/products?tab=all`, matching the query-based pattern used by the other submenu tabs. +- Product API already normalizes `tab=all` to the all-product backend endpoint. +- Sidebar z-index was raised above product modals so submenu clicks are not blocked by stale overlays. +- Product list clears action-menu and modal state when tab/page changes. +- Delete/unpublish/stock-price-load errors now close the related modal after showing the error, preventing a full-screen overlay from trapping sidebar clicks. + ## Latest Codex Changes After `76fb4f3` ### Product create preorder and warranty submit rules @@ -602,13 +662,13 @@ pm2 save sudo -iu inadev pm2 status ``` -Current expected deployed commit after latest push: +Current expected deployed commit after latest push is the latest `origin/main` commit from this handoff update. Verify short hash with: ```bash -2f64282 +git rev-parse --short HEAD ``` -Verify on server: +Verify full commit on server: ```bash git rev-parse HEAD diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx index d50864d..e9ca629 100644 --- a/src/app/(dashboard)/layout.tsx +++ b/src/app/(dashboard)/layout.tsx @@ -118,7 +118,7 @@ export default function DashboardLayout({ {/* Sidebar */} -