1 import type { PayloadAction } from '@reduxjs/toolkit';
2 import { createSlice } from '@reduxjs/toolkit';
7 SecurityCheckupSession,
8 } from '@proton/shared/lib/interfaces/securityCheckup';
9 import SecurityCheckupCohort from '@proton/shared/lib/interfaces/securityCheckup/SecurityCheckupCohort';
10 import type SecurityState from '@proton/shared/lib/interfaces/securityCheckup/SecurityState';
12 import getBackLink from './helpers/getBackLink';
13 import getSecurityCheckupRecommendations from './helpers/getSecurityCheckupRecommendations';
14 import getValidSecurityCheckupSession from './helpers/getValidSecurityCheckupSession';
16 const name = 'securityCheckup' as const;
18 interface SecurityCheckupState {
19 securityState: SecurityState;
20 cohort: SecurityCheckupCohort | undefined;
21 session: SecurityCheckupSession | undefined;
22 actions: SecurityCheckupAction[];
23 furtherActions: SecurityCheckupAction[];
28 export interface SecurityCheckupReduxState {
29 [name]: SecurityCheckupState;
32 const initialState: SecurityCheckupState = {
61 export const securityCheckupSlice = createSlice({
67 action: PayloadAction<{
68 securityState: SecurityState;
71 const { securityState } = action.payload;
73 state.securityState = securityState;
75 const { cohort, actions, furtherActions } = getSecurityCheckupRecommendations(securityState);
77 state.cohort = cohort;
78 state.actions = actions;
79 state.furtherActions = furtherActions;
81 setLoading: (state, action: PayloadAction<{ loading: boolean }>) => {
82 const { loading } = action.payload;
84 state.loading = loading;
86 setBackLink: (state, action: PayloadAction<{ backHref: string; hostname: string }>) => {
87 const { backHref, hostname } = action.payload;
90 const backLink = getBackLink({
94 state.backLink = backLink;
96 state.backLink = undefined;
99 setSession: (state, action: PayloadAction<{ session: SecurityCheckupSession | undefined }>) => {
100 const { session } = action.payload;
102 state.session = getValidSecurityCheckupSession({
103 currentSession: session,
104 currentCohort: state.cohort || SecurityCheckupCohort.NO_RECOVERY_METHOD,
107 clearSession: (state) => {
108 state.session = undefined;
113 export const { setBackLink } = securityCheckupSlice.actions;
115 export const selectSecurityCheckup = (state: { [name]: SecurityCheckupState }) => state[name];