diff --git a/src/components/Settings/SideSettingsForm.tsx b/src/components/Settings/SideSettingsForm.tsx index 082ab996..8b2fdf67 100644 --- a/src/components/Settings/SideSettingsForm.tsx +++ b/src/components/Settings/SideSettingsForm.tsx @@ -1,7 +1,7 @@ 'use client' import { useEffect, useState } from 'react' -import { User, Plane } from 'lucide-react' +import { User, Plane, Infinity as InfinityIcon } from 'lucide-react' import { trpc } from '@/src/utils/trpc' import { Toggle } from './Toggle' @@ -9,6 +9,8 @@ interface SideData { side: 'left' | 'right' name: string awayMode: boolean + alwaysOn: boolean + autoOffEnabled: boolean } interface SideSettingsFormProps { @@ -20,19 +22,23 @@ interface SideSettingsFormProps { * Per-side settings: name and away mode for a single side. */ export function SideSettingsForm({ side, sideData }: SideSettingsFormProps) { - return + return } function SideCard({ data }: { data: SideData }) { const utils = trpc.useUtils() const [name, setName] = useState(data.name) const [awayMode, setAwayMode] = useState(data.awayMode) + const [alwaysOn, setAlwaysOn] = useState(data.alwaysOn) + const [autoOffEnabled, setAutoOffEnabled] = useState(data.autoOffEnabled) // Sync from server useEffect(() => { setName(data.name) setAwayMode(data.awayMode) - }, [data.name, data.awayMode]) + setAlwaysOn(data.alwaysOn) + setAutoOffEnabled(data.autoOffEnabled) + }, [data.name, data.awayMode, data.alwaysOn, data.autoOffEnabled]) const mutation = trpc.settings.updateSide.useMutation({ onSuccess: () => utils.settings.getAll.invalidate(), @@ -63,6 +69,18 @@ function SideCard({ data }: { data: SideData }) { mutation.mutate({ side: data.side, awayMode: newVal }) } + function handleAlwaysOnToggle() { + const newVal = !alwaysOn + setAlwaysOn(newVal) + if (newVal && autoOffEnabled) { + setAutoOffEnabled(false) + mutation.mutate({ side: data.side, alwaysOn: true, autoOffEnabled: false }) + } + else { + mutation.mutate({ side: data.side, alwaysOn: newVal }) + } + } + return (
@@ -104,6 +122,25 @@ function SideCard({ data }: { data: SideData }) { />
+ {/* Always On toggle */} +
+
+
+ +
+ Always On +

Prevents firmware's 8-hour auto-off

+
+
+ +
+
+ {mutation.error && (

{mutation.error.message}

)}