From 8abe228d8937ddc7fa43045df0c455182ba0021f Mon Sep 17 00:00:00 2001 From: morbalint Date: Mon, 22 Jan 2024 12:51:40 +0100 Subject: [PATCH] [fe] improve first time save UX --- .../first-edition/pages/CreateCharacter.tsx | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/Kemkas.Web/frontend/src/first-edition/pages/CreateCharacter.tsx b/Kemkas.Web/frontend/src/first-edition/pages/CreateCharacter.tsx index 5b03952..d53bffc 100644 --- a/Kemkas.Web/frontend/src/first-edition/pages/CreateCharacter.tsx +++ b/Kemkas.Web/frontend/src/first-edition/pages/CreateCharacter.tsx @@ -21,7 +21,8 @@ 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 {Card, OverlayTrigger, Toast, ToastContainer} from "react-bootstrap"; +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'; @@ -39,7 +40,6 @@ function CreateCharacterPage(props: { const {faro} = props const loaderData = useLoaderData() as KarakterInputs & { isPublic: boolean } | undefined; - const initialIsPublic = loaderData?.isPublic ?? false; let initialKarakterInputs = KarakterDefaults; if (loaderData != null) { const { isPublic: t1, ...t2 } = loaderData; @@ -47,6 +47,9 @@ function CreateCharacterPage(props: { } const { id } = useParams(); const fetchedUser = useContext(UserContext); + + const initialIsPublic = loaderData?.isPublic ?? fetchedUser?.data == null; + const navigate = useNavigate(); let [karakter, changeKarakter] = useState(initialKarakterInputs) @@ -65,9 +68,25 @@ function CreateCharacterPage(props: { 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 () => { @@ -78,9 +97,9 @@ function CreateCharacterPage(props: { is_public: isPublic.toString(), }) if (id == null) { - let newId = await StoreNewCharacter(karakter, isPublic); - setShowSaved(true); - navigate(`/1e/karakter/${newId}`) + let recievedId = await StoreNewCharacter(karakter, isPublic); + setNewId(recievedId) + setShowSaveModal(true); } else { await UpdateCharacter(id, karakter, isPublic); setShowSaved(true); @@ -97,9 +116,31 @@ function CreateCharacterPage(props: { - Karakter mentve! + Karakter mentve! + + + Karakter mentve! + + +

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

+

{newCharacterUrl()}

+ + + + +
+ + + +
event.preventDefault()}>