mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +02:00
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
This commit is contained in:
@@ -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 (
|
||||
|
||||
@@ -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?.({
|
||||
|
||||
@@ -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<SettingsSlice>()(
|
||||
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) => {
|
||||
|
||||
Reference in New Issue
Block a user