From b57d56c20aa4fcb30e38fe7735ed4dae86a068ea Mon Sep 17 00:00:00 2001 From: Akito123321 Date: Thu, 29 Aug 2024 18:08:57 +0200 Subject: [PATCH] litle progress --- src/pages/StratPage.module.css | 0 src/pages/StratPage.tsx | 107 ++++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 src/pages/StratPage.module.css diff --git a/src/pages/StratPage.module.css b/src/pages/StratPage.module.css new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/StratPage.tsx b/src/pages/StratPage.tsx index ba7538d..d083e41 100644 --- a/src/pages/StratPage.tsx +++ b/src/pages/StratPage.tsx @@ -1,7 +1,110 @@ -import { Component } from "solid-js"; +import styles from './StratPage.module.css' +import { useNavigate, useParams } from "@solidjs/router"; +import { Component, createSignal, onMount, Show } from "solid-js"; +import { api, Group, Map, PlayerType, Strat } from "../api"; +import { showDialog, showMessageDialog } from "../state"; +import { errorToString, normalize } from "../util"; +import { BsCheck2, BsPencil } from 'solid-icons/bs'; const StratPage: Component = () => { - return <>strat page + const navigate = useNavigate(); + const params = useParams(); + + const [loading, setLoading] = createSignal(true); + const [group, setGroup] = createSignal({} as Group); + const [strat, setStrat] = createSignal({} as Strat); + const [editing, setEditing] = createSignal(false); + const [attempts, setAttempts] = createSignal(0); + const [success, setSuccess] = createSignal(0); + const [description, setDescription] = createSignal(''); + const [map, setMap] = createSignal({} as Map); + const [title, setTitle] = createSignal(''); + const [playerTypes, setPlayerTypes] = createSignal([] as PlayerType[]); + const [stratType, setStratType] = createSignal(''); + + onMount(async () => { + try { + setGroup(await api().getGroup(params.groupId)); + const strat = group().strats.find((s) => s.id === params.stratId); + if (!strat) throw Error('strat not found'); + setStrat(strat); + setAttempts(strat.attempts); + setSuccess(strat.success); + setDescription(strat.description); + setMap(strat.map); + setTitle(strat.title); + setPlayerTypes(strat.playerTypes); + setStratType(strat.stratType) + setLoading(false); + } catch (e) { + showMessageDialog('Failed to load group', errorToString(e)); + } + }); + + const updateStrat = async (newValue: Strat) => { + try { + await api().updateStrat(group().id, strat().id, newValue); + setStrat(newValue); + } catch (e) { + showMessageDialog('Failed to update strat', errorToString(e)); + } + }; + + const toggleEdit = async () => { + if (!editing()) { + setEditing(true); + } else { + updateStrat({ + ...strat(), + attempts: attempts(), + success: success(), + description: description(), + map: map(), + title: title(), + playerTypes: playerTypes(), + stratType: stratType() + }); + setEditing(false); + } + }; + + const deleteStrat = async () => { + showDialog({ + title: 'Delete strat', + text: 'Do you want to delete this strat?', + buttons: [ + { + name: 'Delete', + type: 'danger', + action: async () => { + try { + await api().removeStrat(group().id, strat().id); + navigate('/groups'); + } catch (e) { + showMessageDialog('Failed to delete group', errorToString(e)); + } + } + }, + { + name: 'Cancel', + action: () => { } + } + ] + }); + }; + + return <> + Loading...}> +

setTitle(normalize(e.currentTarget.innerText, 50, true))} /> + {editing() && {title().length}/50}

+ setDescription(normalize(e.currentTarget.innerText, 512, false))} /> + {editing() && {description().length}/512} +
+ + +
+
+ } export default StratPage \ No newline at end of file