Spaces:
Runtime error
Runtime error
import type { StateCreator } from "zustand"; | |
import { create } from "zustand"; | |
import { createSelectors } from "./helpers"; | |
import type { Message } from "../types/message"; | |
const resetters: (() => void)[] = []; | |
const initialMessageState = { | |
messages: [], | |
}; | |
interface MessageSlice { | |
messages: Message[]; | |
addMessage: (newMessage: Message) => void; | |
updateMessage: (newMessage: Message) => void; | |
} | |
const createMessageSlice: StateCreator<MessageSlice, [], [], MessageSlice> = (set) => { | |
resetters.push(() => set(initialMessageState)); | |
return { | |
...initialMessageState, | |
addMessage: (newMessage) => { | |
set((state) => ({ | |
...state, | |
messages: [...state.messages, { ...newMessage }], | |
})); | |
}, | |
updateMessage: (newMessage) => { | |
set((state) => { | |
const oldMessage = state.messages.find((message) => message.id === newMessage.id); | |
if (oldMessage) { | |
const updatedMessages = state.messages.map((message) => | |
message.id === oldMessage.id ? newMessage : message | |
); | |
return { | |
...state, | |
messages: updatedMessages, | |
}; | |
} | |
return state; | |
}); | |
}, | |
}; | |
}; | |
export const useMessageStore = createSelectors( | |
create<MessageSlice>()((...a) => ({ | |
...createMessageSlice(...a), | |
})) | |
); | |
export const resetAllMessageSlices = () => resetters.forEach((resetter) => resetter()); | |