mirror of
https://github.com/actualbudget/actual.git
synced 2026-03-11 20:44:32 -05:00
Compare commits
4 Commits
react-quer
...
fix-themes
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
794ec360c7 | ||
|
|
5942b58893 | ||
|
|
88ea0eab45 | ||
|
|
293d2c04c4 |
@@ -1,5 +1,5 @@
|
|||||||
// @ts-strict-ignore
|
// @ts-strict-ignore
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useLayoutEffect, useState } from 'react';
|
||||||
import { DndProvider } from 'react-dnd';
|
import { DndProvider } from 'react-dnd';
|
||||||
import { HTML5Backend } from 'react-dnd-html5-backend';
|
import { HTML5Backend } from 'react-dnd-html5-backend';
|
||||||
import {
|
import {
|
||||||
@@ -128,7 +128,7 @@ export function App() {
|
|||||||
);
|
);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
useEffect(() => {
|
useLayoutEffect(() => {
|
||||||
function checkScrollbars() {
|
function checkScrollbars() {
|
||||||
if (hiddenScrollbars !== hasHiddenScrollbars()) {
|
if (hiddenScrollbars !== hasHiddenScrollbars()) {
|
||||||
setHiddenScrollbars(hasHiddenScrollbars());
|
setHiddenScrollbars(hasHiddenScrollbars());
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// @ts-strict-ignore
|
// @ts-strict-ignore
|
||||||
import { useEffect, useState } from 'react';
|
import { useCallback, useEffect, useLayoutEffect, useState } from 'react';
|
||||||
|
|
||||||
import { isNonProductionEnvironment } from 'loot-core/src/shared/environment';
|
import { isNonProductionEnvironment } from 'loot-core/src/shared/environment';
|
||||||
import type { DarkTheme, Theme } from 'loot-core/src/types/prefs';
|
import type { DarkTheme, Theme } from 'loot-core/src/types/prefs';
|
||||||
@@ -52,42 +52,44 @@ export function ThemeStyle() {
|
|||||||
| undefined
|
| undefined
|
||||||
>(undefined);
|
>(undefined);
|
||||||
|
|
||||||
|
const setAutoThemeColors = useCallback(
|
||||||
|
(isDarkMode: boolean) => {
|
||||||
|
if (isDarkMode) {
|
||||||
|
setThemeColors(themes[darkThemePreference].colors);
|
||||||
|
} else {
|
||||||
|
setThemeColors(themes['light'].colors);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[darkThemePreference],
|
||||||
|
);
|
||||||
|
|
||||||
|
useLayoutEffect(() => {
|
||||||
|
if (theme === 'auto') {
|
||||||
|
const isDarkMode = window.matchMedia(
|
||||||
|
'(prefers-color-scheme: dark)',
|
||||||
|
).matches;
|
||||||
|
setAutoThemeColors(isDarkMode);
|
||||||
|
} else {
|
||||||
|
setThemeColors(themes[theme].colors);
|
||||||
|
}
|
||||||
|
}, [theme, darkThemePreference, setAutoThemeColors]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (theme === 'auto') {
|
if (theme === 'auto') {
|
||||||
const darkTheme = themes[darkThemePreference];
|
|
||||||
|
|
||||||
function darkThemeMediaQueryListener(event: MediaQueryListEvent) {
|
|
||||||
if (event.matches) {
|
|
||||||
setThemeColors(darkTheme.colors);
|
|
||||||
} else {
|
|
||||||
setThemeColors(themes['light'].colors);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const darkThemeMediaQuery = window.matchMedia(
|
const darkThemeMediaQuery = window.matchMedia(
|
||||||
'(prefers-color-scheme: dark)',
|
'(prefers-color-scheme: dark)',
|
||||||
);
|
);
|
||||||
|
|
||||||
darkThemeMediaQuery.addEventListener(
|
const changeListener = (event: MediaQueryListEvent) => {
|
||||||
'change',
|
setAutoThemeColors(event.matches);
|
||||||
darkThemeMediaQueryListener,
|
};
|
||||||
);
|
|
||||||
|
darkThemeMediaQuery.addEventListener('change', changeListener);
|
||||||
if (darkThemeMediaQuery.matches) {
|
return () => {
|
||||||
setThemeColors(darkTheme.colors);
|
darkThemeMediaQuery.removeEventListener('change', changeListener);
|
||||||
} else {
|
|
||||||
setThemeColors(themes['light'].colors);
|
|
||||||
}
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
darkThemeMediaQuery.removeEventListener(
|
|
||||||
'change',
|
|
||||||
darkThemeMediaQueryListener,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
} else {
|
|
||||||
setThemeColors(themes[theme].colors);
|
|
||||||
}
|
}
|
||||||
}, [theme, darkThemePreference]);
|
}, [setAutoThemeColors, theme]);
|
||||||
|
|
||||||
if (!themeColors) return null;
|
if (!themeColors) return null;
|
||||||
|
|
||||||
|
|||||||
6
upcoming-release-notes/3520.md
Normal file
6
upcoming-release-notes/3520.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
category: Bugfix
|
||||||
|
authors: [joel-jeremy]
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix the theme color change that happens when initially loading the page where initially it's set to light mode and then switches to the configured theme.
|
||||||
Reference in New Issue
Block a user