w-aura/src/store/chat.ts
Daniil Chemerkin f1a5b30650 Develop
2024-11-20 13:21:04 +00:00

75 lines
2.2 KiB
TypeScript

import { IAssistant } from "@/api/resources/ChatsCategories";
import { createSlice, createSelector } from "@reduxjs/toolkit";
import type { PayloadAction } from "@reduxjs/toolkit";
interface IChat {
assistant: IAssistant | null;
chatId: string;
isAutoRefill: boolean;
isPayedFirstPurchase: boolean;
dateEndChatting: string;
}
const initialState: IChat = {
assistant: null,
chatId: "",
isAutoRefill: true,
isPayedFirstPurchase: false,
dateEndChatting: ""
};
const chatSlice = createSlice({
name: "chat",
initialState,
reducers: {
update(state, action: PayloadAction<Partial<IChat>>) {
return { ...state, ...action.payload };
},
updateAssistant(state, action: PayloadAction<IAssistant>) {
return { ...state, assistant: action.payload };
},
updateChatId(state, action: PayloadAction<string>) {
return { ...state, chatId: action.payload };
},
updateIsAutoRefill(state, action: PayloadAction<boolean>) {
return { ...state, isAutoRefill: action.payload };
},
updateIsPayedFirstPurchase(state, action: PayloadAction<boolean>) {
return { ...state, isPayedFirstPurchase: action.payload };
},
updateDateEndChatting(state, action: PayloadAction<string>) {
return { ...state, dateEndChatting: action.payload };
},
},
extraReducers: (builder) => builder.addCase("reset", () => initialState),
});
export const { actions } = chatSlice;
export const selectCurrentAssistant = createSelector(
(state: { chat: IChat }) => state.chat.assistant,
(chat) => chat
);
export const selectCurrentChatId = createSelector(
(state: { chat: IChat }) => state.chat.chatId,
(chat) => chat
);
export const selectIsAutoRefill = createSelector(
(state: { chat: IChat }) => state.chat.isAutoRefill,
(chat) => chat
);
export const selectIsPayedFirstPurchase = createSelector(
(state: { chat: IChat }) => state.chat.isPayedFirstPurchase,
(chat) => chat
);
export const selectDateEndChatting = createSelector(
(state: { chat: IChat }) => state.chat.dateEndChatting,
(chat) => chat
);
export default chatSlice.reducer;