import { PayloadAction, createSlice } from '@reduxjs/toolkit'; import { Logger } from '../../utils/Log'; import { ICallLog, ICallLogsState } from './types'; import { RootState } from '..'; import { callLogsService } from '../../services/callLogs-service'; import { Presence } from '../contacts/types'; const logger = new Logger('callLogSlice'); const initialState: ICallLogsState = { loading: false, callLogs: [], missedCallLogs: [], missedCounter: 0, voiceMailCounter: 0, isVoiceMailAllowed: false, voiceMailNumber: '' } interface ICallLogContact { presence: Presence, contactJId: string } interface IVoiceMailCapability { isVoiceMailAllowed: boolean, voiceMailNumber: string } const callLogSlice = createSlice({ name: 'callLog', initialState, reducers: { getCallLogs(state) { callLogsService.getCallLogs(); state.loading = true; }, getCallLogsResult(state, action: PayloadAction) { state.callLogs = action.payload; state.loading = false; }, getMissedCall(state) { callLogsService.getMissedCalls(); state.loading = true; }, getMissedCallResult(state, action: PayloadAction) { state.loading = false; state.missedCallLogs = action.payload; }, updateCallLogsPresence(state, action: PayloadAction) { const contactJId = action.payload.contactJId; const newPresence = action.payload.presence; state.callLogs = state.callLogs.map((item, _i) => { if (item.contact.jId === contactJId) { return { ...item, contact: { ...item.contact, presence: newPresence }, }; } return item; }); state.missedCallLogs = state.missedCallLogs.map((item) => { if (item.contact.jId === contactJId) { return { ...item, contact: { ...item.contact, presence: newPresence } }; } return item; }); }, updateMissedCounter(state, action: PayloadAction) { state.loading = false; state.missedCounter = action.payload; }, updateVoiceMailsCounter(state, action: PayloadAction) { state.loading = false; state.voiceMailCounter = action.payload; }, markMissedCallsAsRead(state){ callLogsService.markAllMissedCallsAsRead(); state.loading = false; state.missedCounter = 0; }, getVoiceMailCounter(state){ callLogsService.getVoiceMailCounter(); }, getVoiceMailCapabilities(state){ callLogsService.getVoiceMailCapabilities(); }, getVoiceMailCapabilitiesResult(state, action:PayloadAction){ state.isVoiceMailAllowed = action.payload.isVoiceMailAllowed; state.voiceMailNumber = action.payload.voiceMailNumber; } } }); // Export action creators and reducer export const { getCallLogs, getCallLogsResult, getMissedCall, getMissedCallResult, updateCallLogsPresence, updateMissedCounter, updateVoiceMailsCounter, markMissedCallsAsRead, getVoiceMailCounter, getVoiceMailCapabilities, getVoiceMailCapabilitiesResult } = callLogSlice.actions; export default callLogSlice.reducer;