aboutsummaryrefslogtreecommitdiff
path: root/src/lib/stores/widgets.js
blob: ff5c53ecd8f60d9cb12076753e633070e31613ea (plain)
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);
});