import React, { useState, useEffect } from "react"; import { X, Trash2 } from "lucide-react"; import { useFlowStore } from "../store/flowStore"; interface Permissions { authRequired: boolean; routes: string[]; canCreateUsers: boolean; canEditUsers: boolean; canDeleteUsers: boolean; canManageRoles: boolean; canLogin: boolean; canRegister: boolean; canGoogleLogin: boolean; canAppleLogin: boolean; canMicrosoftLogin: boolean; canMagicLinkLogin: boolean; needs2FA: boolean; canSetPermissions: boolean; } interface RoleModalProps { isOpen: boolean; onClose: () => void; role?: { id: string; name: string; slug: string; permissions: Permissions; }; } const createInitialFormData = () => ({ id: `role_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, name: "", slug: "", permissions: { authRequired: false, routes: [], canCreateUsers: false, canEditUsers: false, canDeleteUsers: false, canManageRoles: false, canLogin: false, canRegister: false, canGoogleLogin: false, canAppleLogin: false, canMicrosoftLogin: false, canMagicLinkLogin: false, needs2FA: false, canSetPermissions: false, }, }); export function RoleModal({ isOpen, onClose, role }: RoleModalProps) { const { routes, addRole, updateRole, deleteRole } = useFlowStore(); const [formData, setFormData] = useState(createInitialFormData()); useEffect(() => { if (role) { setFormData(role); } else { setFormData(createInitialFormData()); } }, [role, isOpen]); const handleChange = (e: React.ChangeEvent) => { const { name, value, type, checked } = e.target; if (type === "checkbox") { if (name.startsWith("permissions.")) { const permissionKey = name.split(".")[1]; setFormData({ ...formData, permissions: { ...formData.permissions, [permissionKey]: checked, }, }); } } else { setFormData({ ...formData, [name]: value, ...(name === "name" && !role ? { slug: value .toLowerCase() .replace(/[^a-z0-9]/g, "-") .replace(/-+/g, "-") .replace(/^-|-$/g, ""), } : {}), }); } }; const handleRouteChange = (routeId: string, checked: boolean) => { setFormData({ ...formData, permissions: { ...formData.permissions, routes: checked ? [...formData.permissions.routes, routeId] : formData.permissions.routes.filter((id) => id !== routeId), }, }); }; const handleSelectAllRoutes = (checked: boolean) => { setFormData({ ...formData, permissions: { ...formData.permissions, routes: checked ? routes.map((route) => route.id) : [], }, }); }; const handleSave = () => { if (role) { updateRole(formData); } else { addRole(formData); } onClose(); }; const handleDelete = () => { if (role) { deleteRole(role.id); onClose(); } }; if (!isOpen) return null; return (

{role ? "Edit Role" : "Add New Role"}

Permissions

{routes.map((route) => ( ))}

User Management

Authentication Management

{role && ( )}
); }