diff --git a/app/Services/Admin/Finance/Cash/CashTransactionService.php b/app/Services/Admin/Finance/Cash/CashTransactionService.php index 34425f9..a757761 100644 --- a/app/Services/Admin/Finance/Cash/CashTransactionService.php +++ b/app/Services/Admin/Finance/Cash/CashTransactionService.php @@ -193,6 +193,7 @@ private function formatTransaction(CashTransaction $transaction): array return $transaction->toArray() + [ 'receipt_key' => null, 'receipt_url' => null, + 'receipt_conversion_url' => null, ]; } @@ -201,6 +202,7 @@ private function formatTransaction(CashTransaction $transaction): array return $transaction->toArray() + [ 'receipt_key' => $s3Key, 'receipt_url' => $this->s3Service->getTemporaryUrl($s3Key), + 'receipt_conversion_url' => $this->s3Service->getTemporaryUrl($media->getPath('thumb')), ]; } } diff --git a/app/Services/Admin/Finance/ExpenseService.php b/app/Services/Admin/Finance/ExpenseService.php index cf81d02..e35db0b 100644 --- a/app/Services/Admin/Finance/ExpenseService.php +++ b/app/Services/Admin/Finance/ExpenseService.php @@ -155,6 +155,7 @@ private function formatExpense(Expense $expense): array return $expense->toArray() + [ 'receipt_key' => null, 'receipt_url' => null, + 'receipt_conversion_url' => null, ]; } @@ -165,9 +166,15 @@ private function formatExpense(Expense $expense): array return $this->s3Service->getTemporaryUrl($s3Key); }); + $conversionCacheKey = "expense_receipt_conversion_{$media->id}"; + $receiptConversionUrl = Cache::remember($conversionCacheKey, now()->addMinutes(55), function () use ($media) { + return $this->s3Service->getTemporaryUrl($media->getPath('thumb')); + }); + return $expense->toArray() + [ 'receipt_key' => $s3Key, 'receipt_url' => $receiptUrl, + 'receipt_conversion_url' => $receiptConversionUrl, ]; } } diff --git a/app/Services/Admin/Manage/CuttingService.php b/app/Services/Admin/Manage/CuttingService.php index 41ba3ab..a9869b5 100644 --- a/app/Services/Admin/Manage/CuttingService.php +++ b/app/Services/Admin/Manage/CuttingService.php @@ -46,6 +46,9 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $cutting->photo_url = $cuttingMedia ? $this->s3Service->getTemporaryUrl($cuttingMedia->getPath()) : null; + $cutting->photo_conversion_url = $cuttingMedia + ? $this->s3Service->getTemporaryUrl($cuttingMedia->getPath('thumb')) + : null; $cutting->cuttingMaterials->each(function (CuttingMaterial $material) { $media = $material->rawMaterialPrice?->getFirstMedia('images'); @@ -53,6 +56,9 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $material->rawMaterialPrice->photo_url = $media ? $this->s3Service->getTemporaryUrl($media->getPath()) : null; + $material->rawMaterialPrice->photo_conversion_url = $media + ? $this->s3Service->getTemporaryUrl($media->getPath('thumb')) + : null; } }); }); diff --git a/app/Services/Admin/Manage/PurchaseService.php b/app/Services/Admin/Manage/PurchaseService.php index 0705100..ed3cdfc 100644 --- a/app/Services/Admin/Manage/PurchaseService.php +++ b/app/Services/Admin/Manage/PurchaseService.php @@ -49,15 +49,21 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $purchase->photo_url = $purchaseMedia ? $this->s3Service->getTemporaryUrl($purchaseMedia->getPath()) : null; + $purchase->photo_conversion_url = $purchaseMedia + ? $this->s3Service->getTemporaryUrl($purchaseMedia->getPath('thumb')) + : null; $purchase->purchaseItems->each(function (PurchaseItem $item) { if (! $item->rawMaterialPrice) { return; } - $media = $item->rawMaterialPrice->getMedia('images'); - $item->rawMaterialPrice->photo_url = $media->first() - ? $this->s3Service->getTemporaryUrl($media->first()->getPath()) + $media = $item->rawMaterialPrice->getFirstMedia('images'); + $item->rawMaterialPrice->photo_url = $media + ? $this->s3Service->getTemporaryUrl($media->getPath()) + : null; + $item->rawMaterialPrice->photo_conversion_url = $media + ? $this->s3Service->getTemporaryUrl($media->getPath('thumb')) : null; }); }); diff --git a/app/Services/Admin/Manage/RestockService.php b/app/Services/Admin/Manage/RestockService.php index 8d090c5..18e9fb2 100644 --- a/app/Services/Admin/Manage/RestockService.php +++ b/app/Services/Admin/Manage/RestockService.php @@ -53,6 +53,9 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $item->productVariant->photo_url = $media ? $this->s3Service->getTemporaryUrl($media->getPath()) : null; + $item->productVariant->photo_conversion_url = $media + ? $this->s3Service->getTemporaryUrl($media->getPath('thumb')) + : null; }); }); diff --git a/app/Services/Admin/Manage/TransactionService.php b/app/Services/Admin/Manage/TransactionService.php index afef58b..6e76841 100644 --- a/app/Services/Admin/Manage/TransactionService.php +++ b/app/Services/Admin/Manage/TransactionService.php @@ -79,6 +79,9 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $order->photo_url = $orderMedia ? $this->s3Service->getTemporaryUrl($orderMedia->getPath()) : null; + $order->photo_conversion_url = $orderMedia + ? $this->s3Service->getTemporaryUrl($orderMedia->getPath('thumb')) + : null; $order->orderItems->each(function (OrderItem $item) { if (! $item->productVariant) { @@ -89,6 +92,9 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $item->productVariant->photo_url = $media ? $this->s3Service->getTemporaryUrl($media->getPath()) : null; + $item->productVariant->photo_conversion_url = $media + ? $this->s3Service->getTemporaryUrl($media->getPath('thumb')) + : null; }); $order->profit = $order->total_amount - $order->cogs; diff --git a/app/Services/Admin/Master/Product/ProductService.php b/app/Services/Admin/Master/Product/ProductService.php index 9a9c665..112b75f 100644 --- a/app/Services/Admin/Master/Product/ProductService.php +++ b/app/Services/Admin/Master/Product/ProductService.php @@ -60,6 +60,7 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $product->productVariants->each(function ($variant) { $media = $variant->getMedia('images'); $variant->photo_urls = $media->map(fn ($m) => $this->s3Service->getTemporaryUrl($m->getPath()))->toArray(); + $variant->photo_conversion_urls = $media->map(fn ($m) => $this->s3Service->getTemporaryUrl($m->getPath('thumb')))->toArray(); }); }); diff --git a/app/Services/Admin/Master/RawMaterial/RawMaterialService.php b/app/Services/Admin/Master/RawMaterial/RawMaterialService.php index af8b89e..308b775 100644 --- a/app/Services/Admin/Master/RawMaterial/RawMaterialService.php +++ b/app/Services/Admin/Master/RawMaterial/RawMaterialService.php @@ -48,10 +48,14 @@ public function paginated(int $perPage = 25, string $search = '', string $sort = $paginator->getCollection()->each(function ($rawMaterial) { $rawMaterial->rawMaterialPrices->each(function ($price) { - $media = $price->getMedia('images'); - $price->photo_url = $media->first() - ? $this->s3Service->getTemporaryUrl($media->first()->getPath()) - : null; + $media = $price->getFirstMedia('images'); + if ($media) { + $price->photo_url = $this->s3Service->getTemporaryUrl($media->getPath()); + $price->photo_conversion_url = $this->s3Service->getTemporaryUrl($media->getPath('thumb')); + } else { + $price->photo_url = null; + $price->photo_conversion_url = null; + } }); }); diff --git a/resources/js/components/dialogs/image-preview-button.tsx b/resources/js/components/dialogs/image-preview-button.tsx index 35ba38c..73ccd57 100644 --- a/resources/js/components/dialogs/image-preview-button.tsx +++ b/resources/js/components/dialogs/image-preview-button.tsx @@ -3,6 +3,8 @@ import { ImagePreviewModal } from '@/components/dialogs'; type ImagePreviewButtonProps = { srcs: string[]; + modalSrc?: string; + modalSrcs?: string[]; title?: string; alt?: string; className?: string; @@ -10,12 +12,16 @@ type ImagePreviewButtonProps = { export function ImagePreviewButton({ srcs, + modalSrc, + modalSrcs, title, alt, className = 'h-10 w-10', }: ImagePreviewButtonProps) { const [open, setOpen] = useState(false); + const modalSources = modalSrcs ?? (modalSrc ? [modalSrc] : null); + return ( <>