import { Ticket } from "@root/model/ticket"; import { create } from "zustand"; import { devtools } from "zustand/middleware"; interface TicketStore { tickets: Ticket[]; fetchState: "idle" | "fetching" | "all fetched"; apiPage: number; ticketsPerPage: number; } export const useTicketStore = create()( devtools( (set, get) => ({ tickets: [], fetchState: "idle", apiPage: 0, ticketsPerPage: 20, }), { name: "Tickets store (admin)" } ) ); export const setTicketsFetchState = (fetchState: TicketStore["fetchState"]) => useTicketStore.setState({ fetchState }); export const incrementTicketsApiPage = () => { const state = useTicketStore.getState(); if (state.fetchState !== "idle") return; useTicketStore.setState({ apiPage: state.apiPage + 1 }); }; 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: [] });