Skip to content

Commit 4043751

Browse files
authored
Fix the broken back button on onboarding page.
1 parent a91a07d commit 4043751

4 files changed

Lines changed: 44 additions & 13 deletions

File tree

frontend/src/components/OnboardingSteps/AvatarSelectionStep.tsx

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState, useEffect } from 'react';
2-
import { useDispatch } from 'react-redux';
2+
import { useDispatch, useSelector } from 'react-redux';
33
import {
44
setAvatar,
55
setName,
@@ -18,6 +18,7 @@ import { Input } from '@/components/ui/input';
1818
import { Label } from '@/components/ui/label';
1919
import { avatars } from '@/constants/avatars';
2020
import { AppFeatures } from '@/components/OnboardingSteps/AppFeatures';
21+
import { RootState } from '@/app/store';
2122

2223
interface AvatarNameSelectionStepProps {
2324
stepIndex: number;
@@ -32,11 +33,20 @@ export const AvatarSelectionStep: React.FC<AvatarNameSelectionStepProps> = ({
3233
}) => {
3334
const dispatch = useDispatch();
3435

35-
const [name, setLocalName] = useState('');
36-
const [selectedAvatar, setLocalAvatar] = useState('');
36+
const [name, setLocalName] = useState(localStorage.getItem('name') || '');
37+
const [selectedAvatar, setLocalAvatar] = useState(
38+
localStorage.getItem('avatar') || '',
39+
);
40+
const isEditing = useSelector(
41+
(state: RootState) => state.onboarding.isEditing,
42+
);
3743

3844
useEffect(() => {
39-
if (localStorage.getItem('name') && localStorage.getItem('avatar')) {
45+
if (
46+
localStorage.getItem('name') &&
47+
localStorage.getItem('avatar') &&
48+
!isEditing
49+
) {
4050
dispatch(markCompleted(stepIndex));
4151
}
4252
}, []);
@@ -57,7 +67,11 @@ export const AvatarSelectionStep: React.FC<AvatarNameSelectionStepProps> = ({
5767
dispatch(markCompleted(stepIndex));
5868
};
5969

60-
if (localStorage.getItem('name') && localStorage.getItem('avatar')) {
70+
if (
71+
localStorage.getItem('name') &&
72+
localStorage.getItem('avatar') &&
73+
!isEditing
74+
) {
6175
return null;
6276
}
6377

frontend/src/components/OnboardingSteps/FolderSetupStep.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import {
99
} from '@/components/ui/card';
1010
import { Button } from '@/components/ui/button';
1111
import { FolderOpen, X, Folder } from 'lucide-react';
12-
import { useDispatch } from 'react-redux';
13-
import { AppDispatch } from '@/app/store';
12+
import { useDispatch, useSelector } from 'react-redux';
13+
import { AppDispatch, RootState } from '@/app/store';
1414
import { markCompleted, previousStep } from '@/features/onboardingSlice';
1515
import { AppFeatures } from '@/components/OnboardingSteps/AppFeatures';
1616
import { useFolder } from '@/hooks/useFolder';
1717
import { useEffect, useState } from 'react';
18-
18+
import { setIsEditing } from '@/features/onboardingSlice';
1919
interface FolderSetupStepProps {
2020
stepIndex: number;
2121
totalSteps: number;
@@ -31,9 +31,12 @@ export function FolderSetupStep({
3131

3232
// Local state for folders
3333
const [folder, setFolder] = useState<string>('');
34+
const isEditing = useSelector(
35+
(state: RootState) => state.onboarding.isEditing,
36+
);
3437

3538
useEffect(() => {
36-
if (localStorage.getItem('folderChosen') === 'true') {
39+
if (localStorage.getItem('folderChosen') === 'true' && !isEditing) {
3740
dispatch(markCompleted(stepIndex));
3841
}
3942
}, []);
@@ -60,10 +63,11 @@ export function FolderSetupStep({
6063
};
6164

6265
const handleBack = () => {
66+
dispatch(setIsEditing(true));
6367
dispatch(previousStep());
6468
};
6569

66-
if (localStorage.getItem('folderChosen') === 'true') {
70+
if (localStorage.getItem('folderChosen') === 'true' && !isEditing) {
6771
return null;
6872
}
6973
const progressPercent = Math.round(

frontend/src/components/OnboardingSteps/ThemeSelectionStep.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import { Sun, Moon, Monitor } from 'lucide-react';
1818

1919
import { AppFeatures } from '@/components/OnboardingSteps/AppFeatures';
2020
import { useTheme } from '@/contexts/ThemeContext';
21+
22+
import { setIsEditing } from '@/features/onboardingSlice';
23+
import { useSelector } from 'react-redux';
24+
import { RootState } from '@/app/store';
2125
interface ThemeSelectionStepProps {
2226
stepIndex: number;
2327
totalSteps: number;
@@ -30,10 +34,13 @@ export const ThemeSelectionStep: React.FC<ThemeSelectionStepProps> = ({
3034
currentStepDisplayIndex,
3135
}) => {
3236
const { setTheme, theme } = useTheme();
37+
const isEditing = useSelector(
38+
(state: RootState) => state.onboarding.isEditing,
39+
);
3340
const dispatch = useDispatch<AppDispatch>();
3441

3542
useEffect(() => {
36-
if (localStorage.getItem('themeChosen')) {
43+
if (localStorage.getItem('themeChosen') === 'true' && !isEditing) {
3744
dispatch(markCompleted(stepIndex));
3845
}
3946
}, []);
@@ -47,9 +54,10 @@ export const ThemeSelectionStep: React.FC<ThemeSelectionStepProps> = ({
4754
};
4855

4956
const handleBack = () => {
57+
dispatch(setIsEditing(true));
5058
dispatch(previousStep());
5159
};
52-
if (localStorage.getItem('themeChosen')) {
60+
if (localStorage.getItem('themeChosen') === 'true' && !isEditing) {
5361
return null;
5462
}
5563

frontend/src/features/onboardingSlice.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ interface OnboardingState {
99
stepStatus: boolean[];
1010
avatar: string | null;
1111
name: string;
12+
isEditing: boolean;
1213
}
1314

1415
const initialState: OnboardingState = {
@@ -17,6 +18,7 @@ const initialState: OnboardingState = {
1718
stepStatus: STEP_NAMES.map(() => false),
1819
avatar: localStorage.getItem('avatar'),
1920
name: localStorage.getItem('name') || '',
21+
isEditing: false,
2022
};
2123
const onboardingSlice = createSlice({
2224
name: 'onboarding',
@@ -28,6 +30,9 @@ const onboardingSlice = createSlice({
2830
setName(state, action: PayloadAction<string>) {
2931
state.name = action.payload;
3032
},
33+
setIsEditing(state, action: PayloadAction<boolean>) {
34+
state.isEditing = action.payload;
35+
},
3136
markCompleted(state, action: PayloadAction<number>) {
3237
const stepIndex = action.payload;
3338
if (stepIndex >= 0 && stepIndex < state.stepStatus.length) {
@@ -51,7 +56,7 @@ const onboardingSlice = createSlice({
5156
},
5257
});
5358

54-
export const { setAvatar, setName, markCompleted, previousStep } =
59+
export const { setAvatar, setName, setIsEditing, markCompleted, previousStep } =
5560
onboardingSlice.actions;
5661

5762
export default onboardingSlice.reducer;

0 commit comments

Comments
 (0)