/ shared / components / src / components / Artwork / stores / artworkLoader.ts
artworkLoader.ts
 1  import { writable } from 'svelte/store';
 2  import type { Writable } from 'svelte/store';
 3  
 4  export type ArtworkLoaderStore = {
 5      subscribe: Writable<WeakMap<Element, boolean>>['subscribe'];
 6      addEntry: (entry: Element, isVisible: boolean) => void;
 7      cleanupEntry: (entry: Element) => void;
 8  };
 9  
10  export function createArtworkLoaderStore(): ArtworkLoaderStore {
11      const value = new WeakMap();
12      const { subscribe, update } = writable(value);
13  
14      return {
15          subscribe,
16          addEntry: (entry: Element, isVisible: boolean) => {
17              update((map) => {
18                  map.set(entry, isVisible);
19                  return map;
20              });
21          },
22  
23          cleanupEntry: (entry: Element) => {
24              update((map) => {
25                  map.delete(entry);
26                  return map;
27              });
28          },
29      };
30  }