@selenite/graph-editor
Version:
A graph editor for visual programming, based on rete and svelte.
51 lines (50 loc) • 1.46 kB
JavaScript
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));
}
}