diff --git a/frontend/src/App/App.js b/frontend/src/App/App.js
index 1eea6e082..eea9b7d38 100644
--- a/frontend/src/App/App.js
+++ b/frontend/src/App/App.js
@@ -12,11 +12,10 @@ function App({ store, history }) {
-
-
-
-
-
+
+
+
+
diff --git a/frontend/src/App/ApplyTheme.js b/frontend/src/App/ApplyTheme.js
deleted file mode 100644
index bd4d6a6c8..000000000
--- a/frontend/src/App/ApplyTheme.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import PropTypes from 'prop-types';
-import React, { Fragment, useCallback, useEffect } from 'react';
-import { connect } from 'react-redux';
-import { createSelector } from 'reselect';
-import themes from 'Styles/Themes';
-
-function createMapStateToProps() {
- return createSelector(
- (state) => state.settings.ui.item.theme || window.Prowlarr.theme,
- (
- theme
- ) => {
- return {
- theme
- };
- }
- );
-}
-
-function ApplyTheme({ theme, children }) {
- // Update the CSS Variables
-
- const updateCSSVariables = useCallback(() => {
- const arrayOfVariableKeys = Object.keys(themes[theme]);
- const arrayOfVariableValues = Object.values(themes[theme]);
-
- // Loop through each array key and set the CSS Variables
- arrayOfVariableKeys.forEach((cssVariableKey, index) => {
- // Based on our snippet from MDN
- document.documentElement.style.setProperty(
- `--${cssVariableKey}`,
- arrayOfVariableValues[index]
- );
- });
- }, [theme]);
-
- // On Component Mount and Component Update
- useEffect(() => {
- updateCSSVariables(theme);
- }, [updateCSSVariables, theme]);
-
- return {children};
-}
-
-ApplyTheme.propTypes = {
- theme: PropTypes.string.isRequired,
- children: PropTypes.object.isRequired
-};
-
-export default connect(createMapStateToProps)(ApplyTheme);
diff --git a/frontend/src/App/ApplyTheme.tsx b/frontend/src/App/ApplyTheme.tsx
new file mode 100644
index 000000000..392c49049
--- /dev/null
+++ b/frontend/src/App/ApplyTheme.tsx
@@ -0,0 +1,37 @@
+import React, { Fragment, ReactNode, useCallback, useEffect } from 'react';
+import { useSelector } from 'react-redux';
+import { createSelector } from 'reselect';
+import themes from 'Styles/Themes';
+import AppState from './State/AppState';
+
+interface ApplyThemeProps {
+ children: ReactNode;
+}
+
+function createThemeSelector() {
+ return createSelector(
+ (state: AppState) => state.settings.ui.item.theme || window.Prowlarr.theme,
+ (theme) => {
+ return theme;
+ }
+ );
+}
+
+function ApplyTheme({ children }: ApplyThemeProps) {
+ const theme = useSelector(createThemeSelector());
+
+ const updateCSSVariables = useCallback(() => {
+ Object.entries(themes[theme]).forEach(([key, value]) => {
+ document.documentElement.style.setProperty(`--${key}`, value);
+ });
+ }, [theme]);
+
+ // On Component Mount and Component Update
+ useEffect(() => {
+ updateCSSVariables();
+ }, [updateCSSVariables, theme]);
+
+ return {children};
+}
+
+export default ApplyTheme;
diff --git a/frontend/src/Styles/Themes/dark.js b/frontend/src/Styles/Themes/dark.js
index 79911686f..a7cbb6de0 100644
--- a/frontend/src/Styles/Themes/dark.js
+++ b/frontend/src/Styles/Themes/dark.js
@@ -188,7 +188,7 @@ module.exports = {
// Charts
chartBackgroundColor: '#262626',
- failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'],
- chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'],
- chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26']
+ failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'].join(','),
+ chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'].join(','),
+ chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26'].join(',')
};
diff --git a/frontend/src/Styles/Themes/index.js b/frontend/src/Styles/Themes/index.js
index d93c5dd8c..4dec39164 100644
--- a/frontend/src/Styles/Themes/index.js
+++ b/frontend/src/Styles/Themes/index.js
@@ -2,7 +2,7 @@ import * as dark from './dark';
import * as light from './light';
const defaultDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
-const auto = defaultDark ? { ...dark } : { ...light };
+const auto = defaultDark ? dark : light;
export default {
auto,
diff --git a/frontend/src/Styles/Themes/light.js b/frontend/src/Styles/Themes/light.js
index 8a6d123b2..f88070a0f 100644
--- a/frontend/src/Styles/Themes/light.js
+++ b/frontend/src/Styles/Themes/light.js
@@ -188,7 +188,7 @@ module.exports = {
// Charts
chartBackgroundColor: '#fff',
- failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'],
- chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'],
- chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26']
+ failedColors: ['#ffbeb2', '#feb4a6', '#fdab9b', '#fca290', '#fb9984', '#fa8f79', '#f9856e', '#f77b66', '#f5715d', '#f36754', '#f05c4d', '#ec5049', '#e74545', '#e13b42', '#da323f', '#d3293d', '#ca223c', '#c11a3b', '#b8163a', '#ae123a'].join(','),
+ chartColorsDiversified: ['#90caf9', '#f4d166', '#ff8a65', '#ce93d8', '#80cba9', '#ffab91', '#8097ea', '#bcaaa4', '#a57583', '#e4e498', '#9e96af', '#c6ab81', '#6972c6', '#619fc6', '#81ad81', '#f48fb1', '#82afca', '#b5b071', '#8b959b', '#7ec0b4'].join(','),
+ chartColors: ['#f4d166', '#f6c760', '#f8bc58', '#f8b252', '#f7a84a', '#f69e41', '#f49538', '#f38b2f', '#f28026', '#f0751e', '#eb6c1c', '#e4641e', '#de5d1f', '#d75521', '#cf4f22', '#c64a22', '#bc4623', '#b24223', '#a83e24', '#9e3a26'].join(',')
};
diff --git a/frontend/src/login.html b/frontend/src/login.html
index c3773b641..54535dc5d 100644
--- a/frontend/src/login.html
+++ b/frontend/src/login.html
@@ -57,8 +57,8 @@