]>
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}))"`
19 if (right
> maxSize
|| bottom
> maxSize
) {
21 `box.ov."((${left-maxSize},${top-maxSize}),(${right-maxSize},${bottom-maxSize}))"`,
22 `box.ov."((${left-maxSize},${top}),(${right-maxSize},${bottom}))"`,
23 `box.ov."((${left},${top-maxSize}),(${right},${bottom-maxSize}))"`
30 const serialize
= function serialize(widget
) {
32 const boxComponents
= widget
.box
37 left: Math
.min(boxComponents
[0], boxComponents
[2]),
38 right: Math
.max(boxComponents
[0], boxComponents
[2]),
39 top: Math
.min(boxComponents
[1], boxComponents
[3]),
40 bottom: Math
.max(boxComponents
[1], boxComponents
[3])
43 return {...widget
, box
}
47 export const widgets
= derived(sensor
, async
function ($sensor
, set) {
49 const boxes
= getBoxes($sensor
);
51 ac
= new AbortController();
52 const { data
} = await client
56 .abortSignal(ac
.signal
)
58 return set(data
.map(serialize
));