Compare commits
7 Commits
config-set
...
4f97e26295
| Author | SHA1 | Date | |
|---|---|---|---|
|
4f97e26295
|
|||
|
a2fe2780cf
|
|||
|
3c16148bb7
|
|||
|
9a8e97885c
|
|||
|
46feef3a48
|
|||
| 6e7dd7a560 | |||
| 7a347ed246 |
@@ -257,6 +257,8 @@ async def handle_add_tracker(request):
|
||||
return web.Response(text="Tracker already exists", status=400)
|
||||
|
||||
trackers[tracker_id] = TrackerData(tracker_id, *START_POSITION_INTERNAL)
|
||||
await update_all_clients(request.app)
|
||||
|
||||
return web.Response(text="OK", status=200)
|
||||
except Exception as e:
|
||||
return web.Response(text=f"Error: {e}", status=400)
|
||||
@@ -273,6 +275,8 @@ async def handler_delete_tracker(request):
|
||||
return web.Response(text="Tracker does not exist", status=400)
|
||||
|
||||
del trackers[tracker_id]
|
||||
await update_all_clients(request.app)
|
||||
|
||||
return web.Response(text="OK", status=200)
|
||||
except Exception as e:
|
||||
return web.Response(text=f"Error: {e}", status=400)
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
onpointermove={onPointerMove}
|
||||
style={`transform: translate(${vis_x}px, ${vis_y}px)`}
|
||||
class={`absolute flex h-24 w-24 touch-none select-none items-center justify-center rounded-full
|
||||
${selected === id ? "border-green-400 bg-green-400" : "border-red-400 bg-red-400"}`}
|
||||
${selected === id ? "border-green-400 bg-green-400 z-50" : "border-red-400 bg-red-400"}`}
|
||||
>
|
||||
Tracker {id}
|
||||
</div>
|
||||
|
||||
@@ -3,32 +3,34 @@
|
||||
import { Button } from "$lib/components/ui/button/index.js";
|
||||
import TrackerSetting from "./TrackerSetting.svelte";
|
||||
|
||||
const addTracker = async () => {
|
||||
const addTracker = async (arg: number) => {
|
||||
const response = await fetch("/tracker", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
id: 4,
|
||||
id: Number(arg),
|
||||
}),
|
||||
});
|
||||
|
||||
console.log(response);
|
||||
};
|
||||
|
||||
const deleteTracker = async () => {
|
||||
const deleteTracker = async (arg: number) => {
|
||||
const response = await fetch("/tracker", {
|
||||
method: "DELETE",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
id: 4,
|
||||
id: Number(arg),
|
||||
}),
|
||||
});
|
||||
console.log(response);
|
||||
};
|
||||
|
||||
let id = $state(0);
|
||||
</script>
|
||||
|
||||
<Drawer.Root>
|
||||
@@ -41,8 +43,12 @@
|
||||
<Drawer.Description>This action cannot be undone.</Drawer.Description>
|
||||
</Drawer.Header>
|
||||
<div class="flex items-center justify-evenly">
|
||||
<TrackerSetting action={addTracker} text="Add Tracker" />
|
||||
<TrackerSetting action={deleteTracker} text="Delete Tracker" />
|
||||
<TrackerSetting bind:value={id} action={addTracker} text="Add Tracker" />
|
||||
<TrackerSetting
|
||||
bind:value={id}
|
||||
action={deleteTracker}
|
||||
text="Delete Tracker"
|
||||
/>
|
||||
</div>
|
||||
</Drawer.Content>
|
||||
</Drawer.Root>
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
|
||||
let arena_state: "full_arena" | "scene_only" = $state("scene_only");
|
||||
|
||||
let tracker = trackers.find((ball) => {
|
||||
ball.id === selected;
|
||||
let tracker = $state<TrackerData | undefined>(undefined);
|
||||
|
||||
$effect(() => {
|
||||
tracker = trackers.find((ball) => ball.id === selected);
|
||||
});
|
||||
|
||||
const onchange = () => {
|
||||
@@ -61,6 +63,7 @@
|
||||
|
||||
<div class="slider-container ml-auto">
|
||||
<Modal action={buttonAction} />
|
||||
{#if tracker}
|
||||
<input
|
||||
type="range"
|
||||
id="z"
|
||||
@@ -68,8 +71,10 @@
|
||||
max="4"
|
||||
step="0.01"
|
||||
oninput={onchange}
|
||||
bind:value={tracker.z}
|
||||
/>
|
||||
<output for="z">{z_viz} m</output>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -4,14 +4,15 @@
|
||||
|
||||
type Props = {
|
||||
text: string;
|
||||
action: () => void;
|
||||
action: (arg: number) => void;
|
||||
value: number;
|
||||
};
|
||||
|
||||
let { action, text }: Props = $props();
|
||||
let { action, text, value = $bindable() }: Props = $props();
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<h2>{text}</h2>
|
||||
<Input placeholder={"1"} type="tel" />
|
||||
<Button onclick={action}>Submit</Button>
|
||||
<Input placeholder={"1"} bind:value required />
|
||||
<Button onclick={() => action(value)}>Submit</Button>
|
||||
</div>
|
||||
|
||||
@@ -17,11 +17,12 @@
|
||||
|
||||
<input
|
||||
class={cn(
|
||||
"border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring flex h-10 w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
className
|
||||
"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
||||
className,
|
||||
)}
|
||||
bind:value
|
||||
{readonly}
|
||||
type="tel"
|
||||
on:blur
|
||||
on:change
|
||||
on:click
|
||||
|
||||
Reference in New Issue
Block a user