Spaces:
Sleeping
Sleeping
| export const getTicketRecordId = (ticket) => ticket?.id ?? ticket?.ticket_id ?? null; | |
| const defaultShouldInclude = () => true; | |
| export const applyTicketRealtimePayload = ( | |
| tickets, | |
| payload, | |
| { shouldInclude = defaultShouldInclude } = {}, | |
| ) => { | |
| const currentTickets = Array.isArray(tickets) ? tickets : []; | |
| const eventType = payload?.eventType; | |
| const nextTicket = payload?.new; | |
| const oldTicket = payload?.old; | |
| const targetTicket = nextTicket || oldTicket; | |
| const targetId = getTicketRecordId(targetTicket); | |
| if (!eventType || !targetId) return currentTickets; | |
| if (eventType === 'DELETE') { | |
| return currentTickets.filter((ticket) => getTicketRecordId(ticket) !== targetId); | |
| } | |
| if (!nextTicket || !shouldInclude(nextTicket)) { | |
| return currentTickets.filter((ticket) => getTicketRecordId(ticket) !== targetId); | |
| } | |
| const exists = currentTickets.some((ticket) => getTicketRecordId(ticket) === targetId); | |
| if (!exists) { | |
| return [nextTicket, ...currentTickets]; | |
| } | |
| return currentTickets.map((ticket) => ( | |
| getTicketRecordId(ticket) === targetId | |
| ? { ...ticket, ...nextTicket } | |
| : ticket | |
| )); | |
| }; | |