adminFront/src/stores/tickets.ts
2023-05-08 09:54:25 +03:00

45 lines
1.3 KiB
TypeScript

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