'use client'
import React, {lazy, Suspense, useContext, useRef} from 'react';
import {faPen, faSave} from '@fortawesome/free-solid-svg-icons';
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
import {faSpinner} from '@fortawesome/free-solid-svg-icons';
import {useTranslations} from 'next-intl';
import PanelHeader from '@/components/PanelHeader';
import {SeriesContext} from '@/context/SeriesContext';
// 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');
});
function LoadingSpinner(): React.JSX.Element {
return (
);
}
interface SeriesSettingOptionProps {
setting: string;
}
interface SettingRef {
handleSave: () => Promise;
}
// 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} = useContext(SeriesContext);
const settingRef = 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 (
}>
{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")}
)}
);
}