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 (
Karaktered az alábbi {isPublic ? 'publikus' : 'privát'} URLen érhető el.