feat: setup registration slice

pull/3056/head
William Grant 1 year ago
parent 4ffd98ae21
commit 264340a45d

@ -0,0 +1,56 @@
import { PayloadAction, createSlice } from '@reduxjs/toolkit';
import { SignInMode } from '../../../components/registration/stages/SignInTab';
import { SignUpMode } from '../../../components/registration/stages/SignUpTab';
export enum RegistrationPhase {
Start,
SignIn,
SignUp,
}
export type RegistrationState = {
generatedRecoveryPhrase: string;
hexGeneratedPubKey: string;
registrationPhase: RegistrationPhase;
signUpMode: SignUpMode;
signInMode: SignInMode;
};
const initialState: RegistrationState = {
generatedRecoveryPhrase: '',
hexGeneratedPubKey: '',
registrationPhase: RegistrationPhase.Start,
signInMode: SignInMode.Default,
signUpMode: SignUpMode.Default,
};
export const registrationSlice = createSlice({
name: 'registration',
initialState,
reducers: {
setGeneratedRecoveryPhrase(state, action: PayloadAction<string>) {
return { ...state, generatedRecoveryPhrase: action.payload };
},
setHexGeneratedPubKey(state, action: PayloadAction<string>) {
return { ...state, hexGeneratedPubKey: action.payload };
},
setRegistrationPhase(state, action: PayloadAction<RegistrationPhase>) {
return { ...state, registrationPhase: action.payload };
},
setSignUpMode(state, action: PayloadAction<SignUpMode>) {
return { ...state, signUpMode: action.payload };
},
setSignInMode(state, action: PayloadAction<SignInMode>) {
return { ...state, signInMode: action.payload };
},
},
});
export const {
setGeneratedRecoveryPhrase,
setHexGeneratedPubKey,
setRegistrationPhase,
setSignUpMode,
setSignInMode,
} = registrationSlice.actions;
export default registrationSlice.reducer;

@ -0,0 +1,58 @@
import { createSelector } from '@reduxjs/toolkit';
import { useSelector } from 'react-redux';
import { SignInMode, SignUpMode } from '../../../components/registration/stages';
import { RegistrationPhase, RegistrationState } from '../ducks/registration';
import { OnboardingStoreState } from '../store';
// #region Getters
const getRegistration = (state: OnboardingStoreState): RegistrationState => {
return state.registration;
};
const getGeneratedRecoveryPhrase = createSelector(
getRegistration,
(state: RegistrationState): string => state.generatedRecoveryPhrase
);
const getHexGeneratedPubKey = createSelector(
getRegistration,
(state: RegistrationState): string => state.hexGeneratedPubKey
);
const getRegistrationPhase = createSelector(
getRegistration,
(state: RegistrationState): RegistrationPhase => state.registrationPhase
);
const getSignUpMode = createSelector(
getRegistration,
(state: RegistrationState): SignUpMode => state.signUpMode
);
const getSignInMode = createSelector(
getRegistration,
(state: RegistrationState): SignInMode => state.signInMode
);
// #endregion
// #region Hooks
export const useRegGeneratedRecoveryPhrase = () => {
return useSelector(getGeneratedRecoveryPhrase);
};
export const useRegHexGeneratedPubKey = () => {
return useSelector(getHexGeneratedPubKey);
};
export const useRegRegistrationPhase = () => {
return useSelector(getRegistrationPhase);
};
export const useRegSignUpMode = () => {
return useSelector(getSignUpMode);
};
export const useRegSignInMode = () => {
return useSelector(getSignInMode);
};
// #endregion

@ -1,8 +1,9 @@
import { configureStore } from '@reduxjs/toolkit';
import modalsReducer from './ducks/modals';
import registrationReducer from './ducks/registration';
export const onboardingStore = configureStore({
reducer: { modals: modalsReducer },
reducer: { modals: modalsReducer, registration: registrationReducer },
});
export type OnboardingStoreState = ReturnType<typeof onboardingStore.getState>;

Loading…
Cancel
Save