UNPKG

@selenite/graph-editor

Version:

A graph editor for visual programming, based on rete and svelte.

51 lines (50 loc) 1.46 kB
import { isBrowser } from '@selenite/commons'; import { SvelteSet } from 'svelte/reactivity'; const FAVORITES_KEY = 'favoriteGraphsIds'; export class FavoritesManager { static #instance = undefined; static get instance() { if (!this.#instance) { this.#instance = new FavoritesManager(); } return this.#instance; } constructor() { const favorites = isBrowser() ? localStorage.getItem(FAVORITES_KEY) : '[]'; if (favorites) { this.#favorites = new SvelteSet(JSON.parse(favorites)); } } #favorites = new SvelteSet(); setFavorite(id, value) { if (value) { this.#favorites.add(id); } else { this.#favorites.delete(id); } this.saveFavorites(); } favorites = $derived(Array.from(this.#favorites)); static setFavorite(id, value) { this.instance.setFavorite(id, value); } isFavorite(id) { return this.#favorites.has(id); } static isFavorite(id) { return this.instance.isFavorite(id); } clearFavorites() { this.#favorites.clear(); this.saveFavorites(); } static clearFavorites() { this.instance.clearFavorites(); } saveFavorites() { const favs = Array.from(this.#favorites); console.debug('Saving favorites', favs); localStorage.setItem(FAVORITES_KEY, JSON.stringify(favs)); } }