add tickets store

This commit is contained in:
nflnkr 2023-03-20 18:25:28 +03:00
parent c045ad315a
commit 88d696f53e
2 changed files with 83 additions and 0 deletions

@ -0,0 +1,49 @@
import { Ticket } from "@root/model/ticket";
export const testTickets: Ticket[] = [
{
"id": "cg5irh4vc9g7b3n3tcrg",
"user": "6407625ed01874dcffa8b008",
"sess": "6407625ed01874dcffa8b008",
"ans": "",
"state": "open",
"top_message": {
"id": "cg5irh4vc9g7b3n3tcs0",
"ticket_id": "cg5irh4vc9g7b3n3tcrg",
"user_id": "6407625ed01874dcffa8b008",
"session_id": "6407625ed01874dcffa8b008",
"message": "text",
"files": [],
"shown": {},
"request_screenshot": "",
"created_at": "2023-03-10T13:16:52.73Z"
},
"title": "textual ticket",
"created_at": "2023-03-10T13:16:52.73Z",
"updated_at": "2023-03-10T13:16:52.73Z",
"rate": -1
},
{
"id": "cg55nssvc9g7gddpnsug",
"user": "",
"sess": "",
"ans": "",
"state": "open",
"top_message": {
"id": "cg55nssvc9g7gddpnsv0",
"ticket_id": "cg55nssvc9g7gddpnsug",
"user_id": "",
"session_id": "",
"message": "text",
"files": [],
"shown": {},
"request_screenshot": "",
"created_at": "2023-03-09T22:21:39.822Z"
},
"title": "textual ticket",
"created_at": "2023-03-09T22:21:39.822Z",
"updated_at": "2023-03-09T22:21:39.822Z",
"rate": -1
}
];

34
src/stores/tickets.ts Normal file

@ -0,0 +1,34 @@
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 addTickets = (tickets: Ticket[]) => useTicketStore.setState(state => ({ tickets: [...state.tickets, ...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 });
};