import React, {useContext, useState} from 'react'; import './CreateCharacter.css' import {Faj, TulajdonsagokFajjal} from "../domain-models/faj"; import {Osztaly, SetFelszerelesForChangedOsztaly} from "../domain-models/osztaly" import FajSelector from "../components/FajSelector"; import Tulajdonsagok from "../components/Tulajdonsagok"; import OsztalySelector from "../components/OsztalySelector"; import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import { AvailableKezpettsegList, GetKepzettsegListaN, GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek, SetDefaultTolvajKepzettsegek, } from "../domain-models/kepzettsegek"; import {CreatePDF} from "../pdf/character.pdf"; import {KarakterDefaults, KarakterInputs} from "../domain-models/karakter"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; import JellemSelector from "../components/JellemSelector"; import {CanLevelUp, LevelDown, LevelUp} from "../domain-models/level"; import {Button, Card, InputGroup, Modal, OverlayTrigger, Toast, ToastContainer} from "react-bootstrap"; import Form from "react-bootstrap/Form"; import LevelUps from "../components/LevelUps"; import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio"; import Felszereles from '../components/Felszereles'; import { KarakterFelszereles } from '../domain-models/felszereles'; import {Faro} from "@grafana/faro-web-sdk"; import {StoreNewCharacter, UpdateCharacter} from "../api/character.api"; import {useLoaderData, useNavigate, useParams} from "react-router-dom"; import saveOverlayTooltip from "../components/SaveOverlayTooltip"; import {UserContext} from "../../shared/contexts/UserContext"; import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag"; function CreateCharacterPage(props: { faro?: Faro, }) { const {faro} = props const loaderData = useLoaderData() as KarakterInputs & { isPublic: boolean } | undefined; let initialKarakterInputs = KarakterDefaults; if (loaderData != null) { const { isPublic: t1, ...t2 } = loaderData; initialKarakterInputs = t2 } const { id } = useParams(); const fetchedUser = useContext(UserContext); const initialIsPublic = loaderData?.isPublic ?? fetchedUser?.data == null; const navigate = useNavigate(); let [karakter, changeKarakter] = useState(initialKarakterInputs) const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) const changeKepzettseg = (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k}) const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk}) SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) const setFelszereles = (f: KarakterFelszereles) => changeKarakter({...karakter, felszereles: f}) SetFelszerelesForChangedOsztaly(karakter.osztaly, karakter.felszereles, setFelszereles) const levelUp = () => LevelUp(karakter, changeKarakter) const levelDown = () => LevelDown(karakter, changeKarakter) const canLevelUp = CanLevelUp(karakter) let [showSaveModal, setShowSaveModal] = useState(false); let [newId, setNewId] = useState(null as string | null) let [showSaved, setShowSaved] = useState(false); let [isPublic, setIsPublic] = useState(initialIsPublic); const newCharacterUrl = () => `${window.location.origin}/1e/karakter/${newId}` const handleSaveModalCopyAndClose = async () => { await navigator.clipboard.writeText(newCharacterUrl()); handleSaveModalClose() } const handleSaveModalClose = () => { setShowSaveModal(false); navigate(`/1e/karakter/${newId}`) } const hideSaved = () => setShowSaved(false); const onSaveClicked = async () => { faro?.api.pushEvent('character_stored', { osztaly: karakter.osztaly, szint: karakter.szint.toString(), faj: karakter.faj.toString(), is_public: isPublic.toString(), }) if (id == null) { let recievedId = await StoreNewCharacter(karakter, isPublic); setNewId(recievedId) setShowSaveModal(true); } else { await UpdateCharacter(id, karakter, isPublic); setShowSaved(true); setTimeout(() => { hideSaved(); }, 5000) } } return (

Karakter {!!id ? "szerkesztése" : "létrehozása"}

Karakter mentve! Karakter mentve!

Karaktered az alábbi {isPublic ? 'publikus' : 'privát'} URLen érhető el.

{newCharacterUrl()}

event.preventDefault()}>
Származás
changeKarakter({...karakter, name: e.target.value})}/> {!karakter.name && A karaktered nem mászkálhat névtelenül a világban!}
changeKarakter({...karakter, nem: e.target.value})}/>
changeKarakter({...karakter, kor: Number(e.target.value)})}/>
changeKarakter({...karakter, jellem: val})}/>
changeKarakter({...karakter, isten: e.target.value})}/>
changeKarakter({...karakter, faj: faj})} faj={karakter.faj} />
changeKarakter({ ...karakter, tulajdonsagok: tul })} />
Tanult
changeKarakter({ ...karakter, osztaly: o, harcosSpecializaciok: (o === Osztaly.Harcos && karakter.harcosSpecializaciok.length === 0) ? ['hosszu_kard'] : karakter.harcosSpecializaciok, })} /> {karakter.osztaly === Osztaly.Harcos &&
changeKarakter({ ...karakter, harcosSpecializaciok: [spec, ...karakter.harcosSpecializaciok.slice(1)] })} szint={1} />
}

{karakter.szint > 1 &&
}
{canLevelUp && } {!canLevelUp && karakter.szint < 10 && Elérted a fajod szint limitjét} {karakter.szint > 1 && }


Véglegesítés
{fetchedUser.data != null &&
}
{fetchedUser.data == null ? : }
); } export default CreateCharacterPage;