import { Ticket } from "@root/model/ticket"; import { create } from "zustand"; import { devtools } from "zustand/middleware"; interface TicketStore { ticketCount: number; tickets: Ticket[]; fetchState: "idle" | "fetching" | "all fetched"; currentPage: number; ticketsPerPage: number; } export const useTicketStore = create()( devtools( (set, get) => ({ ticketCount: 0, tickets: [], fetchState: "idle", currentPage: 0, ticketsPerPage: 2, }), { name: "Tickets store (client)" } ) ); export const setTicketCount = (ticketCount: number) => useTicketStore.setState({ ticketCount }); export const setFetchState = (fetchState: "idle" | "fetching" | "all fetched") => useTicketStore.setState({ fetchState }); export const setCurrentPage = (currentPage: number) => useTicketStore.setState({ currentPage }); export const updateTickets = (receivedTickets: Ticket[]) => { const state = useTicketStore.getState(); const ticketIdToTicketMap: { [ticketId: string]: Ticket; } = {}; [...state.tickets, ...receivedTickets].forEach(ticket => ticketIdToTicketMap[ticket.id] = ticket); useTicketStore.setState({ tickets: Object.values(ticketIdToTicketMap) }); }; export const clearTickets = () => useTicketStore.setState({ tickets: [] });