From 8c005b376919bcc18ddd1bffb747b20f1c5d3393 Mon Sep 17 00:00:00 2001 From: Alikia2x Date: Sun, 31 Mar 2024 01:35:55 +0800 Subject: [PATCH] interface: better theme & state --- components/index.tsx | 34 ++++++++++++++++++++++++++-------- components/search/search.tsx | 4 ++-- components/state/settings.ts | 11 ++++++++++- components/time.tsx | 32 +++++++++++++++++++++----------- 4 files changed, 59 insertions(+), 22 deletions(-) diff --git a/components/index.tsx b/components/index.tsx index b400adc..d425e86 100644 --- a/components/index.tsx +++ b/components/index.tsx @@ -1,5 +1,6 @@ 'use client'; +import { useState, useEffect } from "react"; import { useRecoilState } from "recoil"; import Background from "./background"; import Search from "./search/search"; @@ -8,16 +9,33 @@ import Time from "./time"; export default function Homepage() { const [isFocus, setFocus] = useRecoilState(bgFocusState); + const [colorScheme, setColorScheme] = useState(''); + + useEffect(() => { + const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)'); + setColorScheme(colorSchemeQueryList.matches ? 'dark' : 'light'); + + const handleChange = () => { + setColorScheme(colorSchemeQueryList.matches ? 'dark' : 'light'); + }; + + colorSchemeQueryList.addListener(handleChange); + + return () => { + colorSchemeQueryList.removeListener(handleChange); + }; + }, []); + return (
-
); } diff --git a/components/search/search.tsx b/components/search/search.tsx index 6643cff..d41ff84 100644 --- a/components/search/search.tsx +++ b/components/search/search.tsx @@ -16,7 +16,7 @@ export default function Search(props: {
{ const timer = setInterval(() => { @@ -22,7 +25,7 @@ export default function Time(props: { const minutes = currentTime.getMinutes().toString().padStart(2, "0"); const seconds = currentTime.getSeconds().toString().padStart(2, "0"); - if (props.showSecond) { + if (settings.timeShowSecond) { return `${hours}:${minutes}:${seconds}`; } else { return `${hours}:${minutes}`; @@ -31,11 +34,18 @@ export default function Time(props: { return (
- {formatTime()} + {formatTime()}{" "} + + {format.dateTime(currentTime, { + year: "numeric", + month: "short", + day: "numeric" + })} +
); -}; +}