diff --git a/src/rootReducer.ts b/src/rootReducer.ts index 34dde802f9..9b4d7120a9 100644 --- a/src/rootReducer.ts +++ b/src/rootReducer.ts @@ -10,7 +10,7 @@ import { characterInventoryReducer } from "goals/CharacterInventory/Redux/Charac import mergeDupStepReducer from "goals/MergeDuplicates/Redux/MergeDupsReducer"; import { reviewEntriesReducer } from "goals/ReviewEntries/ReviewEntriesComponent/Redux/ReviewEntriesReducer"; import { StoreState } from "types"; -import { analyticsReducer } from "types/Redux/analytics"; +import analyticsReducer from "types/Redux/analytics"; export const rootReducer: Reducer = combineReducers({ //login diff --git a/src/types/Redux/analytics.ts b/src/types/Redux/analytics.ts index 290bf04723..930d6af320 100644 --- a/src/types/Redux/analytics.ts +++ b/src/types/Redux/analytics.ts @@ -1,36 +1,30 @@ -import { - AnalyticsActionTypes, - AnalyticsChangePageAction, - AnalyticsState, - defaultState, -} from "types/Redux/analyticsReduxTypes"; +import { PayloadAction, createSlice } from "@reduxjs/toolkit"; -export function changePage(newPage: string): AnalyticsChangePageAction { - return { - type: AnalyticsActionTypes.ChangePage, - newPage, - }; -} +import { StoreActionTypes } from "rootActions"; +import { defaultState } from "types/Redux/analyticsReduxTypes"; -export const analyticsReducer = ( - //createStore() calls each reducer with undefined state - state: AnalyticsState = defaultState, - action: AnalyticsChangePageAction -): AnalyticsState => { - switch (action.type) { - case AnalyticsActionTypes.ChangePage: - if (action.newPage !== state.currentPage) { +const analyticsSlice = createSlice({ + name: "analyticsState", + initialState: defaultState, + reducers: { + changePageAction: (state, action) => { + if (action.payload !== state.currentPage) { analytics.track("navigate", { + destination: action.payload, source: state.currentPage, - destination: action.newPage, }); } - return { - ...state, - currentPage: action.newPage, - }; + state.currentPage = action.payload; + }, + }, + extraReducers: (builder) => + builder.addCase(StoreActionTypes.RESET, () => defaultState), +}); + +const { changePageAction } = analyticsSlice.actions; - default: - return state; - } -}; +export default analyticsSlice.reducer; + +export function changePage(newPage: string): PayloadAction { + return changePageAction(newPage); +} diff --git a/src/types/Redux/analyticsReduxTypes.ts b/src/types/Redux/analyticsReduxTypes.ts index a7210e11ac..036cd9b620 100644 --- a/src/types/Redux/analyticsReduxTypes.ts +++ b/src/types/Redux/analyticsReduxTypes.ts @@ -5,12 +5,3 @@ export interface AnalyticsState { export const defaultState: AnalyticsState = { currentPage: "", }; - -export enum AnalyticsActionTypes { - ChangePage = "CHANGE_CURRENT_PAGE", -} - -export interface AnalyticsChangePageAction { - type: AnalyticsActionTypes.ChangePage; - newPage: string; -}