Newer
Older
smart-home-server / webclient-vue / src / stores / favorites.js
import { ref } from "vue";
import { defineStore } from "pinia";

const STORAGE_KEY = "sh_fav_areas";

function readFavorites() {
  try {
    return JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]").map(String);
  } catch (_) {
    return [];
  }
}

function writeFavorites(ids) {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(ids.map(String)));
}

export const useFavoritesStore = defineStore("favorites", () => {
  const ids = ref(readFavorites());

  function has(id) {
    return ids.value.includes(String(id));
  }

  function add(id) {
    const nextId = String(id);
    if (!ids.value.includes(nextId)) {
      ids.value.push(nextId);
      writeFavorites(ids.value);
    }
  }

  function remove(id) {
    ids.value = ids.value.filter((item) => item !== String(id));
    writeFavorites(ids.value);
  }

  function toggle(id) {
    if (has(id)) {
      remove(id);
      return false;
    }
    add(id);
    return true;
  }

  return {
    ids,
    has,
    add,
    remove,
    toggle,
  };
});