frontend/src/slices/messagesSlice.js
import { createSlice, createEntityAdapter } from '@reduxjs/toolkit';
import { actions as channelsActions } from './channelsSlice';
const messagesAdapter = createEntityAdapter();
const initialState = messagesAdapter.getInitialState();
const messagesSlice = createSlice({
name: 'channel',
initialState,
reducers: {
addMessages: messagesAdapter.addMany,
addMessage: messagesAdapter.addOne,
},
extraReducers: (builder) => {
builder.addCase(channelsActions.removeChannel, (state, action) => {
const removedChannelId = action.payload;
const entities = Object.values(state.entities);
const removeChannelMessageIds = entities.filter((el) => el.channelId === removedChannelId)
.map(({ id }) => id);
messagesAdapter.removeMany(state, removeChannelMessageIds);
});
},
});
export const { actions } = messagesSlice;
export default messagesSlice.reducer;
export const selectors = messagesAdapter.getSelectors((state) => state.messages);