|
|
@@ -6,6 +6,7 @@ import { saveUserSettings } from '../utils/api'
|
|
|
import { UserSettings } from '../../../../../types/user-settings'
|
|
|
import { useUserSettingsContext } from '@/shared/context/user-settings-context'
|
|
|
import getMeta from '@/utils/meta'
|
|
|
+import { isBootstrap5 } from '@/features/utils/bootstrap-5'
|
|
|
|
|
|
export default function useSetOverallTheme() {
|
|
|
const [chosenTheme, setChosenTheme] = useState<OverallThemeMeta | null>(null)
|
|
|
@@ -23,7 +24,19 @@ export default function useSetOverallTheme() {
|
|
|
[setUserSettings]
|
|
|
)
|
|
|
|
|
|
+ const skipLoadingStyleSheet = isBootstrap5()
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ // Sets `data-theme` attribute to the body element, needed for Bootstrap 5 theming
|
|
|
+ const theme = overallTheme === 'light-' ? 'light' : 'default'
|
|
|
+ document.body.dataset.theme = theme
|
|
|
+ }, [overallTheme])
|
|
|
+
|
|
|
useEffect(() => {
|
|
|
+ if (skipLoadingStyleSheet) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
const docHeadEl = document.querySelector('head')
|
|
|
const oldStyleSheetEl = document.getElementById('main-stylesheet')
|
|
|
|
|
|
@@ -51,7 +64,12 @@ export default function useSetOverallTheme() {
|
|
|
return () => {
|
|
|
newStyleSheetEl.removeEventListener('load', loadEventCallback)
|
|
|
}
|
|
|
- }, [loadingStyleSheet, setLoadingStyleSheet, chosenTheme?.path])
|
|
|
+ }, [
|
|
|
+ loadingStyleSheet,
|
|
|
+ setLoadingStyleSheet,
|
|
|
+ skipLoadingStyleSheet,
|
|
|
+ chosenTheme?.path,
|
|
|
+ ])
|
|
|
|
|
|
return useCallback(
|
|
|
(newOverallTheme: UserSettings['overallTheme']) => {
|
|
|
@@ -62,13 +80,15 @@ export default function useSetOverallTheme() {
|
|
|
)
|
|
|
|
|
|
if (chosenTheme) {
|
|
|
- setLoadingStyleSheet(true)
|
|
|
+ if (!skipLoadingStyleSheet) {
|
|
|
+ setLoadingStyleSheet(true)
|
|
|
+ }
|
|
|
setChosenTheme(chosenTheme)
|
|
|
setOverallTheme(newOverallTheme)
|
|
|
saveUserSettings('overallTheme', newOverallTheme)
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- [overallTheme, setLoadingStyleSheet, setOverallTheme]
|
|
|
+ [overallTheme, setLoadingStyleSheet, skipLoadingStyleSheet, setOverallTheme]
|
|
|
)
|
|
|
}
|