diff --git a/resources/js/pages/admin/master/product/partials/image-preview-dialog.tsx b/resources/js/components/modal/image-preview.tsx similarity index 60% rename from resources/js/pages/admin/master/product/partials/image-preview-dialog.tsx rename to resources/js/components/modal/image-preview.tsx index 4e612bb..6876af0 100644 --- a/resources/js/pages/admin/master/product/partials/image-preview-dialog.tsx +++ b/resources/js/components/modal/image-preview.tsx @@ -1,18 +1,26 @@ -import { Dialog, DialogContent } from "@/components/ui/dialog" -import { X } from 'lucide-react'; - interface ImagePreviewDialogProps { imageUrl: string | null; onClose: () => void; } +import { Dialog, DialogContent, DialogTitle, DialogDescription } from "@/components/ui/dialog" +import { VisuallyHidden } from "@radix-ui/react-visually-hidden" +import { X } from 'lucide-react'; export function ImagePreviewDialog({ imageUrl, onClose }: ImagePreviewDialogProps) { return ( onClose()}> - + + + Image preview + Preview of selected image + +
Preview @@ -26,4 +34,4 @@ export function ImagePreviewDialog({ imageUrl, onClose }: ImagePreviewDialogProp
); -} +} \ No newline at end of file diff --git a/resources/js/pages/admin/finance/expense/hooks/use-expense-index.ts b/resources/js/pages/admin/finance/expense/hooks/use-expense-index.ts index 0c4e77d..207a71d 100644 --- a/resources/js/pages/admin/finance/expense/hooks/use-expense-index.ts +++ b/resources/js/pages/admin/finance/expense/hooks/use-expense-index.ts @@ -65,6 +65,10 @@ export function useExpenseIndex() { setSelectedProof(url); }; + const closeImagePreview = () => { + setSelectedProof(null); + }; + return { isFormOpen, selectedExpense, @@ -86,5 +90,6 @@ export function useExpenseIndex() { confirmBulkDelete, closeForm, onPreviewImage, + closeImagePreview, }; } diff --git a/resources/js/pages/admin/finance/expense/index.tsx b/resources/js/pages/admin/finance/expense/index.tsx index 947f20d..7fab709 100644 --- a/resources/js/pages/admin/finance/expense/index.tsx +++ b/resources/js/pages/admin/finance/expense/index.tsx @@ -4,26 +4,16 @@ import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Trash2, X, Plus } from 'lucide-react'; import { DataTable } from '@/components/data-table'; -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogMedia, - AlertDialogTitle, -} from "@/components/ui/alert-dialog" -import { Dialog, DialogContent } from "@/components/ui/dialog" import { useExpenseIndex } from './hooks/use-expense-index'; import { getColumns } from './partials/columns'; import { ExpenseFormModal } from './partials/expense-form-modal'; import { DeleteConfirmation } from '@/components/modal/delete-confirmation'; +import { ImagePreviewDialog } from '@/components/modal/image-preview'; export default function ExpenseIndex({ expenses }: { expenses: Expense[] }) { const { + selectedProof, isFormOpen, selectedExpense, isDeleteDialogOpen, @@ -31,12 +21,10 @@ export default function ExpenseIndex({ expenses }: { expenses: Expense[] }) { expenseToDelete, rowsToDelete, rowSelection, - selectedProof, setRowSelection, setRowsToDelete, setIsDeleteDialogOpen, setIsBulkDeleteDialogOpen, - setSelectedProof, onAdd, onEdit, onDelete, @@ -44,6 +32,7 @@ export default function ExpenseIndex({ expenses }: { expenses: Expense[] }) { confirmBulkDelete, closeForm, onPreviewImage, + closeImagePreview } = useExpenseIndex(); const columns = getColumns({ onEdit, onDelete, onPreviewImage }); @@ -68,24 +57,6 @@ export default function ExpenseIndex({ expenses }: { expenses: Expense[] }) { expense={selectedExpense} /> - setSelectedProof(null)}> - -
- Proof - -
-
-
- + + ); } diff --git a/resources/js/pages/admin/master/product/index.tsx b/resources/js/pages/admin/master/product/index.tsx index 09f267b..afcfbee 100644 --- a/resources/js/pages/admin/master/product/index.tsx +++ b/resources/js/pages/admin/master/product/index.tsx @@ -2,24 +2,13 @@ import { Head, Link } from '@inertiajs/react'; import type { Product, Category } from '@/types'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; -import { Trash2, Plus, X } from 'lucide-react'; +import { Trash2, Plus } from 'lucide-react'; import { DataTable } from '@/components/data-table'; -import { - AlertDialog, - AlertDialogAction, - AlertDialogCancel, - AlertDialogContent, - AlertDialogDescription, - AlertDialogFooter, - AlertDialogHeader, - AlertDialogMedia, - AlertDialogTitle, -} from "@/components/ui/alert-dialog" import productRoutes from '@/routes/product'; import { useProductIndex } from './hooks/use-product-index'; import { getColumns } from './partials/columns'; -import { ImagePreviewDialog } from './partials/image-preview-dialog'; +import { ImagePreviewDialog } from '../../../../components/modal/image-preview'; import { DeleteConfirmation } from '@/components/modal/delete-confirmation'; export default function ProductIndex({ products, categories }: { products: Product[], categories: Category[] }) { diff --git a/resources/js/pages/admin/master/product/partials/columns.tsx b/resources/js/pages/admin/master/product/partials/columns.tsx index e40125b..188b910 100644 --- a/resources/js/pages/admin/master/product/partials/columns.tsx +++ b/resources/js/pages/admin/master/product/partials/columns.tsx @@ -22,25 +22,14 @@ export const getColumns = ({ onDelete, onToggleStatus, onPreviewImage }: ColumnP header: "Thumbnail", meta: { title: "Thumbnail" }, cell: ({ row }) => { - const product = row.original; - return ( -
- {product.thumbnail_url ? ( - - ) : ( -
- -
- )} + const url = row.original.thumbnail_url; + return url ? ( + + ) : ( +
+
); } @@ -112,7 +101,7 @@ export const getColumns = ({ onDelete, onToggleStatus, onPreviewImage }: ColumnP ), cell: ({ row }) => { const product = row.original; - + return (