Scrapboard.org client
at labels 40 lines 873 B view raw
1import { create } from "zustand"; 2import { persist } from "zustand/middleware"; 3 4export interface BasicFeedItem { 5 displayName: string; 6} 7 8type FeedDefsState = { 9 feeds: Record<string, BasicFeedItem>; 10 setFeedDef: (id: string, feed: BasicFeedItem) => void; 11 defaultFeed: string; 12 setDefaultFeed: (feed: string) => void; 13}; 14 15export const useFeedDefsStore = create<FeedDefsState>()( 16 persist( 17 (set) => ({ 18 feeds: {}, 19 setFeedDef: (id, feed) => 20 set((state) => ({ 21 feeds: { 22 ...state.feeds, 23 [id]: feed, 24 }, 25 })), 26 defaultFeed: "timeline", 27 setDefaultFeed: (feed) => 28 set(() => ({ 29 defaultFeed: feed, 30 })), 31 }), 32 { 33 name: "feed-defs", 34 partialize: (state) => ({ 35 feeds: state.feeds, 36 defaultFeed: state.defaultFeed, 37 }), 38 } 39 ) 40);