From a10519ab9d5a9bdb39c86093946003638972c580 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Sat, 15 Aug 2026 16:26:12 +0700 Subject: [PATCH] feat: enhance Restock feature by adding photo URLs to Restock model and displaying images in RestockCard --- app/Services/Admin/Manage/RestockService.php | 10 ++++++++++ resources/js/pages/admin/manage/restock/columns.tsx | 2 ++ .../js/pages/admin/manage/restock/restock-card.tsx | 13 +++++++++++++ 3 files changed, 25 insertions(+) diff --git a/app/Services/Admin/Manage/RestockService.php b/app/Services/Admin/Manage/RestockService.php index a019c14..ac65c36 100644 --- a/app/Services/Admin/Manage/RestockService.php +++ b/app/Services/Admin/Manage/RestockService.php @@ -46,6 +46,16 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = ->orderBy($sort, $direction) ->paginate($perPage); + $paginator->getCollection()->each(function (Restock $restock) { + $restockMedia = $restock->getMedia('photos'); + $restock->photo_urls = $restockMedia->map( + fn ($media) => $this->s3Service->getTemporaryUrl($media->getPath()) + )->toArray(); + $restock->photo_conversion_urls = $restockMedia->map( + fn ($media) => $this->s3Service->getTemporaryUrl($media->getPath('thumb')) + )->toArray(); + }); + return $paginator; } diff --git a/resources/js/pages/admin/manage/restock/columns.tsx b/resources/js/pages/admin/manage/restock/columns.tsx index 35927cc..4c6e473 100644 --- a/resources/js/pages/admin/manage/restock/columns.tsx +++ b/resources/js/pages/admin/manage/restock/columns.tsx @@ -28,6 +28,8 @@ export type Restock = { items_count: number; total_qty: number; product_names: string | null; + photo_urls: string[]; + photo_conversion_urls: string[]; created_by: { id: number; user_profile: { diff --git a/resources/js/pages/admin/manage/restock/restock-card.tsx b/resources/js/pages/admin/manage/restock/restock-card.tsx index 53e6b83..1cccb30 100644 --- a/resources/js/pages/admin/manage/restock/restock-card.tsx +++ b/resources/js/pages/admin/manage/restock/restock-card.tsx @@ -1,4 +1,5 @@ import { ChevronDown, Pencil, Trash2 } from 'lucide-react'; +import { ImagePreviewButton } from '@/components/dialogs'; import { RowActions } from '@/components/data-display'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -118,6 +119,18 @@ export function RestockCardRow({ {formatCurrency(restock.total)} + + {restock.photo_urls && restock.photo_urls.length > 0 && ( +
+ 0 ? productNames.join(', ') : 'Restock'} + description={formatDateTime(restock.created_at)} + className="h-16 w-16" + /> +
+ )} {(can('restocks.update') || can('restocks.delete')) && (