riseup-squad21/config/dashboard.config.ts
2025-10-22 20:55:23 -03:00

75 lines
3.5 KiB
TypeScript

// Caminho: config/dashboard.config.ts
import { Home, Calendar, Clock, User, FileText } from "lucide-react";
import type { MenuItem, UserProfile } from "@/components/layout/DashboardLayout";
// Função auxiliar para criar o fallback do avatar
const createAvatarFallback = (name: string = ""): string => {
return name.split(" ").map((n) => n[0]).join("").toUpperCase();
};
// Função para extrair o perfil do usuário de forma padronizada
const getProfile = (userInfo: any, roleDefaults: { name: string, secondaryText: string }): UserProfile => {
const name = userInfo.user_metadata?.full_name || roleDefaults.name;
return {
name: name,
secondaryText: userInfo.user_metadata?.specialty || userInfo.user_metadata?.department || userInfo.email || roleDefaults.secondaryText,
avatarFallback: createAvatarFallback(name),
};
};
interface RoleConfig {
menuItems: MenuItem[];
getUserProfile: (userInfo: any) => UserProfile;
}
export const dashboardConfig: Record<string, RoleConfig> = {
doctor: {
menuItems: [
{ href: "/medicos/doctor/dashboard", icon: Home, label: "Dashboard" },
{ href: "/medicos/doctor/medicos/consultas", icon: Calendar, label: "Consultas" },
{ href: "/medicos/doctor/[id]/laudos", icon: Clock, label: "Editor de Laudo" },
{ href: "/medicos/doctor/medicos", icon: User, label: "Pacientes" },
{ href: "/medicos/doctor/disponibilidade", icon: Calendar, label: "Disponibilidade" },
],
getUserProfile: (userInfo) => getProfile(userInfo, { name: "Doutor(a)", secondaryText: "Especialidade" }),
},
patient: {
menuItems: [
{ href: "/patient/dashboard", icon: Home, label: "Dashboard" },
{ href: "/patient/appointments", icon: Calendar, label: "Minhas Consultas" },
{ href: "/patient/schedule", icon: Clock, label: "Agendar Consulta" },
{ href: "/patient/reports", icon: FileText, label: "Meus Laudos" },
{ href: "/patient/profile", icon: User, label: "Meus Dados" },
],
getUserProfile: (userInfo) => getProfile(userInfo, { name: "Paciente", secondaryText: "Área do Paciente" }),
},
secretary: {
menuItems: [
{ href: "/manager/dashboard", icon: Home, label: "Dashboard" },
{ href: "/manager/relatorios", icon: Calendar, label: "Relatórios gerenciais" },
{ href: "/manager/usuario", icon: User, label: "Gestão de Usuários" },
{ href: "/manager/home", icon: User, label: "Gestão de Médicos" },
{ href: "/manager/configuracoes", icon: Calendar, label: "Configurações" },
],
getUserProfile: (userInfo) => getProfile(userInfo, { name: "Secretária", secondaryText: "Atendimento" }),
},
manager: {
menuItems: [
{ href: "/manager/dashboard", icon: Home, label: "Dashboard" },
{ href: "#", icon: Calendar, label: "Relatórios gerenciais" },
{ href: "/manager/usuario", icon: User, label: "Gestão de Usuários" },
{ href: "/manager/home", icon: User, label: "Gestão de Médicos" },
{ href: "#", icon: Calendar, label: "Configurações" },
],
getUserProfile: (userInfo) => getProfile(userInfo, { name: "Gestor(a)", secondaryText: "Gestão" }),
},
financier: {
menuItems: [
{ href: "#", icon: Home, label: "Dashboard" },
{ href: "#", icon: Calendar, label: "Relatórios financeiros" },
{ href: "#", icon: User, label: "Finanças Gerais" },
{ href: "#", icon: Calendar, label: "Configurações" },
],
getUserProfile: (userInfo) => getProfile(userInfo, { name: "Financeiro", secondaryText: "Departamento Financeiro" }),
}
};