Add reset to default for settings
This commit is contained in:
parent
293d8ec584
commit
0d4d5b5de0
2 changed files with 212 additions and 161 deletions
|
@ -1,13 +1,45 @@
|
||||||
|
import { Flex, Group } from '@mantine/core';
|
||||||
|
import { closeAllModals, openModal } from '@mantine/modals';
|
||||||
import { RiSettings2Fill } from 'react-icons/ri';
|
import { RiSettings2Fill } from 'react-icons/ri';
|
||||||
import { PageHeader } from '/@/renderer/components';
|
import { Button, ConfirmModal, PageHeader } from '/@/renderer/components';
|
||||||
import { LibraryHeaderBar } from '/@/renderer/features/shared';
|
import { LibraryHeaderBar } from '/@/renderer/features/shared';
|
||||||
|
import { useSettingsStoreActions } from '../../../store/settings.store';
|
||||||
|
|
||||||
export const SettingsHeader = () => {
|
export const SettingsHeader = () => {
|
||||||
|
const { reset } = useSettingsStoreActions();
|
||||||
|
|
||||||
|
const handleResetToDefault = () => {
|
||||||
|
reset();
|
||||||
|
closeAllModals();
|
||||||
|
};
|
||||||
|
|
||||||
|
const openResetConfirmModal = () => {
|
||||||
|
openModal({
|
||||||
|
children: <ConfirmModal onConfirm={handleResetToDefault}>Are you sure?</ConfirmModal>,
|
||||||
|
title: 'Reset settings to default',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageHeader>
|
<PageHeader>
|
||||||
<LibraryHeaderBar>
|
<LibraryHeaderBar>
|
||||||
|
<Flex
|
||||||
|
align="center"
|
||||||
|
justify="space-between"
|
||||||
|
w="100%"
|
||||||
|
>
|
||||||
|
<Group noWrap>
|
||||||
<RiSettings2Fill size="2rem" />
|
<RiSettings2Fill size="2rem" />
|
||||||
<LibraryHeaderBar.Title>Settings</LibraryHeaderBar.Title>
|
<LibraryHeaderBar.Title>Settings</LibraryHeaderBar.Title>
|
||||||
|
</Group>
|
||||||
|
<Button
|
||||||
|
compact
|
||||||
|
variant="default"
|
||||||
|
onClick={openResetConfirmModal}
|
||||||
|
>
|
||||||
|
Reset to default
|
||||||
|
</Button>
|
||||||
|
</Flex>
|
||||||
</LibraryHeaderBar>
|
</LibraryHeaderBar>
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* eslint-disable prefer-destructuring */
|
/* eslint-disable prefer-destructuring */
|
||||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||||
|
import isElectron from 'is-electron';
|
||||||
import merge from 'lodash/merge';
|
import merge from 'lodash/merge';
|
||||||
import create from 'zustand';
|
import create from 'zustand';
|
||||||
import { devtools, persist } from 'zustand/middleware';
|
import { devtools, persist } from 'zustand/middleware';
|
||||||
|
@ -80,19 +81,12 @@ export interface SettingsState {
|
||||||
|
|
||||||
export interface SettingsSlice extends SettingsState {
|
export interface SettingsSlice extends SettingsState {
|
||||||
actions: {
|
actions: {
|
||||||
|
reset: () => void;
|
||||||
setSettings: (data: Partial<SettingsState>) => void;
|
setSettings: (data: Partial<SettingsState>) => void;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useSettingsStore = create<SettingsSlice>()(
|
const initialState: SettingsState = {
|
||||||
persist(
|
|
||||||
devtools(
|
|
||||||
immer((set, get) => ({
|
|
||||||
actions: {
|
|
||||||
setSettings: (data) => {
|
|
||||||
set({ ...get(), ...data });
|
|
||||||
},
|
|
||||||
},
|
|
||||||
general: {
|
general: {
|
||||||
followSystemTheme: false,
|
followSystemTheme: false,
|
||||||
fontContent: 'Poppins',
|
fontContent: 'Poppins',
|
||||||
|
@ -251,6 +245,31 @@ export const useSettingsStore = create<SettingsSlice>()(
|
||||||
minimizeToTray: false,
|
minimizeToTray: false,
|
||||||
windowBarStyle: Platform.WEB,
|
windowBarStyle: Platform.WEB,
|
||||||
},
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useSettingsStore = create<SettingsSlice>()(
|
||||||
|
persist(
|
||||||
|
devtools(
|
||||||
|
immer((set, get) => ({
|
||||||
|
actions: {
|
||||||
|
reset: () => {
|
||||||
|
if (!isElectron()) {
|
||||||
|
set({
|
||||||
|
...initialState,
|
||||||
|
playback: {
|
||||||
|
...initialState.playback,
|
||||||
|
type: PlaybackType.WEB,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
set(initialState);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setSettings: (data) => {
|
||||||
|
set({ ...get(), ...data });
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...initialState,
|
||||||
})),
|
})),
|
||||||
{ name: 'store_settings' },
|
{ name: 'store_settings' },
|
||||||
),
|
),
|
||||||
|
|
Reference in a new issue