feat: allow users to override color scheme (closes #138)

This commit is contained in:
Lei Nelissen
2023-04-28 21:01:21 +02:00
parent 24b25d9f4f
commit 130b18bc2e
20 changed files with 249 additions and 66 deletions

View File

@@ -8,6 +8,7 @@ import settings from './settings';
import music, { initialState as musicInitialState } from './music';
import downloads, { initialState as downloadsInitialState } from './downloads';
import { PersistState } from 'redux-persist/es/types';
import { ColorScheme } from './settings/types';
const persistConfig: PersistConfig<Omit<AppState, '_persist'>> = {
key: 'root',
@@ -44,6 +45,16 @@ const persistConfig: PersistConfig<Omit<AppState, '_persist'>> = {
}
};
},
// @ts-expect-error migrations are poorly typed
4: (state: AppState) => {
return {
...state,
settings: {
...state.settings,
colorScheme: ColorScheme.System,
}
};
},
})
};

View File

@@ -1,7 +1,9 @@
import { createAction } from '@reduxjs/toolkit';
import { ColorScheme } from './types';
export const setJellyfinCredentials = createAction<{ access_token: string, user_id: string, uri: string, device_id: string; }>('SET_JELLYFIN_CREDENTIALS');
export const setBitrate = createAction<number>('SET_BITRATE');
export const setOnboardingStatus = createAction<boolean>('SET_ONBOARDING_STATUS');
export const setReceivedErrorReportingAlert = createAction<void>('SET_RECEIVED_ERROR_REPORTING_ALERT');
export const setEnablePlaybackReporting = createAction<boolean>('SET_ENABLE_PLAYBACK_REPORTING');
export const setEnablePlaybackReporting = createAction<boolean>('SET_ENABLE_PLAYBACK_REPORTING');
export const setColorScheme = createAction<ColorScheme>('SET_COLOR_SCHEME');

View File

@@ -1,5 +1,6 @@
import { createReducer } from '@reduxjs/toolkit';
import { setReceivedErrorReportingAlert, setBitrate, setJellyfinCredentials, setOnboardingStatus, setEnablePlaybackReporting } from './actions';
import { setReceivedErrorReportingAlert, setBitrate, setJellyfinCredentials, setOnboardingStatus, setEnablePlaybackReporting, setColorScheme } from './actions';
import { ColorScheme } from './types';
interface State {
jellyfin?: {
@@ -12,6 +13,7 @@ interface State {
isOnboardingComplete: boolean;
hasReceivedErrorReportingAlert: boolean;
enablePlaybackReporting: boolean;
colorScheme: ColorScheme;
}
const initialState: State = {
@@ -19,6 +21,7 @@ const initialState: State = {
isOnboardingComplete: false,
hasReceivedErrorReportingAlert: false,
enablePlaybackReporting: true,
colorScheme: ColorScheme.System,
};
const settings = createReducer(initialState, builder => {
@@ -42,6 +45,10 @@ const settings = createReducer(initialState, builder => {
...state,
enablePlaybackReporting: action.payload,
}));
builder.addCase(setColorScheme, (state, action) => ({
...state,
colorScheme: action.payload,
}));
});
export default settings;

View File

@@ -0,0 +1,5 @@
export enum ColorScheme {
System = 'system',
Light = 'light',
Dark = 'dark',
}