"use client"; import { createRole, updateRole, useRoleItem } from "@/hooks/role"; import { Module, Permission, Role } from "@/lib/interfaces"; import { usePathname, useRouter } from "next/navigation"; import Link from "next/link"; import { useEffect, useState } from "react"; import { Status } from "@/lib/Enums"; import { Applications } from "@/lib/Enums"; import { usePermissionItems } from "@/hooks/permission"; import { useModuleItems } from "@/hooks/module"; export default function RoleDetails() { const [item, setItem] = useState(); const pathName = usePathname(); const router = useRouter(); let isUpdateMode = false; let selectedApplications: string[]; const [permissions, setPermissions] = useState([]); const [modules, setModules] = useState([]); let initialPermissions: string[]; let initialApplications: string[]; let initialModules: string[]; const setSelectedValuesGlobal = (values: string[]) => { selectedApplications = values; }; let selectedPermissions: string[]; const setSelectedPermissionsGlobal = (values: string[]) => { selectedPermissions = values; }; let selectedModules: string[]; const setSelectedModulesGlobal = (values: string[]) => { selectedModules = values; }; const formatDate = (date: Date) => new Intl.DateTimeFormat("en-US").format(date); const StatusDropDown = (data: any) => { return ( ); }; const ApplicationsDropDown = ({ selectedApplications, }: { selectedApplications: string[]; }) => { const [localSelectedValues, setLocalSelectedValues] = useState(selectedApplications); const handleSelection = (event: React.ChangeEvent) => { const selectedOptions = Array.from(event.target.selectedOptions); const values = selectedOptions.map((option) => option.value); setLocalSelectedValues(values); setSelectedValuesGlobal(values); }; return ( ); }; const PermissionsDropDown = ({ selectedPermissions, }: { selectedPermissions: string[]; }) => { const [localSelectedValues, setLocalSelectedValues] = useState(selectedPermissions); useEffect(() => { setLocalSelectedValues(selectedPermissions); }, [selectedPermissions]); const handleSelection = (event: React.ChangeEvent) => { const selectedOptions = Array.from(event.target.selectedOptions); const values = selectedOptions.map((option) => option.value); setLocalSelectedValues(values); setSelectedPermissionsGlobal(values); }; if (!selectedPermissions) setSelectedPermissionsGlobal(selectedPermissions); return ( ); }; const ModulesDropDown = ({ selectedModules, }: { selectedModules: string[]; }) => { const [localSelectedValues, setLocalSelectedValues] = useState(selectedModules); useEffect(() => { setLocalSelectedValues(selectedModules); }, [selectedModules]); const handleSelection = (event: React.ChangeEvent) => { const selectedOptions = Array.from(event.target.selectedOptions); const values = selectedOptions.map((option) => option.value); setLocalSelectedValues(values); setSelectedModulesGlobal(values); }; if (!selectedModules) setSelectedModulesGlobal(selectedModules); return ( ); }; const handleSaveClick = () => { let id = (document.getElementById("id") as HTMLInputElement)?.value; let name = (document.getElementById("name") as HTMLInputElement)?.value; let description = ( document.getElementById("description") as HTMLInputElement )?.value; let applications = selectedApplications ? selectedApplications : initialApplications; let permissions = selectedPermissions ? selectedPermissions : initialPermissions; let modules = selectedModules ? selectedModules : initialModules; let status = (document.getElementById("status") as HTMLSelectElement) ?.value; let updatedRole = { id, name, description, applications, permissions, modules, status, } as unknown as Role; if (isUpdateMode) { updateRole(updatedRole); } else { updatedRole.id = null; createRole(updatedRole); } setItem(updatedRole); router.push("/role"); }; const renderForm = (role: Role) => { return ( <>
); }; const ItemData = () => { const id = pathName.split("/"); const idValue = id[id.length - 1]; isUpdateMode = idValue != "create"; if (isUpdateMode) { const { item, isLoading, error } = useRoleItem(idValue); const { items: permissionItems, error: permissionError, isLoading: isPermissionLoading, mutate: mutatePermission, } = usePermissionItems(); const { items: moduleItems, error: moduleError, isLoading: isModuleLoading, mutate: mutateModule, } = useModuleItems(); initialApplications = item.applications; initialPermissions = item.permissions; initialModules = item.modules; useEffect(() => { if (permissionItems && permissionItems.length > 0) { setPermissions(permissionItems); // Solo actualiza si hay cambios } }, [permissionItems]); // Solo se ejecuta si permissionItems cambia useEffect(() => { if (moduleItems && moduleItems.length > 0) { setModules(moduleItems); // Solo actualiza si hay cambios } }, [moduleItems]); if (!isLoading && !error && item) { return renderForm(item); } else return <>Loading; } else { return renderForm({ id: "", name: "", description: "", applications: [], permissions: [], modules: [], status: Status.Active, createdAt: new Date(), createdBy: "", updatedAt: new Date(), updatedBy: "", }); } }; return (
Save Cancel
); }