1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import { derived, writable } from 'svelte/store';
import { createClient } from '@supabase/supabase-js';
import { supabase } from '$lib/config';
import { maxSize } from '$lib/config';
const client = createClient(supabase.url, supabase.key);
export const sensor = writable({left: 0, top: 0, right: 0, bottom: 0});
const getBoxes = function getBoxes ({left, top, right, bottom}) {
return [
`box.ov."(${left},${top},${right},${bottom})"`,
`box.ov."(${left+maxSize},${top+maxSize},${right+maxSize},${bottom+maxSize})"`,
`box.ov."(${left+maxSize},${top},${right+maxSize},${bottom})"`,
`box.ov."(${left},${top+maxSize},${right},${bottom+maxSize})"`
]
};
let ac = null;
export const widgets = derived(sensor, async function ($sensor, set) {
const boxes = getBoxes($sensor);
ac && ac.abort()
ac = new AbortController();
const { data } = await client
.from('widgets')
.select()
.or(boxes.join(','))
.abortSignal(ac.signal)
return set(data);
});
|