feat(ui): implement display backlight control

This commit is contained in:
Cameron Fleming 2025-01-27 20:49:47 +00:00
parent 309d30d3c3
commit a6eab94e0d
1 changed files with 67 additions and 11 deletions

View File

@ -230,8 +230,18 @@ export default function SettingsSidebar() {
[send, setDeveloperMode], [send, setDeveloperMode],
); );
const handleBacklightSettingChange = useCallback((settings: BacklightSettings) => { const handleBacklightSettingsChange = (settings: BacklightSettings) => {
send("setBacklightSettings", { settings }, resp => { // If the user has set the display to dim after it turns off, set the dim_after
// value to never.
if (settings.dim_after > settings.off_after && settings.off_after != 0) {
settings.dim_after = 0;
}
setBacklightSettings(settings);
}
const handleBacklightSettingsSave = () => {
send("setBacklightSettings", { params: settings.backlightSettings }, resp => {
if ("error" in resp) { if ("error" in resp) {
notifications.error( notifications.error(
`Failed to set backlight settings: ${resp.error.data || "Unknown error"}`, `Failed to set backlight settings: ${resp.error.data || "Unknown error"}`,
@ -240,7 +250,7 @@ export default function SettingsSidebar() {
} }
notifications.success("Backlight settings updated successfully"); notifications.success("Backlight settings updated successfully");
}); });
}, [send]); };
const handleUpdateSSHKey = useCallback(() => { const handleUpdateSSHKey = useCallback(() => {
send("setSSHKeyState", { sshKey }, resp => { send("setSSHKeyState", { sshKey }, resp => {
@ -829,7 +839,6 @@ export default function SettingsSidebar() {
/> />
</div> </div>
<SettingsItem title="Display Brightness" description="Set the brightness of the display"> <SettingsItem title="Display Brightness" description="Set the brightness of the display">
{/* TODO: Allow the user to pick any value between 0 and 100 */}
<SelectMenuBasic <SelectMenuBasic
size="SM" size="SM"
label="" label=""
@ -837,18 +846,65 @@ export default function SettingsSidebar() {
options={[ options={[
{ value: "0", label: "Off" }, { value: "0", label: "Off" },
{ value: "10", label: "Low" }, { value: "10", label: "Low" },
{ value: "50", label: "Medium" }, { value: "35", label: "Medium" },
{ value: "100", label: "High" }, { value: "64", label: "High" },
]} ]}
onChange={e => { onChange={e => {
handleBacklightSettingChange({ settings.backlightSettings.max_brightness = parseInt(e.target.value)
max_brightness: parseInt(e.target.value), handleBacklightSettingsChange(settings.backlightSettings);
dim_after: settings.backlightSettings.dim_after,
off_after: settings.backlightSettings.off_after,
});
}} }}
/> />
</SettingsItem> </SettingsItem>
{settings.backlightSettings.max_brightness != 0 && (
<>
<SettingsItem title="Dim Display After" description="Set how long to wait before dimming the display">
<SelectMenuBasic
size="SM"
label=""
value={settings.backlightSettings.dim_after.toString()}
options={[
{ value: "0", label: "Never" },
{ value: "60", label: "1 Minute" },
{ value: "300", label: "5 Minutes" },
{ value: "600", label: "10 Minutes" },
{ value: "1800", label: "30 Minutes" },
{ value: "3600", label: "1 Hour" },
]}
onChange={e => {
settings.backlightSettings.dim_after = parseInt(e.target.value)
handleBacklightSettingsChange(settings.backlightSettings);
}}
/>
</SettingsItem>
<SettingsItem title="Turn off Display After" description="Set how long to wait before turning off the display">
<SelectMenuBasic
size="SM"
label=""
value={settings.backlightSettings.off_after.toString()}
options={[
{ value: "0", label: "Never" },
{ value: "300", label: "5 Minutes" },
{ value: "600", label: "10 Minutes" },
{ value: "1800", label: "30 Minutes" },
{ value: "3600", label: "1 Hour" },
]}
onChange={e => {
settings.backlightSettings.off_after = parseInt(e.target.value)
handleBacklightSettingsChange(settings.backlightSettings);
}}
/>
</SettingsItem>
</>
)}
<p className="text-xs text-slate-600 dark:text-slate-400">
The display will wake up when the connection state changes, or when touched.
</p>
<Button
size="SM"
theme="primary"
text="Save Display Settings"
onClick={handleBacklightSettingsSave}
/>
<div className="h-[1px] w-full bg-slate-800/10 dark:bg-slate-300/20" /> <div className="h-[1px] w-full bg-slate-800/10 dark:bg-slate-300/20" />
<div className="pb-2 space-y-4"> <div className="pb-2 space-y-4">
<SectionHeader <SectionHeader