72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import { createReducer, createAction } from '@reduxjs/toolkit';
|
|
|
|
// ─── Actions ──────────────────────────────────────────────────────────────────
|
|
|
|
export const saveProfileData = createAction<{
|
|
name: string;
|
|
email: string;
|
|
gender: 'MALE' | 'FEMALE' | 'OTHER';
|
|
addressLine1: string;
|
|
houseNumber: string;
|
|
landmark: string;
|
|
city: string;
|
|
state: string;
|
|
postalCode: string;
|
|
addressPhone: string;
|
|
addressLabel: string;
|
|
}>('completeProfile/saveProfileData');
|
|
|
|
export const clearProfileData = createAction('completeProfile/clearProfileData');
|
|
|
|
// ─── State ────────────────────────────────────────────────────────────────────
|
|
|
|
export interface CompleteProfileState {
|
|
name: string;
|
|
email: string;
|
|
gender: 'MALE' | 'FEMALE' | 'OTHER';
|
|
addressLine1: string;
|
|
houseNumber: string;
|
|
landmark: string;
|
|
city: string;
|
|
state: string;
|
|
postalCode: string;
|
|
addressPhone: string;
|
|
addressLabel: string;
|
|
}
|
|
|
|
const initialState: CompleteProfileState = {
|
|
name: '',
|
|
email: '',
|
|
gender: 'MALE',
|
|
addressLine1: '',
|
|
houseNumber: '',
|
|
landmark: '',
|
|
city: '',
|
|
state: '',
|
|
postalCode: '',
|
|
addressPhone: '',
|
|
addressLabel: 'Home',
|
|
};
|
|
|
|
// ─── Reducer ──────────────────────────────────────────────────────────────────
|
|
|
|
const completeProfileReducer = createReducer(initialState, builder => {
|
|
builder
|
|
.addCase(saveProfileData, (state, action) => {
|
|
state.name = action.payload.name;
|
|
state.email = action.payload.email;
|
|
state.gender = action.payload.gender;
|
|
state.addressLine1 = action.payload.addressLine1;
|
|
state.houseNumber = action.payload.houseNumber;
|
|
state.landmark = action.payload.landmark;
|
|
state.city = action.payload.city;
|
|
state.state = action.payload.state;
|
|
state.postalCode = action.payload.postalCode;
|
|
state.addressPhone = action.payload.addressPhone;
|
|
state.addressLabel = action.payload.addressLabel;
|
|
})
|
|
.addCase(clearProfileData, () => initialState);
|
|
});
|
|
|
|
export default completeProfileReducer;
|