75 lines
3.5 KiB
TypeScript
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" }),
|
|
}
|
|
}; |