Skip to content

Commit 94ec8ed

Browse files
committed
feat(ui): implement display backlight control
1 parent 6a7f9ce commit 94ec8ed

File tree

1 file changed

+67
-11
lines changed

1 file changed

+67
-11
lines changed

ui/src/components/sidebar/settings.tsx

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,18 @@ export default function SettingsSidebar() {
231231
[send, setDeveloperMode],
232232
);
233233

234-
const handleBacklightSettingChange = useCallback((settings: BacklightSettings) => {
235-
send("setBacklightSettings", { settings }, resp => {
234+
const handleBacklightSettingsChange = (settings: BacklightSettings) => {
235+
// If the user has set the display to dim after it turns off, set the dim_after
236+
// value to never.
237+
if (settings.dim_after > settings.off_after && settings.off_after != 0) {
238+
settings.dim_after = 0;
239+
}
240+
241+
setBacklightSettings(settings);
242+
}
243+
244+
const handleBacklightSettingsSave = () => {
245+
send("setBacklightSettings", { params: settings.backlightSettings }, resp => {
236246
if ("error" in resp) {
237247
notifications.error(
238248
`Failed to set backlight settings: ${resp.error.data || "Unknown error"}`,
@@ -241,7 +251,7 @@ export default function SettingsSidebar() {
241251
}
242252
notifications.success("Backlight settings updated successfully");
243253
});
244-
}, [send]);
254+
};
245255

246256
const handleUpdateSSHKey = useCallback(() => {
247257
send("setSSHKeyState", { sshKey }, resp => {
@@ -847,26 +857,72 @@ export default function SettingsSidebar() {
847857
/>
848858
</div>
849859
<SettingsItem title="Display Brightness" description="Set the brightness of the display">
850-
{/* TODO: Allow the user to pick any value between 0 and 100 */}
851860
<SelectMenuBasic
852861
size="SM"
853862
label=""
854863
value={settings.backlightSettings.max_brightness.toString()}
855864
options={[
856865
{ value: "0", label: "Off" },
857866
{ value: "10", label: "Low" },
858-
{ value: "50", label: "Medium" },
859-
{ value: "100", label: "High" },
867+
{ value: "35", label: "Medium" },
868+
{ value: "64", label: "High" },
860869
]}
861870
onChange={e => {
862-
handleBacklightSettingChange({
863-
max_brightness: parseInt(e.target.value),
864-
dim_after: settings.backlightSettings.dim_after,
865-
off_after: settings.backlightSettings.off_after,
866-
});
871+
settings.backlightSettings.max_brightness = parseInt(e.target.value)
872+
handleBacklightSettingsChange(settings.backlightSettings);
867873
}}
868874
/>
869875
</SettingsItem>
876+
{settings.backlightSettings.max_brightness != 0 && (
877+
<>
878+
<SettingsItem title="Dim Display After" description="Set how long to wait before dimming the display">
879+
<SelectMenuBasic
880+
size="SM"
881+
label=""
882+
value={settings.backlightSettings.dim_after.toString()}
883+
options={[
884+
{ value: "0", label: "Never" },
885+
{ value: "60", label: "1 Minute" },
886+
{ value: "300", label: "5 Minutes" },
887+
{ value: "600", label: "10 Minutes" },
888+
{ value: "1800", label: "30 Minutes" },
889+
{ value: "3600", label: "1 Hour" },
890+
]}
891+
onChange={e => {
892+
settings.backlightSettings.dim_after = parseInt(e.target.value)
893+
handleBacklightSettingsChange(settings.backlightSettings);
894+
}}
895+
/>
896+
</SettingsItem>
897+
<SettingsItem title="Turn off Display After" description="Set how long to wait before turning off the display">
898+
<SelectMenuBasic
899+
size="SM"
900+
label=""
901+
value={settings.backlightSettings.off_after.toString()}
902+
options={[
903+
{ value: "0", label: "Never" },
904+
{ value: "300", label: "5 Minutes" },
905+
{ value: "600", label: "10 Minutes" },
906+
{ value: "1800", label: "30 Minutes" },
907+
{ value: "3600", label: "1 Hour" },
908+
]}
909+
onChange={e => {
910+
settings.backlightSettings.off_after = parseInt(e.target.value)
911+
handleBacklightSettingsChange(settings.backlightSettings);
912+
}}
913+
/>
914+
</SettingsItem>
915+
</>
916+
)}
917+
<p className="text-xs text-slate-600 dark:text-slate-400">
918+
The display will wake up when the connection state changes, or when touched.
919+
</p>
920+
<Button
921+
size="SM"
922+
theme="primary"
923+
text="Save Display Settings"
924+
onClick={handleBacklightSettingsSave}
925+
/>
870926
<div className="h-[1px] w-full bg-slate-800/10 dark:bg-slate-300/20" />
871927
<div className="pb-2 space-y-4">
872928
<SectionHeader

0 commit comments

Comments
 (0)