From fd1188abcd76f81ffc55033d41a00b68e00d80b5 Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Wed, 1 Apr 2026 16:45:09 -0700 Subject: [PATCH] Make our radio pane less miserable. Closes #145 --- .../settings/BulkDeleteContactsModal.tsx | 7 +- .../settings/SettingsRadioSection.tsx | 213 +++++++++--------- 2 files changed, 115 insertions(+), 105 deletions(-) diff --git a/frontend/src/components/settings/BulkDeleteContactsModal.tsx b/frontend/src/components/settings/BulkDeleteContactsModal.tsx index c8e00cf..46a01ff 100644 --- a/frontend/src/components/settings/BulkDeleteContactsModal.tsx +++ b/frontend/src/components/settings/BulkDeleteContactsModal.tsx @@ -331,10 +331,13 @@ export function BulkDeleteContactsModal({ ? 'Deleting...' : `I confirm permanent, irrevocable deletion of all listed nodes above, totalling ${[ contactCount > 0 && `${contactCount} contact${contactCount === 1 ? '' : 's'}`, - repeaterCount > 0 && `${repeaterCount} repeater${repeaterCount === 1 ? '' : 's'}`, + repeaterCount > 0 && + `${repeaterCount} repeater${repeaterCount === 1 ? '' : 's'}`, roomCount > 0 && `${roomCount} room${roomCount === 1 ? '' : 's'}`, sensorCount > 0 && `${sensorCount} sensor${sensorCount === 1 ? '' : 's'}`, - ].filter(Boolean).join(', ')}, spanning creation dates from ${minDate} to ${maxDate}`} + ] + .filter(Boolean) + .join(', ')}, spanning creation dates from ${minDate} to ${maxDate}`} + + + {identityError && ( +
+ {identityError} +
+ )} + - {/* Radio Config */} + {/* ── Radio Parameters ── */} +
+ +
+
setPathHashMode(e.target.value)} + className="w-full h-10 px-3 rounded-md border border-input bg-background text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2" + > + + + + +
+

Compatibility Warning

+

+ ALL nodes along a message's route — your radio, every repeater, and the + recipient — must be running firmware that supports the selected mode. Messages + sent with 2-byte or 3-byte hops will be dropped by any node on older firmware. +

+
+
+ )} + + {/* ── Location ── */}
- +
-
-
- setMultiAcksEnabled(checked === true)} - className="mt-0.5" - /> -
- -

- When enabled, the radio sends one extra direct ACK transmission before the normal - ACK for received direct messages. This is a firmware-level receive behavior, not a - RemoteTerm retry setting. -

-
-
-
- {config.path_hash_mode_supported && ( - <> - -
- - -
-

Compatibility Warning

-

- ALL nodes along a message's route — your radio, every repeater, and the - recipient — must be running firmware that supports the selected mode. Messages - sent with 2-byte or 3-byte hops will be dropped by any node on older firmware. -

-
-
- - )} - {error && (
{error} @@ -657,64 +680,28 @@ export function SettingsRadioSection({ - {/* Keys */} + {/* ── Messaging ── */}
- - +
- - setPrivateKey(e.target.value)} - placeholder="64-character hex private key" - /> - -
- - {identityError && ( -
- {identityError} -
- )} - - - - {/* Flood & Advert Control */} -
- -
- -
- -
- setAdvertIntervalHours(e.target.value)} - className="w-28" +
+ setMultiAcksEnabled(checked === true)} + className="mt-0.5" /> - hours (0 = off) +
+ +

+ When enabled, the radio sends one extra direct ACK transmission before the normal ACK + for received direct messages. This is a firmware-level receive behavior, not a + RemoteTerm retry setting. +

+
-

- How often to automatically advertise presence. Set to 0 to disable. Minimum: 1 hour. - Recommended: 24 hours or higher. -

@@ -767,8 +754,28 @@ export function SettingsRadioSection({ + {/* ── Advertising & Discovery ── */}
- + +
+ +
+ +
+ setAdvertIntervalHours(e.target.value)} + className="w-28" + /> + hours (0 = off) +
+

+ How often to automatically advertise presence. Set to 0 to disable. Minimum: 1 hour. + Recommended: 24 hours or higher. +