'use client' import React, {lazy, Suspense, useContext, useRef} from 'react'; import {useTranslations} from '@/lib/i18n'; import SectionHeader from "@/components/ui/SectionHeader"; import IconButton from "@/components/ui/IconButton"; import {Save} from 'lucide-react'; import PulseLoader from '@/components/ui/PulseLoader'; import {SeriesContext, SeriesContextProps} from '@/context/SeriesContext'; import {SettingRef} from "@/lib/types/settings"; // Lazy loaded components - avec ref (anciens) const BasicSeriesInformation = lazy(function () { return import('./settings/BasicSeriesInformation'); }); const SeriesBooksManager = lazy(function () { return import('./settings/SeriesBooksManager'); }); // Lazy loaded components - sans ref (nouveaux avec leur propre header) const WorldSettings = lazy(function () { return import('@/components/book/settings/world/settings/WorldSettings'); }); const LocationSettings = lazy(function () { return import('@/components/book/settings/locations/settings/LocationSettings'); }); const CharacterSettings = lazy(function () { return import('@/components/book/settings/characters/settings/CharacterSettings'); }); const SpellSettings = lazy(function () { return import('@/components/book/settings/spells/settings/SpellSettings'); }); interface SeriesSettingOptionProps { setting: string; } // Settings qui gèrent leur propre save (pas de bouton save parent) const selfManagedSettings: string[] = ['characters', 'spells', 'worlds', 'locations']; export default function SeriesSettingOption({setting}: SeriesSettingOptionProps): React.JSX.Element { const t = useTranslations(); const {seriesId}: SeriesContextProps = useContext(SeriesContext); const settingRef: React.RefObject = useRef(null); const showSaveButton: boolean = !selfManagedSettings.includes(setting); function renderTitle(): string { switch (setting) { case 'basic-information': return t("seriesSettingOption.basicInformation"); case 'books': return t("seriesSettingOption.books"); case 'characters': return t("seriesSettingOption.characters"); case 'worlds': return t("seriesSettingOption.worlds"); case 'locations': return t("seriesSettingOption.locations"); case 'spells': return t("seriesSettingOption.spells"); default: return ""; } } async function handleSaveClick(): Promise { if (settingRef.current?.handleSave) { await settingRef.current.handleSave(); } } return (
) : undefined} />
}> {setting === 'basic-information' && } {setting === 'books' && } {setting === 'worlds' && ( )} {setting === 'locations' && ( )} {setting === 'characters' && ( )} {setting === 'spells' && ( )} {!['basic-information', 'books', 'worlds', 'locations', 'characters', 'spells'].includes(setting) && (
{t("bookSettingOption.notAvailable")}
)}
); }