"use client"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { DataTable } from "@/components/common/data-table"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { useOrganizations, useCreateOrganization, useUpdateOrganization, useDeleteOrganization } from "@/hooks/use-master-data"; import { ColumnDef } from "@tanstack/react-table"; import { Pencil, Trash, Plus } from "lucide-react"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; interface Organization { organization_id: number; org_code: string; org_name: string; org_name_th: string; description?: string; } export default function OrganizationsPage() { const { data: organizations, isLoading } = useOrganizations(); const createOrg = useCreateOrganization(); const updateOrg = useUpdateOrganization(); const deleteOrg = useDeleteOrganization(); const [dialogOpen, setDialogOpen] = useState(false); const [editingOrg, setEditingOrg] = useState(null); const [formData, setFormData] = useState({ org_code: "", org_name: "", org_name_th: "", description: "", }); const columns: ColumnDef[] = [ { accessorKey: "org_code", header: "Code" }, { accessorKey: "org_name", header: "Name (EN)" }, { accessorKey: "org_name_th", header: "Name (TH)" }, { accessorKey: "description", header: "Description" }, { id: "actions", header: "Actions", cell: ({ row }) => ( handleEdit(row.original)}> Edit { if (confirm("Delete this organization?")) { deleteOrg.mutate(row.original.organization_id); } }} > Delete ) } ]; const handleEdit = (org: Organization) => { setEditingOrg(org); setFormData({ org_code: org.org_code, org_name: org.org_name, org_name_th: org.org_name_th, description: org.description || "" }); setDialogOpen(true); }; const handleAdd = () => { setEditingOrg(null); setFormData({ org_code: "", org_name: "", org_name_th: "", description: "" }); setDialogOpen(true); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (editingOrg) { updateOrg.mutate({ id: editingOrg.organization_id, data: formData }, { onSuccess: () => setDialogOpen(false) }); } else { createOrg.mutate(formData, { onSuccess: () => setDialogOpen(false) }); } }; return (

Organizations

Manage project organizations system-wide

{editingOrg ? "Edit Organization" : "New Organization"}
setFormData({ ...formData, org_code: e.target.value })} required />
setFormData({ ...formData, org_name: e.target.value })} required />
setFormData({ ...formData, org_name_th: e.target.value })} />
setFormData({ ...formData, description: e.target.value })} />
); }