From e37b61240bc77789d8a3e799dd5c3e30307c671a Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Fri, 18 Jul 2025 17:11:32 +0200 Subject: [PATCH] ui/routing: move scene down clans/:id" --- pkgs/clan-app/ui/src/routes/Clan/Clan.tsx | 106 ++++++++++++++++++++-- pkgs/clan-app/ui/src/routes/index.tsx | 5 +- 2 files changed, 100 insertions(+), 11 deletions(-) diff --git a/pkgs/clan-app/ui/src/routes/Clan/Clan.tsx b/pkgs/clan-app/ui/src/routes/Clan/Clan.tsx index 55e2ee0f7..416b46d6c 100644 --- a/pkgs/clan-app/ui/src/routes/Clan/Clan.tsx +++ b/pkgs/clan-app/ui/src/routes/Clan/Clan.tsx @@ -1,10 +1,14 @@ import { RouteSectionProps } from "@solidjs/router"; -import { Component, JSX } from "solid-js"; -import { useMaybeClanURI } from "@/src/hooks/clan"; +import { Component, createEffect, JSX } from "solid-js"; +import { useClanURI } from "@/src/hooks/clan"; import { CubeScene } from "@/src/scene/cubes"; import { MachinesQueryResult, useMachinesQuery } from "@/src/queries/queries"; +import { callApi } from "@/src/hooks/api"; +import { store, setStore } from "@/src/stores/clan"; +import { produce } from "solid-js/store"; +import { Button } from "@/src/components/Button/Button"; -export const Clans: Component = (props) => { +export const Clan: Component = (props) => { return ( <>
= (props) => { > {props.children}
- + ); }; -const ClanSwitchDog = () => { - const maybeClanURI = useMaybeClanURI(); +const ClanSceneController = () => { + const clanURI = useClanURI({ force: true }); + + const onCreate = async (id: string) => { + const api = callApi("create_machine", { + opts: { + clan_dir: { + identifier: clanURI, + }, + machine: { + name: id, + }, + }, + }); + const res = await api.result; + if (res.status === "error") { + // TODO: Handle displaying errors + console.error("Error creating machine:"); + + // Important: rejects the promise + throw new Error(res.errors[0].message); + } + return; + }; + + createEffect(() => { + console.log("sceneData changed:", store.sceneData); + }); return ( - - {({ query }) => } + + {({ query }) => { + return ( + <> +
+ + +
+ { + const clanURI = useClanURI({ force: true }); + return store.sceneData?.[clanURI]; + }} + setMachinePos={(machineId: string, pos: [number, number]) => { + console.log("calling setStore", machineId, pos); + setStore( + produce((s) => { + if (!s.sceneData) { + s.sceneData = {}; + } + if (!s.sceneData[clanURI]) { + s.sceneData[clanURI] = {}; + } + if (!s.sceneData[clanURI][machineId]) { + s.sceneData[clanURI][machineId] = { position: pos }; + } else { + s.sceneData[clanURI][machineId].position = pos; + } + }), + ); + }} + /> + + ); + }}
); }; diff --git a/pkgs/clan-app/ui/src/routes/index.tsx b/pkgs/clan-app/ui/src/routes/index.tsx index d7030621c..a624b9e8a 100644 --- a/pkgs/clan-app/ui/src/routes/index.tsx +++ b/pkgs/clan-app/ui/src/routes/index.tsx @@ -1,6 +1,6 @@ import type { RouteDefinition } from "@solidjs/router/dist/types"; import { Onboarding } from "@/src/routes/Onboarding/Onboarding"; -import { Clans } from "@/src/routes/Clan/Clan"; +import { Clan } from "@/src/routes/Clan/Clan"; export const Routes: RouteDefinition[] = [ { @@ -9,7 +9,6 @@ export const Routes: RouteDefinition[] = [ }, { path: "/clans", - component: Clans, children: [ { path: "/", @@ -25,7 +24,7 @@ export const Routes: RouteDefinition[] = [ children: [ { path: "/", - component: (props) =>

ClanID: {props.params.clanURI}

, + component: Clan, }, { path: "/machines",