diff --git a/src/components/AppShell.tsx b/src/components/AppShell.tsx deleted file mode 100644 index 36a6e3f..0000000 --- a/src/components/AppShell.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { ReactNode } from "react"; -import TopNav from "@/components/TopNav"; -import { useTheme } from "@/hooks/useTheme"; - -export default function AppShell({ children }: { children: ReactNode }) { - const { isDark } = useTheme(); - - return ( -
- -
- {children} -
-
- ); -} - diff --git a/src/components/TopNav.tsx b/src/components/TopNav.tsx index 4509614..e1fd116 100644 --- a/src/components/TopNav.tsx +++ b/src/components/TopNav.tsx @@ -55,7 +55,15 @@ export default function TopNav() {
IPCam Dashboard
- MediaMTX + Orange Pi + MediaMTX + {" "} + + Orange Pi +
diff --git a/src/pages/Playback.tsx b/src/pages/Playback.tsx index 80cfc13..4b0cfd8 100644 --- a/src/pages/Playback.tsx +++ b/src/pages/Playback.tsx @@ -1,5 +1,5 @@ -import { Download, Play } from "lucide-react"; -import { useEffect, useMemo, useState } from "react"; +import { CalendarDays, Download, Play } from "lucide-react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { useConfigStore } from "@/stores/configStore"; import { apiJson } from "@/utils/api"; import type { RecordingItem } from "@/types/api"; @@ -13,6 +13,7 @@ function toLocalDateInputValue(d: Date) { export default function Playback() { const { config, isLoading, error, load } = useConfigStore(); + const dateInputRef = useRef(null); const [camera, setCamera] = useState(""); const [date, setDate] = useState(() => toLocalDateInputValue(new Date())); const [items, setItems] = useState([]); @@ -31,6 +32,18 @@ export default function Playback() { const canQuery = useMemo(() => Boolean(camera), [camera]); + const openDatePicker = () => { + const input = dateInputRef.current; + if (!input) return; + const pickerInput = input as HTMLInputElement & { showPicker?: () => void }; + if (pickerInput.showPicker) { + pickerInput.showPicker(); + return; + } + input.focus(); + input.click(); + }; + useEffect(() => { let alive = true; const run = async () => { @@ -103,12 +116,23 @@ export default function Playback() {
- setDate(e.target.value)} - className="mt-1 h-9 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 text-sm text-zinc-100" - /> +
+ setDate(e.target.value)} + className="h-9 w-full rounded-md border border-zinc-800 bg-zinc-950 px-3 text-sm text-zinc-100" + /> + +