mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
add loaders
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import React, {useState} from 'react'
|
import React, {useState} from 'react'
|
||||||
import {useLoaderData, useNavigate, useParams} from "react-router-dom";
|
import {useLoaderData, useNavigate, useParams} from "react-router-dom";
|
||||||
import {OverlayTrigger, Toast, ToastContainer} from "react-bootstrap";
|
import {OverlayTrigger, Spinner, Toast, ToastContainer} from "react-bootstrap";
|
||||||
import {Karakter2E} from "../domain-models/karakter2E";
|
import {Karakter2E} from "../domain-models/karakter2E";
|
||||||
import Tulajdonsagok2E from "../components/Tulajdonsagok2E";
|
import Tulajdonsagok2E from "../components/Tulajdonsagok2E";
|
||||||
import OsztalySelector2E from "../components/OsztalySelector2E";
|
import OsztalySelector2E from "../components/OsztalySelector2E";
|
||||||
@@ -40,6 +40,8 @@ function CreateCharacter2E(props: {
|
|||||||
let [showSaveModal, setShowSaveModal] = useState(false);
|
let [showSaveModal, setShowSaveModal] = useState(false);
|
||||||
let [newId, setNewId] = useState(null as string | null)
|
let [newId, setNewId] = useState(null as string | null)
|
||||||
let [showSaved, setShowSaved] = useState(false);
|
let [showSaved, setShowSaved] = useState(false);
|
||||||
|
let [isPDFRendering, setIsPDFRendering] = useState<boolean>(false)
|
||||||
|
let [isSaving, setIsSaving] = useState<boolean>(false)
|
||||||
let [isPublic, setIsPublic] = useState(initialIsPublic);
|
let [isPublic, setIsPublic] = useState(initialIsPublic);
|
||||||
const newCharacterUrl = () => `${window.location.origin}/2e/karakter/${newId}`
|
const newCharacterUrl = () => `${window.location.origin}/2e/karakter/${newId}`
|
||||||
|
|
||||||
@@ -54,6 +56,7 @@ function CreateCharacter2E(props: {
|
|||||||
}
|
}
|
||||||
const hideSaved = () => setShowSaved(false);
|
const hideSaved = () => setShowSaved(false);
|
||||||
const onSaveClicked = async () => {
|
const onSaveClicked = async () => {
|
||||||
|
setIsSaving(true);
|
||||||
faro?.api.pushEvent('character_stored', {
|
faro?.api.pushEvent('character_stored', {
|
||||||
osztaly: karakter.szintlepesek[0].osztaly.toString(),
|
osztaly: karakter.szintlepesek[0].osztaly.toString(),
|
||||||
szint: karakter.szint.toString(),
|
szint: karakter.szint.toString(),
|
||||||
@@ -64,9 +67,11 @@ function CreateCharacter2E(props: {
|
|||||||
if (id == null) {
|
if (id == null) {
|
||||||
let recievedId = await StoreNewCharacter2E(karakter, isPublic);
|
let recievedId = await StoreNewCharacter2E(karakter, isPublic);
|
||||||
setNewId(recievedId)
|
setNewId(recievedId)
|
||||||
|
setIsSaving(false)
|
||||||
setShowSaveModal(true);
|
setShowSaveModal(true);
|
||||||
} else {
|
} else {
|
||||||
await UpdateCharacter2E(id, karakter, isPublic);
|
await UpdateCharacter2E(id, karakter, isPublic);
|
||||||
|
setIsSaving(false)
|
||||||
setShowSaved(true);
|
setShowSaved(true);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
hideSaved();
|
hideSaved();
|
||||||
@@ -157,30 +162,34 @@ function CreateCharacter2E(props: {
|
|||||||
className='btn btn-danger btn-lg'
|
className='btn btn-danger btn-lg'
|
||||||
type='button'
|
type='button'
|
||||||
onClick={onSaveClicked}
|
onClick={onSaveClicked}
|
||||||
|
disabled={isSaving}
|
||||||
>
|
>
|
||||||
Mentés
|
Mentés {isSaving ? <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true" /> : ""}
|
||||||
</button>
|
</button>
|
||||||
</OverlayTrigger>
|
</OverlayTrigger>
|
||||||
: <button
|
: <button
|
||||||
className='btn btn-danger btn-lg'
|
className='btn btn-danger btn-lg'
|
||||||
type='button'
|
type='button'
|
||||||
onClick={onSaveClicked}
|
onClick={onSaveClicked}
|
||||||
|
disabled={isSaving}
|
||||||
>
|
>
|
||||||
Mentés
|
Mentés {isSaving ? <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true" /> : ""}
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-6">
|
<div className="col-6">
|
||||||
<div className='d-grid gap-2 m-5'>
|
<div className='d-grid gap-2 m-5'>
|
||||||
<button className='btn btn-danger btn-lg' type='button' onClick={async () => {
|
<button className='btn btn-danger btn-lg' type='button' disabled={isPDFRendering} onClick={async () => {
|
||||||
faro?.api.pushEvent('character_created', {
|
faro?.api.pushEvent('character_created', {
|
||||||
osztaly: karakter.szintlepesek[0].osztaly,
|
osztaly: karakter.szintlepesek[0].osztaly,
|
||||||
szint: karakter.szint.toString(),
|
szint: karakter.szint.toString(),
|
||||||
faj: karakter.faj.toString(),
|
faj: karakter.faj.toString(),
|
||||||
})
|
})
|
||||||
|
setIsPDFRendering(true)
|
||||||
await CreatePDF(KarakterInputToPdfView(karakter))
|
await CreatePDF(KarakterInputToPdfView(karakter))
|
||||||
}}>PDF
|
setIsPDFRendering(false)
|
||||||
|
}}>PDF {isPDFRendering ? <Spinner as="span" animation="border" size="sm" role="status" aria-hidden="true" /> : ""}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user