33 lines
925 B
TypeScript
33 lines
925 B
TypeScript
![]() |
import { Ticket } from "@root/model/ticket";
|
||
|
import { create } from "zustand";
|
||
|
import { devtools } from "zustand/middleware";
|
||
|
|
||
|
|
||
|
interface TicketStore {
|
||
|
tickets: Ticket[];
|
||
|
}
|
||
|
|
||
|
export const useTicketStore = create<TicketStore>()(
|
||
|
devtools(
|
||
|
(set, get) => ({
|
||
|
tickets: [],
|
||
|
}),
|
||
|
{
|
||
|
name: "Tickets store"
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
|
||
|
export const setTickets = (tickets: Ticket[]) => useTicketStore.setState(({ tickets }));
|
||
|
|
||
|
export const addOrUpdateTicket = (updatedTicket: Ticket) => {
|
||
|
const state = useTicketStore.getState();
|
||
|
const ticketIndex = state.tickets.findIndex(ticket => ticket.id === updatedTicket.id);
|
||
|
|
||
|
if (ticketIndex === -1) {
|
||
|
return useTicketStore.setState({ tickets: [...state.tickets, updatedTicket] });
|
||
|
}
|
||
|
|
||
|
const newTickets = state.tickets.slice().splice(ticketIndex, 1, updatedTicket);
|
||
|
useTicketStore.setState({ tickets: newTickets });
|
||
|
};
|