packages feed

espial-0.0.39: frontend/src/stores/bookmarksStore.ts

import { create } from 'zustand';

import type { Bookmark } from '../types';

export type BookmarksState = {
  bmarks: Bookmark[];
  setAll: (bmarks: Bookmark[]) => void;
  removeById: (bid: number) => void;
  upsert: (bm: Bookmark) => void;
};

export const useBookmarksStore = create<BookmarksState>((set) => ({
  bmarks: [],
  setAll: (bmarks) => {
    set({ bmarks });
  },
  removeById: (bid) => {
    set((s) => ({ bmarks: s.bmarks.filter((b) => b.bid !== bid) }));
  },
  upsert: (bm) => {
    set((s) => ({ bmarks: s.bmarks.map((b) => (b.bid === bm.bid ? bm : b)) }));
  },
}));