mirror of
https://github.com/jeffvli/feishin.git
synced 2026-06-12 23:32:19 +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 AlbumArtistsColumn = (props: ItemTableListInnerColumn) => {
|
||||||
const rowItem = props.getRowItem?.(props.rowIndex) ?? (props.data as any[])[props.rowIndex];
|
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(() => {
|
const artists = useMemo(() => {
|
||||||
if (!row) return [];
|
if (!row) return [];
|
||||||
@@ -66,8 +68,8 @@ const AlbumArtistsColumn = (props: ItemTableListInnerColumn) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SongArtistsColumn = (props: ItemTableListInnerColumn) => {
|
const SongArtistsColumn = (props: ItemTableListInnerColumn) => {
|
||||||
const row: Song | undefined =
|
const row: Song | undefined = (props.getRowItem?.(props.rowIndex) ??
|
||||||
(props.getRowItem?.(props.rowIndex) ?? (props.data as any[])[props.rowIndex]) as Song | undefined;
|
(props.data as any[])[props.rowIndex]) as Song | undefined;
|
||||||
|
|
||||||
if (row) {
|
if (row) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ const DefaultRowIndexColumn = (props: ItemTableListInnerColumn) => {
|
|||||||
icon="arrowDownS"
|
icon="arrowDownS"
|
||||||
iconProps={{ color: 'muted', size: 'md' }}
|
iconProps={{ color: 'muted', size: 'md' }}
|
||||||
onClick={(e) => {
|
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 rowId = internalState.extractRowId(item);
|
||||||
const index = rowId ? internalState.findItemIndex(rowId) : -1;
|
const index = rowId ? internalState.findItemIndex(rowId) : -1;
|
||||||
controls.onExpand?.({
|
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>()(
|
export const useSettingsStore = createWithEqualityFn<SettingsSlice>()(
|
||||||
persist(
|
persist(
|
||||||
devtools(
|
devtools(
|
||||||
immer((set) => ({
|
immer((set) => ({
|
||||||
actions: {
|
actions: {
|
||||||
reset: () => {
|
reset: () => {
|
||||||
const freshState = getInitialState();
|
localStorage.removeItem('store_settings');
|
||||||
set((state) => {
|
window.location.reload();
|
||||||
// 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;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
resetSampleRate: () => {
|
resetSampleRate: () => {
|
||||||
set((state) => {
|
set((state) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user