- {institutionCourses.length} {institutionCourses.length === 1 ? 'curso cadastrado' : 'cursos cadastrados'}
+ {institutionCourses.length}{" "}
+ {institutionCourses.length === 1
+ ? "curso cadastrado"
+ : "cursos cadastrados"}
)}
@@ -293,13 +335,20 @@ export const CourseManagement: React.FC = () => {
>
{course.isActive ? (
<>
-
-
- {/* Header */}
-
-
- Configurações
-
-
- Gerencie suas preferências e informações da conta
-
-
-
-
- {/* Mobile Tabs - Horizontal */}
-
-
-
- setActiveTab('profile')}
- className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${activeTab === 'profile'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Perfil
-
- setActiveTab('account')}
- className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${activeTab === 'account'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Conta
-
- setActiveTab('notifications')}
- className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${activeTab === 'notifications'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Notificações
-
- setActiveTab('appearance')}
- className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${activeTab === 'appearance'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Aparência
-
-
-
-
-
- {/* Desktop Sidebar - Vertical */}
-
-
-
- setActiveTab('profile')}
- className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${activeTab === 'profile'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Perfil
-
- setActiveTab('account')}
- className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${activeTab === 'account'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Conta
-
- setActiveTab('notifications')}
- className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${activeTab === 'notifications'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Notificações
-
- setActiveTab('appearance')}
- className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${activeTab === 'appearance'
- ? 'bg-brand-gold text-white'
- : 'text-gray-700 hover:bg-gray-100'
- }`}
- >
-
- Aparência
-
-
-
-
-
- {/* Content */}
-
-
- {/* Profile Tab */}
- {activeTab === 'profile' && (
-
-
Informações do Perfil
-
-
-
-
-
-
-
-
-
-
-
{profileData.name}
-
{profileData.email}
-
- Alterar foto
-
-
-
-
-
-
-
-
- Nome Completo
-
-
-
- setProfileData({ ...profileData, name: e.target.value })}
- className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- />
-
-
-
-
-
- Email
-
-
-
- setProfileData({ ...profileData, email: e.target.value })}
- className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- />
-
-
-
-
-
- Telefone
-
-
-
-
setProfileData({ ...profileData, phone: e.target.value })}
- className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- />
-
-
-
-
-
- Localização
-
-
-
- setProfileData({ ...profileData, location: e.target.value })}
- className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- />
-
-
-
-
-
- Biografia
-
-
-
-
-
-
- Salvar Alterações
-
-
-
-
- )}
-
- {/* Account Tab */}
- {activeTab === 'account' && (
-
-
Segurança da Conta
-
-
-
-
- Senha Atual
-
-
-
-
-
-
- Nova Senha
-
-
-
-
-
-
- Confirmar Nova Senha
-
-
-
-
-
-
-
- Atualizar Senha
-
-
-
-
-
Autenticação em Dois Fatores
-
- Adicione uma camada extra de segurança à sua conta
-
-
- Ativar 2FA
-
-
-
-
- )}
-
- {/* Notifications Tab */}
- {activeTab === 'notifications' && (
-
-
Preferências de Notificações
-
-
-
-
-
Notificações por Email
-
Receba atualizações por email
-
-
- setNotificationSettings({
- ...notificationSettings,
- emailNotifications: e.target.checked
- })}
- className="sr-only peer"
- />
-
-
-
-
-
-
-
Notificações Push
-
Receba notificações no navegador
-
-
- setNotificationSettings({
- ...notificationSettings,
- pushNotifications: e.target.checked
- })}
- className="sr-only peer"
- />
-
-
-
-
-
-
-
SMS
-
Receba mensagens de texto
-
-
- setNotificationSettings({
- ...notificationSettings,
- smsNotifications: e.target.checked
- })}
- className="sr-only peer"
- />
-
-
-
-
-
-
-
Lembretes de Eventos
-
Receba lembretes antes dos eventos
-
-
- setNotificationSettings({
- ...notificationSettings,
- eventReminders: e.target.checked
- })}
- className="sr-only peer"
- />
-
-
-
-
-
-
-
Alertas de Pagamento
-
Notificações sobre pagamentos
-
-
- setNotificationSettings({
- ...notificationSettings,
- paymentAlerts: e.target.checked
- })}
- className="sr-only peer"
- />
-
-
-
-
-
-
-
- Salvar Preferências
-
-
-
-
- )}
-
- {/* Appearance Tab */}
- {activeTab === 'appearance' && (
-
-
Aparência e Idioma
-
-
-
-
- Tema
-
- setAppearanceSettings({
- ...appearanceSettings,
- theme: e.target.value
- })}
- className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- >
- Claro
- Escuro
- Automático
-
-
-
-
-
- Idioma
-
- setAppearanceSettings({
- ...appearanceSettings,
- language: e.target.value
- })}
- className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- >
- Português (Brasil)
- English (US)
- Español
-
-
-
-
-
- Formato de Data
-
- setAppearanceSettings({
- ...appearanceSettings,
- dateFormat: e.target.value
- })}
- className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- >
- DD/MM/YYYY
- MM/DD/YYYY
- YYYY-MM-DD
-
-
-
-
-
- Moeda
-
- setAppearanceSettings({
- ...appearanceSettings,
- currency: e.target.value
- })}
- className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
- >
- Real (R$)
- Dólar ($)
- Euro (€)
-
-
-
-
-
-
- Salvar Configurações
-
-
-
-
- )}
-
-
-
-
+ return (
+
+
+ {/* Header */}
+
+
+ Configurações
+
+
+ Gerencie suas preferências e informações da conta
+
- );
+
+
+ {/* Mobile Tabs - Horizontal */}
+
+
+
+ setActiveTab("profile")}
+ className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${
+ activeTab === "profile"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Perfil
+
+ setActiveTab("account")}
+ className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${
+ activeTab === "account"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Conta
+
+ setActiveTab("notifications")}
+ className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${
+ activeTab === "notifications"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Notificações
+
+ setActiveTab("appearance")}
+ className={`flex items-center gap-2 px-3 py-2 rounded-md transition-colors whitespace-nowrap text-sm ${
+ activeTab === "appearance"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Aparência
+
+
+
+
+
+ {/* Desktop Sidebar - Vertical */}
+
+
+
+ setActiveTab("profile")}
+ className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${
+ activeTab === "profile"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Perfil
+
+ setActiveTab("account")}
+ className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${
+ activeTab === "account"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Conta
+
+ setActiveTab("notifications")}
+ className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${
+ activeTab === "notifications"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Notificações
+
+ setActiveTab("appearance")}
+ className={`w-full flex items-center gap-3 px-4 py-3 rounded-md transition-colors ${
+ activeTab === "appearance"
+ ? "bg-brand-gold text-white"
+ : "text-gray-700 hover:bg-gray-100"
+ }`}
+ >
+
+ Aparência
+
+
+
+
+
+ {/* Content */}
+
+
+ {/* Profile Tab */}
+ {activeTab === "profile" && (
+
+
+ Informações do Perfil
+
+
+
+
+
+
+
+
+
+
+
+
+ {profileData.name}
+
+
+ {profileData.email}
+
+
+ Alterar foto
+
+
+
+
+
+
+
+
+ Nome Completo
+
+
+
+
+ setProfileData({
+ ...profileData,
+ name: e.target.value,
+ })
+ }
+ className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ />
+
+
+
+
+
+ Email
+
+
+
+
+ setProfileData({
+ ...profileData,
+ email: e.target.value,
+ })
+ }
+ className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ />
+
+
+
+
+
+ Telefone
+
+
+
+
+ setProfileData({
+ ...profileData,
+ phone: e.target.value,
+ })
+ }
+ className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ />
+
+
+
+
+
+ Localização
+
+
+
+
+ setProfileData({
+ ...profileData,
+ location: e.target.value,
+ })
+ }
+ className="w-full pl-10 pr-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ />
+
+
+
+
+
+ Biografia
+
+
+
+
+
+
+ Salvar Alterações
+
+
+
+
+ )}
+
+ {/* Account Tab */}
+ {activeTab === "account" && (
+
+
+ Segurança da Conta
+
+
+
+
+
+ Senha Atual
+
+
+
+
+
+
+ Nova Senha
+
+
+
+
+
+
+ Confirmar Nova Senha
+
+
+
+
+
+
+
+ Atualizar Senha
+
+
+
+
+
+ Autenticação em Dois Fatores
+
+
+ Adicione uma camada extra de segurança à sua conta
+
+
+ Ativar 2FA
+
+
+
+
+ )}
+
+ {/* Notifications Tab */}
+ {activeTab === "notifications" && (
+
+
+ Preferências de Notificações
+
+
+
+
+
+
Notificações por Email
+
+ Receba atualizações por email
+
+
+
+
+ setNotificationSettings({
+ ...notificationSettings,
+ emailNotifications: e.target.checked,
+ })
+ }
+ className="sr-only peer"
+ />
+
+
+
+
+
+
+
Notificações Push
+
+ Receba notificações no navegador
+
+
+
+
+ setNotificationSettings({
+ ...notificationSettings,
+ pushNotifications: e.target.checked,
+ })
+ }
+ className="sr-only peer"
+ />
+
+
+
+
+
+
+
SMS
+
+ Receba mensagens de texto
+
+
+
+
+ setNotificationSettings({
+ ...notificationSettings,
+ smsNotifications: e.target.checked,
+ })
+ }
+ className="sr-only peer"
+ />
+
+
+
+
+
+
+
Lembretes de Eventos
+
+ Receba lembretes antes dos eventos
+
+
+
+
+ setNotificationSettings({
+ ...notificationSettings,
+ eventReminders: e.target.checked,
+ })
+ }
+ className="sr-only peer"
+ />
+
+
+
+
+
+
+
Alertas de Pagamento
+
+ Notificações sobre pagamentos
+
+
+
+
+ setNotificationSettings({
+ ...notificationSettings,
+ paymentAlerts: e.target.checked,
+ })
+ }
+ className="sr-only peer"
+ />
+
+
+
+
+
+
+
+ Salvar Preferências
+
+
+
+
+ )}
+
+ {/* Appearance Tab */}
+ {activeTab === "appearance" && (
+
+
+ Aparência e Idioma
+
+
+
+
+
+ Tema
+
+
+ setAppearanceSettings({
+ ...appearanceSettings,
+ theme: e.target.value,
+ })
+ }
+ className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ >
+ Claro
+ Escuro
+ Automático
+
+
+
+
+
+ Idioma
+
+
+ setAppearanceSettings({
+ ...appearanceSettings,
+ language: e.target.value,
+ })
+ }
+ className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ >
+ Português (Brasil)
+ English (US)
+ Español
+
+
+
+
+
+ Formato de Data
+
+
+ setAppearanceSettings({
+ ...appearanceSettings,
+ dateFormat: e.target.value,
+ })
+ }
+ className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ >
+ DD/MM/YYYY
+ MM/DD/YYYY
+ YYYY-MM-DD
+
+
+
+
+
+ Moeda
+
+
+ setAppearanceSettings({
+ ...appearanceSettings,
+ currency: e.target.value,
+ })
+ }
+ className="w-full px-4 py-3 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-brand-gold"
+ >
+ Real (R$)
+ Dólar ($)
+ Euro (€)
+
+
+
+
+
+
+ Salvar Configurações
+
+
+
+
+ )}
+
+
+
+
+
+ );
};
diff --git a/frontend/pages/Team.tsx b/frontend/pages/Team.tsx
index 3134789..22a7bc7 100644
--- a/frontend/pages/Team.tsx
+++ b/frontend/pages/Team.tsx
@@ -12,32 +12,98 @@ import {
User,
Upload,
X,
+ Video,
+ UserCheck,
+ Car,
+ Building,
+ CreditCard,
+ TrendingUp,
} from "lucide-react";
import { Button } from "../components/Button";
-interface Photographer {
+type ProfessionalRole = "Fotógrafo" | "Cinegrafista" | "Recepcionista";
+
+interface Professional {
id: string;
name: string;
+ role: ProfessionalRole;
+ address: {
+ street: string;
+ number: string;
+ complement?: string;
+ neighborhood: string;
+ city: string;
+ state: string;
+ };
+ whatsapp: string;
+ cpfCnpj: string;
+ bankInfo: {
+ bank: string;
+ agency: string;
+ accountPix: string;
+ };
+ hasCar: boolean;
+ hasStudio: boolean;
+ studioQuantity?: number;
+ cardType: string;
+ accountHolder: string;
+ observations?: string;
+ ratings: {
+ technicalQuality: number;
+ appearance: number;
+ education: number;
+ sympathy: number;
+ eventPerformance: number;
+ scheduleAvailability: number;
+ average: number;
+ };
+ freeTable: string;
+ extraFee: string;
email: string;
- phone: string;
- location: string;
specialties: string[];
- rating: number;
eventsCompleted: number;
status: "active" | "inactive" | "busy";
avatar: string;
joinDate: string;
}
-const MOCK_PHOTOGRAPHERS: Photographer[] = [
+const MOCK_PROFESSIONALS: Professional[] = [
{
id: "1",
name: "Carlos Silva",
+ role: "Fotógrafo",
+ address: {
+ street: "Rua das Flores",
+ number: "123",
+ complement: "Apto 301",
+ neighborhood: "Centro",
+ city: "Curitiba",
+ state: "PR",
+ },
+ whatsapp: "(41) 99999-1111",
+ cpfCnpj: "123.456.789-00",
+ bankInfo: {
+ bank: "Banco do Brasil",
+ agency: "1234-5",
+ accountPix: "carlos.silva@email.com",
+ },
+ hasCar: true,
+ hasStudio: false,
+ cardType: "Débito/Crédito",
+ accountHolder: "Carlos Silva",
+ ratings: {
+ technicalQuality: 4.8,
+ appearance: 4.7,
+ education: 4.9,
+ sympathy: 4.8,
+ eventPerformance: 4.9,
+ scheduleAvailability: 4.6,
+ average: 4.8,
+ },
+ freeTable: "R$ 800,00",
+ extraFee: "R$ 150,00 por equipamento extra",
email: "carlos.silva@photum.com",
- phone: "(41) 99999-1111",
- location: "Curitiba, PR",
specialties: ["Formaturas", "Eventos Corporativos"],
- rating: 4.8,
eventsCompleted: 45,
status: "active",
avatar: "https://i.pravatar.cc/150?img=12",
@@ -46,11 +112,39 @@ const MOCK_PHOTOGRAPHERS: Photographer[] = [
{
id: "2",
name: "Ana Paula Mendes",
+ role: "Cinegrafista",
+ address: {
+ street: "Av. Sete de Setembro",
+ number: "456",
+ neighborhood: "Batel",
+ city: "Curitiba",
+ state: "PR",
+ },
+ whatsapp: "(41) 99999-2222",
+ cpfCnpj: "987.654.321-00",
+ bankInfo: {
+ bank: "Caixa Econômica",
+ agency: "0987",
+ accountPix: "(41) 99999-2222",
+ },
+ hasCar: true,
+ hasStudio: true,
+ studioQuantity: 1,
+ cardType: "Crédito",
+ accountHolder: "Ana Paula Mendes",
+ ratings: {
+ technicalQuality: 4.9,
+ appearance: 5.0,
+ education: 4.8,
+ sympathy: 4.9,
+ eventPerformance: 4.9,
+ scheduleAvailability: 4.7,
+ average: 4.9,
+ },
+ freeTable: "R$ 1.200,00",
+ extraFee: "R$ 200,00 por hora extra",
email: "ana.mendes@photum.com",
- phone: "(41) 99999-2222",
- location: "Curitiba, PR",
specialties: ["Casamentos", "Formaturas"],
- rating: 4.9,
eventsCompleted: 62,
status: "busy",
avatar: "https://i.pravatar.cc/150?img=5",
@@ -58,74 +152,97 @@ const MOCK_PHOTOGRAPHERS: Photographer[] = [
},
{
id: "3",
- name: "Roberto Costa",
- email: "roberto.costa@photum.com",
- phone: "(41) 99999-3333",
- location: "São José dos Pinhais, PR",
- specialties: ["Formaturas", "Eventos Sociais"],
- rating: 4.7,
- eventsCompleted: 38,
- status: "active",
- avatar: "https://i.pravatar.cc/150?img=33",
- joinDate: "2023-03-10",
- },
- {
- id: "4",
- name: "Juliana Santos",
- email: "juliana.santos@photum.com",
- phone: "(41) 99999-4444",
- location: "Curitiba, PR",
- specialties: ["Casamentos", "Ensaios"],
- rating: 5.0,
+ name: "Mariana Alves",
+ role: "Recepcionista",
+ address: {
+ street: "Rua Comendador Araújo",
+ number: "321",
+ complement: "Sala 12",
+ neighborhood: "Centro",
+ city: "Curitiba",
+ state: "PR",
+ },
+ whatsapp: "(41) 99999-4444",
+ cpfCnpj: "321.654.987-00",
+ bankInfo: {
+ bank: "Bradesco",
+ agency: "4321",
+ accountPix: "mariana.alves@email.com",
+ },
+ hasCar: false,
+ hasStudio: false,
+ cardType: "Débito",
+ accountHolder: "Mariana Alves Santos",
+ ratings: {
+ technicalQuality: 0,
+ appearance: 4.9,
+ education: 5.0,
+ sympathy: 5.0,
+ eventPerformance: 4.8,
+ scheduleAvailability: 4.9,
+ average: 4.9,
+ },
+ freeTable: "R$ 400,00",
+ extraFee: "R$ 50,00 por hora extra",
+ email: "mariana.alves@photum.com",
+ specialties: ["Recepção", "Atendimento"],
eventsCompleted: 71,
status: "active",
avatar: "https://i.pravatar.cc/150?img=9",
joinDate: "2022-05-12",
},
- {
- id: "5",
- name: "Fernando Oliveira",
- email: "fernando.oliveira@photum.com",
- phone: "(41) 99999-5555",
- location: "Pinhais, PR",
- specialties: ["Eventos Corporativos", "Formaturas"],
- rating: 4.6,
- eventsCompleted: 29,
- status: "inactive",
- avatar: "https://i.pravatar.cc/150?img=15",
- joinDate: "2023-07-01",
- },
- {
- id: "6",
- name: "Mariana Rodrigues",
- email: "mariana.rodrigues@photum.com",
- phone: "(41) 99999-6666",
- location: "Curitiba, PR",
- specialties: ["Formaturas", "Eventos Sociais", "Casamentos"],
- rating: 4.9,
- eventsCompleted: 54,
- status: "busy",
- avatar: "https://i.pravatar.cc/150?img=10",
- joinDate: "2022-11-05",
- },
];
export const TeamPage: React.FC = () => {
const [searchTerm, setSearchTerm] = useState("");
+ const [roleFilter, setRoleFilter] = useState
("all");
const [statusFilter, setStatusFilter] = useState<
"all" | "active" | "busy" | "inactive"
>("all");
- const [selectedPhotographer, setSelectedPhotographer] =
- useState(null);
+ const [selectedProfessional, setSelectedProfessional] =
+ useState(null);
const [showAddModal, setShowAddModal] = useState(false);
- const [newPhotographer, setNewPhotographer] = useState({
+
+ const [newProfessional, setNewProfessional] = useState>({
name: "",
+ role: "Fotógrafo",
+ address: {
+ street: "",
+ number: "",
+ complement: "",
+ neighborhood: "",
+ city: "",
+ state: "",
+ },
+ whatsapp: "",
+ cpfCnpj: "",
+ bankInfo: {
+ bank: "",
+ agency: "",
+ accountPix: "",
+ },
+ hasCar: false,
+ hasStudio: false,
+ studioQuantity: 0,
+ cardType: "",
+ accountHolder: "",
+ observations: "",
+ ratings: {
+ technicalQuality: 0,
+ appearance: 0,
+ education: 0,
+ sympathy: 0,
+ eventPerformance: 0,
+ scheduleAvailability: 0,
+ average: 0,
+ },
+ freeTable: "",
+ extraFee: "",
email: "",
- phone: "",
- location: "",
- specialties: [] as string[],
+ specialties: [],
avatar: "",
});
+
const [avatarFile, setAvatarFile] = useState(null);
const [avatarPreview, setAvatarPreview] = useState("");
@@ -146,7 +263,7 @@ export const TeamPage: React.FC = () => {
setAvatarPreview("");
};
- const getStatusColor = (status: Photographer["status"]) => {
+ const getStatusColor = (status: Professional["status"]) => {
switch (status) {
case "active":
return "bg-green-100 text-green-800";
@@ -157,7 +274,7 @@ export const TeamPage: React.FC = () => {
}
};
- const getStatusLabel = (status: Photographer["status"]) => {
+ const getStatusLabel = (status: Professional["status"]) => {
switch (status) {
case "active":
return "Disponível";
@@ -168,23 +285,32 @@ export const TeamPage: React.FC = () => {
}
};
- const filteredPhotographers = MOCK_PHOTOGRAPHERS.filter((photographer) => {
+ const getRoleIcon = (role: ProfessionalRole) => {
+ switch (role) {
+ case "Fotógrafo":
+ return Camera;
+ case "Cinegrafista":
+ return Video;
+ case "Recepcionista":
+ return UserCheck;
+ }
+ };
+
+ const filteredProfessionals = MOCK_PROFESSIONALS.filter((professional) => {
const matchesSearch =
- photographer.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
- photographer.email.toLowerCase().includes(searchTerm.toLowerCase());
+ professional.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
+ professional.email.toLowerCase().includes(searchTerm.toLowerCase());
+ const matchesRole = roleFilter === "all" || professional.role === roleFilter;
const matchesStatus =
- statusFilter === "all" || photographer.status === statusFilter;
- return matchesSearch && matchesStatus;
+ statusFilter === "all" || professional.status === statusFilter;
+ return matchesSearch && matchesRole && matchesStatus;
});
const stats = {
- total: MOCK_PHOTOGRAPHERS.length,
- active: MOCK_PHOTOGRAPHERS.filter((p) => p.status === "active").length,
- busy: MOCK_PHOTOGRAPHERS.filter((p) => p.status === "busy").length,
- avgRating: (
- MOCK_PHOTOGRAPHERS.reduce((acc, p) => acc + p.rating, 0) /
- MOCK_PHOTOGRAPHERS.length
- ).toFixed(1),
+ photographers: MOCK_PROFESSIONALS.filter((p) => p.role === "Fotógrafo").length,
+ cinematographers: MOCK_PROFESSIONALS.filter((p) => p.role === "Cinegrafista").length,
+ receptionists: MOCK_PROFESSIONALS.filter((p) => p.role === "Recepcionista").length,
+ total: MOCK_PROFESSIONALS.length,
};
return (
@@ -193,15 +319,15 @@ export const TeamPage: React.FC = () => {
{/* Header */}
- Equipe & Fotógrafos
+ Equipe
- Gerencie sua equipe de fotógrafos profissionais
+ Gerencie sua equipe de profissionais
{/* Stats */}
-
+
@@ -209,43 +335,32 @@ export const TeamPage: React.FC = () => {
Total de Fotógrafos
- {stats.total}
+ {stats.photographers}
-
+
-
Disponíveis
-
- {stats.active}
+
Total de Cinegrafistas
+
+ {stats.cinematographers}
-
+
-
Em Evento
-
- {stats.busy}
+
Total de Recepcionistas
+
+ {stats.receptionists}
-
-
-
-
-
-
-
Avaliação Média
-
- {stats.avgRating}
-
-
-
+
@@ -268,145 +383,202 @@ export const TeamPage: React.FC = () => {
setStatusFilter("all")}
- className={`px-4 py-2 rounded-md font-medium transition-colors ${statusFilter === "all"
+ onClick={() => setRoleFilter("all")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ roleFilter === "all"
? "bg-brand-gold text-white"
: "bg-gray-100 text-gray-700 hover:bg-gray-200"
- }`}
+ }`}
>
Todos
+ setRoleFilter("Fotógrafo")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ roleFilter === "Fotógrafo"
+ ? "bg-brand-gold text-white"
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"
+ }`}
+ >
+ Fotógrafos
+
+ setRoleFilter("Cinegrafista")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ roleFilter === "Cinegrafista"
+ ? "bg-blue-600 text-white"
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"
+ }`}
+ >
+ Cinegrafistas
+
+ setRoleFilter("Recepcionista")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ roleFilter === "Recepcionista"
+ ? "bg-purple-600 text-white"
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"
+ }`}
+ >
+ Recepcionistas
+
+
+
+ {/* Status Filters */}
+
+ setStatusFilter("all")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ statusFilter === "all"
+ ? "bg-brand-gold text-white"
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"
+ }`}
+ >
+ Todos Status
+
setStatusFilter("active")}
- className={`px-4 py-2 rounded-md font-medium transition-colors ${statusFilter === "active"
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ statusFilter === "active"
? "bg-green-600 text-white"
: "bg-gray-100 text-gray-700 hover:bg-gray-200"
- }`}
+ }`}
>
- Disponíveis
+ Disponível
setStatusFilter("busy")}
- className={`px-4 py-2 rounded-md font-medium transition-colors ${statusFilter === "busy"
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ statusFilter === "busy"
? "bg-yellow-600 text-white"
: "bg-gray-100 text-gray-700 hover:bg-gray-200"
- }`}
+ }`}
>
Em Evento
+ setStatusFilter("inactive")}
+ className={`px-4 py-2 rounded-md font-medium transition-colors ${
+ statusFilter === "inactive"
+ ? "bg-gray-600 text-white"
+ : "bg-gray-100 text-gray-700 hover:bg-gray-200"
+ }`}
+ >
+ Inativo
+
+
setShowAddModal(true)}
>
- Adicionar Fotógrafo
+ Adicionar Profissional
- {/* Photographers Grid */}
-