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}
)}