"use client" import { updateFieldVisibilityAction } from "@/app/transactions/actions" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Field } from "@prisma/client" import { ColumnsIcon } from "lucide-react" import { useRouter } from "next/navigation" import { useState } from "react" export function ColumnSelector({ fields, onChange }: { fields: Field[]; onChange?: () => void }) { const router = useRouter() const [isLoading, setIsLoading] = useState<{ [key: string]: boolean }>({}) const handleToggle = async (fieldCode: string, isCurrentlyVisible: boolean) => { setIsLoading((prev) => ({ ...prev, [fieldCode]: true })) try { await updateFieldVisibilityAction(fieldCode, !isCurrentlyVisible) // Refresh the page to reflect changes if (onChange) { onChange() } else { router.refresh() } } catch (error) { console.error("Failed to toggle column visibility:", error) } finally { setIsLoading((prev) => ({ ...prev, [fieldCode]: false })) } } return ( Show Columns {fields.map((field) => ( handleToggle(field.code, field.isVisibleInList)} disabled={isLoading[field.code]} > {field.name} {isLoading[field.code] && Saving...} ))} ) }