1/n Fixing dark mode

This commit is contained in:
Igor Katson 2023-12-16 10:23:24 +00:00
parent f42e57d464
commit 8d886e0961
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
6 changed files with 31 additions and 35 deletions

View file

@ -7,7 +7,7 @@ import Logo from "../../assets/logo.svg?react";
export const Header = ({ title }: { title: string }) => {
const [name, version] = title.split("-");
return (
<header className="bg-slate-50 drop-shadow-lg flex flex-wrap justify-center lg:justify-between items-center dark:bg-slate-800">
<header className="bg-slate-50 drop-shadow-lg flex flex-wrap justify-center lg:justify-between items-center dark:bg-slate-800 mb-3">
<div className="flex flex-nowrap items-center justify-between m-2">
<Logo className="w-10 h-10 p-1" alt="logo" />
<h1 className="flex items-center dark:text-white">

View file

@ -22,7 +22,7 @@ export const TorrentsList = (props: {
);
}
return (
<div className="flex flex-col gap-2 mx-2 mt-3">
<div className="flex flex-col gap-2 mx-2">
{props.torrents.map((t: TorrentId) => (
<Torrent id={t.id} key={t.id} torrent={t} />
))}

View file

@ -1,27 +0,0 @@
import { useState, useEffect } from "react";
const DarkModeToggle = () => {
const getInitialState = () => {
const storedDarkMode = localStorage.getItem("darkMode");
return storedDarkMode ? JSON.parse(storedDarkMode) : false;
};
const [isDarkMode, setIsDarkMode] = useState<boolean>(getInitialState);
useEffect(() => {
document.body.classList.toggle("dark", isDarkMode);
localStorage.setItem("darkMode", JSON.stringify(isDarkMode));
}, [isDarkMode]);
return (
<div className="fixed bottom-5 right-5">
<button
onClick={() => setIsDarkMode((prev) => !prev)}
className="ml-2 text-gray-700 dark:text-gray-300"
>
Dark Mode
</button>
</div>
);
};
export default DarkModeToggle;

View file

@ -0,0 +1,21 @@
let darkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
window
.matchMedia("(prefers-color-scheme: dark)")
.addEventListener("change", (event) => {
DarkMode.setDark(event.matches);
});
export const DarkMode = {
isDark: () => darkMode,
setDark: (value: boolean) => {
darkMode = value;
document.body.classList.toggle("dark", darkMode);
return darkMode;
},
toggle: () => {
DarkMode.setDark(!darkMode);
},
};
DarkMode.setDark(darkMode);

View file

@ -4,10 +4,10 @@ import { AppContext, APIContext } from "./context";
import { RootContent } from "./components/RootContent";
import { customSetInterval } from "./helper/customSetInterval";
import { IconButton } from "./components/buttons/IconButton";
import { BsBodyText } from "react-icons/bs";
import { BsBodyText, BsMoon } from "react-icons/bs";
import { LogStreamModal } from "./components/modal/LogStreamModal";
import { Header } from "./components/Header";
import DarkModeToggle from "./components/buttons/DarkModeToggle";
import { DarkMode } from "./helper/darkMode";
export interface ErrorWithLabel {
text: string;
@ -68,7 +68,7 @@ export const RqbitWebUI = (props: {
return (
<AppContext.Provider value={context}>
<Header title={props.title} />
<div className="relative dark:bg-gray-900 pt-3 min-h-screen h-full">
<div className="relative dark:bg-gray-900">
{/* Menu buttons */}
<div className="absolute top-0 start-0 pl-2 z-10">
{props.menuButtons &&
@ -76,6 +76,9 @@ export const RqbitWebUI = (props: {
<IconButton onClick={() => setLogsOpened(true)}>
<BsBodyText />
</IconButton>
<IconButton onClick={DarkMode.toggle}>
<BsMoon />
</IconButton>
</div>
<RootContent
@ -87,7 +90,6 @@ export const RqbitWebUI = (props: {
</div>
<LogStreamModal show={logsOpened} onClose={() => setLogsOpened(false)} />
<DarkModeToggle />
</AppContext.Provider>
);
};

View file

@ -1867,7 +1867,7 @@ dependencies = [
[[package]]
name = "librqbit"
version = "5.1.0"
version = "5.2.0"
dependencies = [
"anyhow",
"axum",
@ -3012,7 +3012,7 @@ dependencies = [
[[package]]
name = "rqbit-desktop"
version = "5.1.0"
version = "5.2.0"
dependencies = [
"anyhow",
"base64 0.21.5",