import React from 'react'; import { useSearchParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { AdminLayout } from '../components/AdminLayout'; import { TasksSection } from './TasksPage'; import { TaskCollectionsSection } from './TaskCollectionsPage'; import { EmotionsSection } from './EmotionsPage'; const TAB_KEYS = ['tasks', 'collections', 'emotions'] as const; type EngagementTab = (typeof TAB_KEYS)[number]; function ensureValidTab(value: string | null): EngagementTab { if (value && (TAB_KEYS as readonly string[]).includes(value)) { return value as EngagementTab; } return 'tasks'; } export default function EngagementPage(): JSX.Element { const { t } = useTranslation('management'); const { t: tc } = useTranslation('common'); const [searchParams, setSearchParams] = useSearchParams(); const initialTab = React.useMemo(() => ensureValidTab(searchParams.get('tab')), [searchParams]); const [activeTab, setActiveTab] = React.useState(initialTab); const handleTabChange = React.useCallback( (next: string) => { const valid = ensureValidTab(next); setActiveTab(valid); setSearchParams((prev) => { const params = new URLSearchParams(prev); params.set('tab', valid); return params; }); }, [setSearchParams] ); const heading = tc('navigation.engagement'); return ( {tc('navigation.tasks')} {tc('navigation.collections')} {tc('navigation.emotions')} handleTabChange('collections')} /> handleTabChange('tasks')} /> ); }