From 8409be612e7e072d75de4147c8b5e85c5cf8f43e Mon Sep 17 00:00:00 2001 From: abhu-k Date: Tue, 18 Aug 2026 19:04:10 +0530 Subject: [PATCH] fix: resolve feature state inconsistencies --- frontend/src/features/folderSelectors.ts | 14 ++++++++++++-- frontend/src/features/folderThunks.ts | 0 frontend/src/features/memoriesSlice.ts | 14 ++++++-------- frontend/src/features/onboardingSlice.ts | 21 ++++++++++++++++++++- 4 files changed, 38 insertions(+), 11 deletions(-) delete mode 100644 frontend/src/features/folderThunks.ts diff --git a/frontend/src/features/folderSelectors.ts b/frontend/src/features/folderSelectors.ts index 77693f767..4449c3314 100644 --- a/frontend/src/features/folderSelectors.ts +++ b/frontend/src/features/folderSelectors.ts @@ -17,7 +17,12 @@ export const selectFolderById = createSelector( export const selectFoldersByParentId = createSelector( [selectAllFolders, (_: RootState, parentId: string | null) => parentId], (folders, parentId) => - folders.filter((folder) => folder.parent_folder_id === parentId), + folders.filter((folder) => + parentId === null + ? folder.parent_folder_id === null || + folder.parent_folder_id === undefined + : folder.parent_folder_id === parentId, + ), ); // Get root folders (folders with no parent) @@ -54,7 +59,12 @@ export const selectFolderHierarchy = createSelector( parentId: string | null = null, ): FolderDetails[] => { return folders - .filter((folder) => folder.parent_folder_id === parentId) + .filter((folder) => + parentId === null + ? folder.parent_folder_id === null || + folder.parent_folder_id === undefined + : folder.parent_folder_id === parentId, + ) .map((folder) => ({ ...folder, children: buildHierarchy(folder.folder_id), diff --git a/frontend/src/features/folderThunks.ts b/frontend/src/features/folderThunks.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/frontend/src/features/memoriesSlice.ts b/frontend/src/features/memoriesSlice.ts index aab74f282..4db0e2855 100644 --- a/frontend/src/features/memoriesSlice.ts +++ b/frontend/src/features/memoriesSlice.ts @@ -6,6 +6,7 @@ */ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; +import { RootState } from '@/app/store'; export const DEFAULT_SLIDE_DURATION_MS = 5000; @@ -76,13 +77,10 @@ export const { export default memoriesSlice.reducer; -export const selectActiveMemoryId = (state: { memories: MemoriesState }) => +export const selectActiveMemoryId = (state: RootState) => state.memories.activeMemoryId; -export const selectSlideIndex = (state: { memories: MemoriesState }) => - state.memories.slideIndex; -export const selectIsPlaying = (state: { memories: MemoriesState }) => - state.memories.isPlaying; -export const selectIsMuted = (state: { memories: MemoriesState }) => - state.memories.isMuted; -export const selectSlideDurationMs = (state: { memories: MemoriesState }) => +export const selectSlideIndex = (state: RootState) => state.memories.slideIndex; +export const selectIsPlaying = (state: RootState) => state.memories.isPlaying; +export const selectIsMuted = (state: RootState) => state.memories.isMuted; +export const selectSlideDurationMs = (state: RootState) => state.memories.slideDurationMs; diff --git a/frontend/src/features/onboardingSlice.ts b/frontend/src/features/onboardingSlice.ts index 6c7c9442e..89650f75b 100644 --- a/frontend/src/features/onboardingSlice.ts +++ b/frontend/src/features/onboardingSlice.ts @@ -23,10 +23,29 @@ interface OnboardingState { isEditing: boolean; } +function getInitialStepStatus(): boolean[] { + const hasProfile = Boolean( + localStorage.getItem('name') && localStorage.getItem('avatar'), + ); + + return STEP_NAMES.map((stepName) => { + switch (stepName) { + case STEPS.AVATAR_SELECTION_STEP: + return hasProfile; + case STEPS.FOLDER_SETUP_STEP: + return localStorage.getItem('folderChosen') === 'true'; + case STEPS.THEME_SELECTION_STEP: + return localStorage.getItem('themeChosen') === 'true'; + default: + return false; + } + }); +} + const initialState: OnboardingState = { currentStepIndex: 0, currentStepName: STEP_NAMES[0], - stepStatus: STEP_NAMES.map(() => false), + stepStatus: getInitialStepStatus(), avatar: localStorage.getItem('avatar'), name: localStorage.getItem('name') || '', isEditing: false,