import CollapsableArea from "@/components/CollapsableArea"; import InputField from "@/components/form/InputField"; import TexteAreaInput from "@/components/form/TexteAreaInput"; import TextInput from "@/components/form/TextInput"; import SelectBox from "@/components/form/SelectBox"; import {AlertContext} from "@/context/AlertContext"; import {SessionContext} from "@/context/SessionContext"; import { CharacterAttribute, characterCategories, CharacterElement, characterElementCategory, CharacterProps, characterTitle } from "@/lib/models/Character"; import System from "@/lib/models/System"; import { faAddressCard, faArrowLeft, faBook, faLayerGroup, faPlus, faSave, faScroll, faUser } from "@fortawesome/free-solid-svg-icons"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {Dispatch, SetStateAction, useContext, useEffect} from "react"; import CharacterSectionElement from "@/components/book/settings/characters/CharacterSectionElement"; import {useTranslations} from "next-intl"; import {LangContext} from "@/context/LangContext"; interface CharacterDetailProps { selectedCharacter: CharacterProps | null; setSelectedCharacter: Dispatch>; handleCharacterChange: (key: keyof CharacterProps, value: string) => void; handleAddElement: (section: keyof CharacterProps, element: any) => void; handleRemoveElement: ( section: keyof CharacterProps, index: number, attrId: string, ) => void; handleSaveCharacter: () => void; } export default function CharacterDetail( { setSelectedCharacter, selectedCharacter, handleCharacterChange, handleRemoveElement, handleAddElement, handleSaveCharacter, }: CharacterDetailProps ) { const t = useTranslations(); const {lang} = useContext(LangContext); const {session} = useContext(SessionContext); const {errorMessage} = useContext(AlertContext); useEffect((): void => { if (selectedCharacter?.id !== null) { getAttributes().then(); } }, []); async function getAttributes(): Promise { try { const response: CharacterAttribute = await System.authGetQueryToServer(`character/attribute`, session.accessToken, lang, { characterId: selectedCharacter?.id, }); if (response) { setSelectedCharacter({ id: selectedCharacter?.id ?? '', name: selectedCharacter?.name ?? '', image: selectedCharacter?.image ?? '', lastName: selectedCharacter?.lastName ?? '', category: selectedCharacter?.category ?? 'none', title: selectedCharacter?.title ?? '', biography: selectedCharacter?.biography, history: selectedCharacter?.history, role: selectedCharacter?.role ?? '', physical: response.physical ?? [], psychological: response.psychological ?? [], relations: response.relations ?? [], skills: response.skills ?? [], weaknesses: response.weaknesses ?? [], strengths: response.strengths ?? [], goals: response.goals ?? [], motivations: response.motivations ?? [], }); } } catch (e: unknown) { if (e instanceof Error) { errorMessage(e.message); } else { errorMessage(t("characterDetail.fetchAttributesError")); } } } return (
{selectedCharacter?.name || t("characterDetail.newCharacter")}
handleCharacterChange('name', e.target.value)} placeholder={t("characterDetail.namePlaceholder")} /> } /> handleCharacterChange('lastName', e.target.value)} placeholder={t("characterDetail.lastNamePlaceholder")} /> } /> setSelectedCharacter(prev => prev ? {...prev, category: e.target.value as CharacterProps['category']} : prev )} data={characterCategories} /> } icon={faLayerGroup} /> handleCharacterChange('title', e.target.value)} data={characterTitle} /> } icon={faAddressCard} />
handleCharacterChange('biography', e.target.value)} placeholder={t("characterDetail.biographyPlaceholder")} /> } icon={faBook} /> handleCharacterChange('history', e.target.value)} placeholder={t("characterDetail.historyPlaceholder")} /> } icon={faScroll} /> handleCharacterChange('role', e.target.value)} placeholder={t("characterDetail.roleFullPlaceholder")} /> } icon={faScroll} />
{characterElementCategory.map((item: CharacterElement, index: number) => ( ))}
); }