From 85a7df29db86cd2a589e2e6e0a707f2ea20df05b Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sat, 17 Jan 2026 01:53:08 -0800 Subject: [PATCH] fix settings reset - force reset by deleting local storage state and reloading the window - the default reset functionality does not seem to work due to the persistence --- .../columns/artists-column.tsx | 8 ++- .../columns/row-index-column.tsx | 3 +- src/renderer/store/settings.store.ts | 63 +------------------ 3 files changed, 9 insertions(+), 65 deletions(-) diff --git a/src/renderer/components/item-list/item-table-list/columns/artists-column.tsx b/src/renderer/components/item-list/item-table-list/columns/artists-column.tsx index b94481d5f..2c7ea1d88 100644 --- a/src/renderer/components/item-list/item-table-list/columns/artists-column.tsx +++ b/src/renderer/components/item-list/item-table-list/columns/artists-column.tsx @@ -17,7 +17,9 @@ import { LibraryItem, RelatedAlbumArtist, Song } from '/@/shared/types/domain-ty const AlbumArtistsColumn = (props: ItemTableListInnerColumn) => { const rowItem = props.getRowItem?.(props.rowIndex) ?? (props.data as any[])[props.rowIndex]; - const row: RelatedAlbumArtist[] | undefined = (rowItem as any)?.[props.columns[props.columnIndex].id]; + const row: RelatedAlbumArtist[] | undefined = (rowItem as any)?.[ + props.columns[props.columnIndex].id + ]; const artists = useMemo(() => { if (!row) return []; @@ -66,8 +68,8 @@ const AlbumArtistsColumn = (props: ItemTableListInnerColumn) => { }; const SongArtistsColumn = (props: ItemTableListInnerColumn) => { - const row: Song | undefined = - (props.getRowItem?.(props.rowIndex) ?? (props.data as any[])[props.rowIndex]) as Song | undefined; + const row: Song | undefined = (props.getRowItem?.(props.rowIndex) ?? + (props.data as any[])[props.rowIndex]) as Song | undefined; if (row) { return ( diff --git a/src/renderer/components/item-list/item-table-list/columns/row-index-column.tsx b/src/renderer/components/item-list/item-table-list/columns/row-index-column.tsx index 930c9bf2e..f60967102 100644 --- a/src/renderer/components/item-list/item-table-list/columns/row-index-column.tsx +++ b/src/renderer/components/item-list/item-table-list/columns/row-index-column.tsx @@ -61,7 +61,8 @@ const DefaultRowIndexColumn = (props: ItemTableListInnerColumn) => { icon="arrowDownS" iconProps={{ color: 'muted', size: 'md' }} onClick={(e) => { - const item = (props.getRowItem?.(rowIndex) ?? data[rowIndex]) as ItemListItem; + const item = (props.getRowItem?.(rowIndex) ?? + data[rowIndex]) as ItemListItem; const rowId = internalState.extractRowId(item); const index = rowId ? internalState.findItemIndex(rowId) : -1; controls.onExpand?.({ diff --git a/src/renderer/store/settings.store.ts b/src/renderer/store/settings.store.ts index a65711f7b..b66fe3daa 100644 --- a/src/renderer/store/settings.store.ts +++ b/src/renderer/store/settings.store.ts @@ -1628,73 +1628,14 @@ const initialState: SettingsState = { }, }; -// Helper function to create a deep clone of initialState -const getInitialState = (): SettingsState => { - const freshHomeItems = Object.values(HomeItem).map((item) => ({ - disabled: false, - id: item, - })); - - const freshArtistItems = Object.values(ArtistItem).map((item) => ({ - disabled: false, - id: item, - })); - - const freshArtistReleaseTypeItems = Object.values(ArtistReleaseTypeItem).map((item) => ({ - disabled: false, - id: item, - })); - - // Deep clone using JSON to ensure all nested objects/arrays are fresh copies - const clonedState = JSON.parse(JSON.stringify(initialState)) as SettingsState; - - // Replace arrays that need fresh references - clonedState.general.homeItems = freshHomeItems; - clonedState.general.artistItems = freshArtistItems; - clonedState.general.artistReleaseTypeItems = freshArtistReleaseTypeItems; - clonedState.general.sidebarItems = JSON.parse( - JSON.stringify(sidebarItems), - ) as SidebarItemType[]; - - // Regenerate random password for remote settings - clonedState.remote.password = randomString(8); - - return clonedState; -}; - export const useSettingsStore = createWithEqualityFn()( persist( devtools( immer((set) => ({ actions: { reset: () => { - const freshState = getInitialState(); - set((state) => { - // Deep clone the fresh state to ensure all nested objects/arrays are new references - const resetState = JSON.parse( - JSON.stringify(freshState), - ) as SettingsState; - - // Override playback type for web if not electron - if (!isElectron()) { - resetState.playback.type = PlayerType.WEB; - } - - // Replace all state properties (except actions) with the reset state - state.css = resetState.css; - state.discord = resetState.discord; - state.font = resetState.font; - state.general = resetState.general; - state.hotkeys = resetState.hotkeys; - state.lists = resetState.lists; - state.lyrics = resetState.lyrics; - state.playback = resetState.playback; - state.queryBuilder = resetState.queryBuilder; - state.remote = resetState.remote; - state.tab = resetState.tab; - state.visualizer = resetState.visualizer; - state.window = resetState.window; - }); + localStorage.removeItem('store_settings'); + window.location.reload(); }, resetSampleRate: () => { set((state) => {