"use client"; import React, { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { PlusIcon, ModuleIcon, EditIcon, DeleteIcon } from "@/components/icons"; import { MasterModule, getMasterModules, createMasterModule, updateMasterModule, deleteMasterModule, } from "@/service/menu-modules"; import SiteBreadcrumb from "@/components/site-breadcrumb"; import Swal from "sweetalert2"; import { FormField } from "@/components/form/common/FormField"; export default function ModulesSettingsPage() { const [modules, setModules] = useState([]); const [isLoading, setIsLoading] = useState(false); const [isDialogOpen, setIsDialogOpen] = useState(false); const [editingModule, setEditingModule] = useState(null); const [formData, setFormData] = useState({ name: "", description: "", pathUrl: "", actionType: "", statusId: 1, }); useEffect(() => { loadData(); }, []); const loadData = async () => { setIsLoading(true); try { const res = await getMasterModules({ limit: 100 }); if (!res?.error) { setModules(res?.data?.data || []); } } catch (error) { console.error("Error loading modules:", error); } finally { setIsLoading(false); } }; const handleOpenDialog = (module?: MasterModule) => { if (module) { setEditingModule(module); setFormData({ name: module.name ?? "", description: module.description ?? "", pathUrl: module.pathUrl ?? "", actionType: module.actionType ?? "", statusId: module.statusId ?? 1, }); } else { setEditingModule(null); setFormData({ name: "", description: "", pathUrl: "", actionType: "", statusId: 1, }); } setIsDialogOpen(true); }; const handleSave = async () => { try { if (editingModule) { const res = await updateMasterModule(editingModule.id, formData); if (res?.error) { Swal.fire({ title: "Error", text: res?.message || "Failed to update module", icon: "error", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); } else { Swal.fire({ title: "Success", text: "Module updated successfully", icon: "success", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); await loadData(); setIsDialogOpen(false); } } else { const res = await createMasterModule(formData); if (res?.error) { Swal.fire({ title: "Error", text: res?.message || "Failed to create module", icon: "error", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); } else { Swal.fire({ title: "Success", text: "Module created successfully", icon: "success", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); await loadData(); setIsDialogOpen(false); } } } catch (error) { console.error("Error saving module:", error); Swal.fire({ title: "Error", text: "An unexpected error occurred", icon: "error", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); } }; const handleDelete = async (module: MasterModule) => { const result = await Swal.fire({ title: "Delete Module?", text: `Are you sure you want to delete "${module.name}"? This action cannot be undone.`, icon: "warning", showCancelButton: true, confirmButtonText: "Yes, delete it", cancelButtonText: "Cancel", customClass: { popup: "swal-z-index-9999", }, }); if (result.isConfirmed) { try { const res = await deleteMasterModule(module.id); if (res?.error) { Swal.fire({ title: "Error", text: res?.message || "Failed to delete module", icon: "error", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); } else { Swal.fire({ title: "Deleted!", text: "Module has been deleted.", icon: "success", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); await loadData(); } } catch (error) { console.error("Error deleting module:", error); Swal.fire({ title: "Error", text: "An unexpected error occurred", icon: "error", confirmButtonText: "OK", customClass: { popup: "swal-z-index-9999", }, }); } } }; return ( <>

Modules Settings

Manage system modules and their configurations

{editingModule ? `Edit Module: ${editingModule.name}` : "Create New Module"}
setFormData({ ...formData, name: value }) } required /> setFormData({ ...formData, description: value }) } required /> setFormData({ ...formData, pathUrl: value }) } required /> setFormData({ ...formData, actionType: value }) } options={[ { value: "view", label: "View" }, { value: "create", label: "Create" }, { value: "update", label: "Update" }, { value: "delete", label: "Delete" }, { value: "approve", label: "Approve" }, { value: "reject", label: "Reject" }, ]} required /> setFormData({ ...formData, statusId: Number(value) || 1 }) } required />
{isLoading ? (

Loading modules...

) : modules.length > 0 ? (
{modules.map((module) => ( {module.name} {module.isActive ? ( Active ) : ( Inactive )}
{module.description}
{module.pathUrl}
{module.actionType}
))}
) : (

No Modules Found

Create your first module to define system capabilities

)}
); }