import React, {useContext, useState} from 'react' import {useLoaderData, useNavigate, useParams} from "react-router-dom"; import {Button, InputGroup, Modal, OverlayTrigger, Toast, ToastContainer} from "react-bootstrap"; import {ChangeLvl1Osztaly, DefaultKarakter, Karakter2E} from "../domain-models/karakter2E"; import {KarakterTulajdonsagok} from "../domain-models/tulajdonsag2E"; import FajSelector2E from "../components/FajSelector2E"; import Tulajdonsagok2E from "../components/Tulajdonsagok2E"; import OsztalySelector2E from "../components/OsztalySelector2E"; import {Osztaly2E} from "../domain-models/osztaly2E"; import { GetKepzettsegListaN, GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek, SetDefaultTolvajKepzettsegek } from "../domain-models/kepzettsegek2E"; import KarakterKepzettsegek from "../components/KarakterKepzettsegek2E"; import {TulajdonsagokFajjal} from "../domain-models/faj2E"; import JellemSelector from "../components/JellemSelector"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import Felszereles from "../components/Felszereles"; import {KarakterFelszereles} from "../domain-models/felszereles"; import LevelUps from "../components/LevelUps"; import {LevelDown, LevelUp} from "../domain-models/szintlepes"; import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpec"; import {arraySetN} from "../../util"; import saveOverlayTooltip from "../../first-edition/components/SaveOverlayTooltip"; import {UserContext} from "../../shared/contexts/UserContext"; import { StoreNewCharacter2E, UpdateCharacter2E } from "../api/character.api"; import {Faro} from "@grafana/faro-web-sdk"; import Form from "react-bootstrap/Form"; import {CreatePDF} from "../pdf/character.pdf"; import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; function CreateCharacter2E(props: { faro?: Faro }) { const {faro} = props const { id } = useParams(); const fetchedUser = useContext(UserContext); const loaderData = useLoaderData() as Karakter2E & { isPublic: boolean } | undefined; let initialKarakterInputs = DefaultKarakter; if (loaderData != null) { const { isPublic: t1, ...t2 } = loaderData; initialKarakterInputs = t2 } const initialIsPublic = loaderData?.isPublic ?? fetchedUser?.data == null; const navigate = useNavigate(); const [karakter, setKarakter] = useState(initialKarakterInputs) const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) const changeKepzettseg = (k: KepzettsegId[]) => setKarakter({...karakter, kepzettsegek: k}) const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => setKarakter({...karakter, tolvajKepzettsegek: tk}) SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) const changeFelszereles = (f: KarakterFelszereles) => setKarakter({...karakter, felszereles: f}) 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}/2e/karakter/${newId}` const handleSaveModalCopyAndClose = async () => { await navigator.clipboard.writeText(newCharacterUrl()); handleSaveModalClose() } const handleSaveModalClose = () => { setShowSaveModal(false); navigate(`/2e/karakter/${newId}`) } const hideSaved = () => setShowSaved(false); const onSaveClicked = async () => { faro?.api.pushEvent('character_stored', { osztaly: karakter.szintlepesek[0].osztaly.toString(), szint: karakter.szint.toString(), faj: karakter.faj.toString(), is_public: isPublic.toString(), edition: "2e", }) if (id == null) { let recievedId = await StoreNewCharacter2E(karakter, isPublic); setNewId(recievedId) setShowSaveModal(true); } else { await UpdateCharacter2E(id, karakter, isPublic); setShowSaved(true); setTimeout(() => { hideSaved(); }, 5000) } } return
Karaktered az alábbi {isPublic ? 'publikus' : 'privát'} URLen érhető el.