front-hub/src/stores/tickets.ts
2023-03-31 18:00:29 +03:00

44 lines
1.4 KiB
TypeScript

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<TicketStore>()(
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: [] });