import { ImagePreviewModal } from '@/components/image-preview-modal';
import { Button } from '@/components/ui/button';
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from '@/components/ui/tooltip';
import { formatCurrency } from '@/lib/utils';
import type { ColumnDef } from '@tanstack/react-table';
import { ArrowUpDown, Pencil, Trash2 } from 'lucide-react';
import { useState } from 'react';
export type Expense = {
id: number;
amount: number;
description: string;
receipt_key: string | null;
receipt_url: string | null;
created_at: string;
created_by: {
user_profile: {
full_name: string;
};
};
};
function formatDate(dateString: string): string {
const date = new Date(dateString);
return date.toLocaleDateString('id-ID', {
day: '2-digit',
month: 'short',
year: 'numeric',
}) + ' ' + date.toLocaleTimeString('id-ID', {
hour: '2-digit',
minute: '2-digit',
});
}
type CreateColumnsParams = {
handleEdit: (expense: Expense) => void;
handleDeleteClick: (expense: Expense) => void;
};
function ReceiptPreview({ url, title }: { url: string; title: string }) {
const [open, setOpen] = useState(false);
return (
<>
>
);
}
export function createExpenseColumns(
params: CreateColumnsParams,
): ColumnDef[] {
const { handleEdit, handleDeleteClick } = params;
return [
{
id: 'no',
header: () => No,
cell: ({ row }) => (
{row.index + 1}
),
meta: {
className: 'w-[50px] text-center',
headerClassName: 'w-[50px] text-center',
},
},
{
accessorKey: 'created_at',
header: ({ column }) => (
),
cell: ({ row }) => (
{formatDate(row.getValue('created_at') as string)}
),
},
{
accessorKey: 'description',
header: () => Keterangan,
cell: ({ row }) => (
{row.getValue('description') as string}
),
},
{
id: 'receipt',
header: () => Bukti,
cell: ({ row }) => {
const receiptUrl = row.original.receipt_url;
if (!receiptUrl) {
return -;
}
return ;
},
},
{
accessorKey: 'amount',
header: ({ column }) => (
),
cell: ({ row }) => (
- {formatCurrency(row.getValue('amount') as number)}
),
},
{
id: 'created_by',
header: () => Oleh,
cell: ({ row }) => {
const createdBy = row.original.created_by;
return {createdBy?.user_profile?.full_name ?? '-'};
},
},
{
id: 'actions',
header: () => Aksi,
meta: {
className: 'w-[100px] text-center',
headerClassName: 'w-[100px] text-center',
},
cell: ({ row }) => {
const expense = row.original;
return (
Edit
Hapus
);
},
},
];
}