import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { SettingDefinition, adminSettingsApi } from '../../api/adminSettings'; import { ChevronDownIcon } from './icons'; import { SettingRow } from './SettingRow'; interface CategoryGroup { key: string; label: string; settings: SettingDefinition[]; } interface SettingsTabProps { categories: CategoryGroup[]; searchQuery: string; filteredSettings: SettingDefinition[]; isFavorite: (key: string) => boolean; toggleFavorite: (key: string) => void; } export function SettingsTab({ categories, searchQuery, filteredSettings, isFavorite, toggleFavorite, }: SettingsTabProps) { const { t } = useTranslation(); const queryClient = useQueryClient(); const [expandedSections, setExpandedSections] = useState>(new Set()); const toggleSection = (key: string) => { setExpandedSections((prev) => { const next = new Set(prev); if (next.has(key)) { next.delete(key); } else { next.add(key); } return next; }); }; const updateSettingMutation = useMutation({ mutationFn: ({ key, value }: { key: string; value: string }) => adminSettingsApi.updateSetting(key, value), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-settings'] }); }, }); const resetSettingMutation = useMutation({ mutationFn: (key: string) => adminSettingsApi.resetSetting(key), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-settings'] }); }, }); // If searching, show flat list if (searchQuery) { return (
{filteredSettings.length === 0 ? (

{t('admin.settings.noSettings')}

) : (
{filteredSettings.map((setting) => ( toggleFavorite(setting.key)} onUpdate={(value) => updateSettingMutation.mutate({ key: setting.key, value })} onReset={() => resetSettingMutation.mutate(setting.key)} isUpdating={updateSettingMutation.isPending} isResetting={resetSettingMutation.isPending} /> ))}
)}
); } // Show accordion for subcategories return (
{categories.map((cat) => { const isExpanded = expandedSections.has(cat.key); return (
{/* Accordion header */} {/* Accordion content */} {isExpanded && (
{cat.settings.map((setting) => ( toggleFavorite(setting.key)} onUpdate={(value) => updateSettingMutation.mutate({ key: setting.key, value }) } onReset={() => resetSettingMutation.mutate(setting.key)} isUpdating={updateSettingMutation.isPending} isResetting={resetSettingMutation.isPending} /> ))}
)}
); })} {categories.length === 0 && (

{t('admin.settings.noSettings')}

)}
); }