fix(theming): enforce theme should still provide dark as fallback

Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
pull/46504/head
skjnldsv 2024-07-13 10:07:45 +07:00
parent 4b296c750a
commit 1d00f48d26
4 changed files with 22 additions and 5 deletions

@ -28,7 +28,7 @@ class ThemesService {
private LoggerInterface $logger, private LoggerInterface $logger,
private DefaultTheme $defaultTheme, private DefaultTheme $defaultTheme,
LightTheme $lightTheme, LightTheme $lightTheme,
DarkTheme $darkTheme, private DarkTheme $darkTheme,
HighContrastTheme $highContrastTheme, HighContrastTheme $highContrastTheme,
DarkHighContrastTheme $darkHighContrastTheme, DarkHighContrastTheme $darkHighContrastTheme,
DyslexiaFont $dyslexiaFont) { DyslexiaFont $dyslexiaFont) {
@ -59,9 +59,15 @@ class ThemesService {
} }
$defaultTheme = $this->themesProviders[$this->defaultTheme->getId()]; $defaultTheme = $this->themesProviders[$this->defaultTheme->getId()];
$darkTheme = $this->themesProviders[$this->darkTheme->getId()];
$theme = $this->themesProviders[$enforcedTheme]; $theme = $this->themesProviders[$enforcedTheme];
return [ return [
// Leave the default theme as a fallback
$defaultTheme->getId() => $defaultTheme, $defaultTheme->getId() => $defaultTheme,
// Make sure we also have the dark theme to allow apps
// to scope sections of their UI to the dark theme
$darkTheme->getId() => $darkTheme,
// Finally, the enforced theme
$theme->getId() => $theme, $theme->getId() => $theme,
]; ];
} }

@ -13,7 +13,10 @@
<span v-if="enforced" class="theming__preview-warning" role="note"> <span v-if="enforced" class="theming__preview-warning" role="note">
{{ t('theming', 'Theme selection is enforced') }} {{ t('theming', 'Theme selection is enforced') }}
</span> </span>
<NcCheckboxRadioSwitch class="theming__preview-toggle"
<!-- Only show checkbox if we can change themes -->
<NcCheckboxRadioSwitch v-show="!enforced"
class="theming__preview-toggle"
:checked.sync="checked" :checked.sync="checked"
:disabled="enforced" :disabled="enforced"
:name="name" :name="name"
@ -73,6 +76,10 @@ export default {
return this.selected return this.selected
}, },
set(checked) { set(checked) {
if (this.enforced) {
return
}
console.debug('Changed theme', this.theme.id, checked) console.debug('Changed theme', this.theme.id, checked)
// If this is a radio, we can only enable // If this is a radio, we can only enable
@ -89,6 +96,10 @@ export default {
methods: { methods: {
onToggle() { onToggle() {
if (this.enforced) {
return
}
if (this.switchType === 'radio') { if (this.switchType === 'radio') {
this.checked = true this.checked = true
return return

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long