diff --git a/client/src/AppRoutes.tsx b/client/src/AppRoutes.tsx index 08574ba..b215903 100644 --- a/client/src/AppRoutes.tsx +++ b/client/src/AppRoutes.tsx @@ -1,5 +1,5 @@ import { Routes, Route } from "react-router-dom"; -import { ProvideSettings } from "./context/settings"; +import { ProvideSettings, useSettings } from "./context/settings"; import FlyingButterflies, { BUTTERFLY_PRESETS } from "./FlyingButterflies"; import "./FlyingButterflies.scss"; import { ToastContainer } from "react-toastify"; @@ -13,6 +13,15 @@ export const STATS_URL = '/stats'; export const OBJEDNANI_URL = '/objednani'; export const NAVRHY_URL = '/navrhy'; +/** Motýlci se vykreslují jen pokud je uživatel nevypnul v nastavení. */ +function Butterflies() { + const settings = useSettings(); + if (settings?.showButterflies === false) { + return null; + } + return ; +} + export default function AppRoutes() { return ( @@ -34,7 +43,7 @@ export default function AppRoutes() { <> - + diff --git a/client/src/components/modals/SettingsModal.tsx b/client/src/components/modals/SettingsModal.tsx index d5c2a6a..fb0c85d 100644 --- a/client/src/components/modals/SettingsModal.tsx +++ b/client/src/components/modals/SettingsModal.tsx @@ -20,6 +20,7 @@ export default function SettingsModal({ isOpen, onClose, onSave }: Readonly(null); const themeRef = useRef(null); const styleThemeRef = useRef(null); + const showButterfliesRef = useRef(null); const reminderTimeRef = useRef(null); const boltDeliveredRef = useRef(null); @@ -79,6 +80,9 @@ export default function SettingsModal({ isOpen, onClose, onSave }: ReadonlyTmavý + + + + Po vypnutí se poletující motýlci ani minihra nebudou vůbec zobrazovat. + +
diff --git a/client/src/context/settings.tsx b/client/src/context/settings.tsx index 753999a..53c21b9 100644 --- a/client/src/context/settings.tsx +++ b/client/src/context/settings.tsx @@ -7,6 +7,7 @@ const THEME_KEY = 'theme_preference'; const ACCENT_HUE_KEY = 'accent_hue'; const LEGACY_COLOR_THEME_KEY = 'color_theme'; const STYLE_THEME_KEY = 'style_theme'; +const SHOW_BUTTERFLIES_KEY = 'show_butterflies'; export type ThemePreference = 'system' | 'light' | 'dark'; @@ -28,12 +29,14 @@ export type SettingsContextProps = { accentHue: number, effectiveDark: boolean, styleTheme: StyleTheme, + showButterflies: boolean, setBankAccountNumber: (accountNumber?: string) => void, setBankAccountHolderName: (holderName?: string) => void, setHideSoupsOption: (hideSoups?: boolean) => void, setThemePreference: (theme: ThemePreference) => void, setAccentHue: (hue: number) => void, setStyleTheme: (theme: StyleTheme) => void, + setShowButterflies: (show: boolean) => void, } type ContextProps = { @@ -76,6 +79,15 @@ function getInitialStyleTheme(): StyleTheme { return 'simple'; } +function getInitialShowButterflies(): boolean { + try { + return localStorage.getItem(SHOW_BUTTERFLIES_KEY) !== 'false'; + } catch { + // localStorage nedostupný + } + return true; +} + function getInitialAccentHue(): number { try { const saved = localStorage.getItem(ACCENT_HUE_KEY); @@ -143,6 +155,7 @@ function useProvideSettings(): SettingsContextProps { const [themePreference, setTheme] = useState(getInitialTheme); const [accentHue, setHue] = useState(getInitialAccentHue); const [styleTheme, setStyle] = useState(getInitialStyleTheme); + const [showButterflies, setShowButterfliesState] = useState(getInitialShowButterflies); const [effectiveDark, setEffectiveDark] = useState(() => { try { const pref = localStorage.getItem(THEME_KEY) as ThemePreference | null; @@ -216,6 +229,10 @@ function useProvideSettings(): SettingsContextProps { document.documentElement.setAttribute('data-luncher-theme', styleTheme); }, [styleTheme]); + useEffect(() => { + localStorage.setItem(SHOW_BUTTERFLIES_KEY, showButterflies ? 'true' : 'false'); + }, [showButterflies]); + // Aplikuje accent barvy při změně hue nebo přepnutí světlý/tmavý. // Tematické styly (Umamusume, My Little Pony, Hell Girl) mají vlastní pevnou paletu, accent barvu proto uplatňuje jen jednoduchý styl. useEffect(() => { @@ -251,6 +268,10 @@ function useProvideSettings(): SettingsContextProps { setStyle(theme); } + function setShowButterflies(show: boolean) { + setShowButterfliesState(show); + } + return { bankAccount, holderName, @@ -265,5 +286,7 @@ function useProvideSettings(): SettingsContextProps { setAccentHue, styleTheme, setStyleTheme, + showButterflies, + setShowButterflies, } } diff --git a/server/changelogs/2026-10-12.json b/server/changelogs/2026-10-12.json new file mode 100644 index 0000000..bb14e16 --- /dev/null +++ b/server/changelogs/2026-10-12.json @@ -0,0 +1,3 @@ +[ + "Možnost v nastavení úplně vypnout poletující motýlky" +]