import React, { useState, useEffect } from 'react'; import { IPublicClientApplication } from '@azure/msal-browser'; import { LogoutIcon } from './icons/LogoutIcon'; import { QuestionMarkIcon } from './icons/QuestionMarkIcon'; import { getUserInfo, UserInfo } from '../services/authService'; import { apiService } from '../services/apiService'; import { useUser } from '../contexts/UserContext'; import type { UserRole } from '../types'; const ROLE_LABELS: Record = { super_admin: 'Super Admin', oversight_admin: 'Oversight Admin', agency_admin: 'Agency Admin', basic_user: 'Standard User', }; interface ProfileProps { onLogout: () => void; msalInstance: IPublicClientApplication; } export const Profile: React.FC = ({ onLogout, msalInstance }) => { const [isQuestionFormVisible, setIsQuestionFormVisible] = useState(false); const [question, setQuestion] = useState(''); const [userInfo, setUserInfo] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const [submitStatus, setSubmitStatus] = useState<{ type: 'success' | 'error'; message: string } | null>(null); const { user } = useUser(); useEffect(() => { const info = getUserInfo(msalInstance); setUserInfo(info); }, [msalInstance]); const getRoleDisplay = (): string => { if (!user) return 'Loading...'; return ROLE_LABELS[user.role] ?? user.role; }; const userDetails = userInfo ? { 'First Name': userInfo.firstName || 'N/A', 'Last Name': userInfo.lastName || 'N/A', 'Email': userInfo.email, 'Role': getRoleDisplay(), 'Agency': user?.agencyName || 'N/A', } : { 'First Name': '', 'Last Name': '', 'Email': '', 'Role': 'Loading...', 'Agency': '', }; const handleLogout = () => { onLogout(); }; const handleToggleQuestionForm = () => { setIsQuestionFormVisible(prev => !prev); }; const handleSubmitQuestion = async (e: React.FormEvent) => { e.preventDefault(); if (!question.trim()) { setSubmitStatus({ type: 'error', message: 'Please enter a question before submitting.' }); return; } setIsSubmitting(true); setSubmitStatus(null); try { await apiService.sendSupportEmail({ message: question, subject: 'Question from Mod Comms User', user_name: userInfo ? `${userInfo.firstName} ${userInfo.lastName}`.trim() : undefined, user_email: userInfo?.email, }); setSubmitStatus({ type: 'success', message: 'Your question has been submitted. We\'ll get back to you shortly.' }); setQuestion(''); setTimeout(() => { setIsQuestionFormVisible(false); setSubmitStatus(null); }, 3000); } catch (error) { setSubmitStatus({ type: 'error', message: 'Failed to submit question. Please try again later.' }); } finally { setIsSubmitting(false); } }; return (

Your Profile

View your account details and manage settings.

Account Information

{Object.entries(userDetails).map(([key, value]) => (

{key}

{value}

))}
{isQuestionFormVisible && (

Ask a Question

Your question will be sent to the OLIVER Agency support team.

{submitStatus && (
{submitStatus.message}
)}