]>
git.r.bdr.sh - rbdr/canvas/blob - src/lib/stores/widgets.js
1 import { derived
, writable
} from 'svelte/store';
2 import { createClient
} from '@supabase/supabase-js';
3 import { supabase
} from '$lib/config';
4 import { maxSize
} from '$lib/config';
6 const boxParser
= /\(([0-9]+),([0-9]+)\),\(([0-9]+),([0-9]+)\)/
7 const client
= createClient(supabase
.url
, supabase
.key
);
9 export const sensor
= writable({left: 0, top: 0, right: 0, bottom: 0});
11 const getBoxes
= function getBoxes ({left
, top
, right
, bottom
}) {
13 `box.ov."((${left},${top}),(${right},${bottom}))"`,
14 `box.ov."((${left+maxSize},${top+maxSize}),(${right+maxSize},${bottom+maxSize}))"`,
15 `box.ov."((${left+maxSize},${top}),(${right+maxSize},${bottom}))"`,
16 `box.ov."((${left},${top+maxSize}),(${right},${bottom+maxSize}))"`,
17 `box.ov."((${left-maxSize},${top-maxSize}),(${right-maxSize},${bottom-maxSize}))"`,
18 `box.ov."((${left-maxSize},${top}),(${right-maxSize},${bottom}))"`,
19 `box.ov."((${left},${top-maxSize}),(${right},${bottom-maxSize}))"`
25 const serialize
= function serialize(widget
) {
27 const boxComponents
= widget
.box
32 left: Math
.min(boxComponents
[0], boxComponents
[2]),
33 right: Math
.max(boxComponents
[0], boxComponents
[2]),
34 top: Math
.min(boxComponents
[1], boxComponents
[3]),
35 bottom: Math
.max(boxComponents
[1], boxComponents
[3])
38 return {...widget
, box
}
42 export const widgets
= derived(sensor
, async
function ($sensor
, set) {
44 const boxes
= getBoxes($sensor
);
46 ac
= new AbortController();
47 const { data
} = await client
51 .abortSignal(ac
.signal
)
53 return set(data
.map(serialize
));