fix: show all BLE devices in K1 console
This commit is contained in:
+34
-11
@@ -185,11 +185,18 @@ function DeviceRow({
|
||||
onSelect: () => void;
|
||||
}) {
|
||||
return (
|
||||
<div className="device-row" data-selected={selected ? "true" : undefined}>
|
||||
<div
|
||||
className="device-row"
|
||||
data-likely-k1={device.likely_k1 ? "true" : undefined}
|
||||
data-selected={selected ? "true" : undefined}
|
||||
>
|
||||
<div className="device-row__identity">
|
||||
<span className="device-row__signal" aria-hidden="true" />
|
||||
<div>
|
||||
<strong>{device.name?.trim() || "Возможный K1"}</strong>
|
||||
<span className="device-row__name">
|
||||
<strong>{device.name?.trim() || "Устройство без имени"}</strong>
|
||||
{device.likely_k1 ? <small>Возможно K1</small> : null}
|
||||
</span>
|
||||
<code>{device.device_id}</code>
|
||||
</div>
|
||||
</div>
|
||||
@@ -293,8 +300,18 @@ export default function App() {
|
||||
const [replayLoop, setReplayLoop] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (state?.selected_device_id) setSelectedDeviceId(state.selected_device_id);
|
||||
}, [state?.selected_device_id]);
|
||||
if (state?.selected_device_id) {
|
||||
setSelectedDeviceId(state.selected_device_id);
|
||||
return;
|
||||
}
|
||||
if (
|
||||
selectedDeviceId &&
|
||||
state?.devices &&
|
||||
!state.devices.some((device) => device.device_id === selectedDeviceId)
|
||||
) {
|
||||
setSelectedDeviceId("");
|
||||
}
|
||||
}, [selectedDeviceId, state?.devices, state?.selected_device_id]);
|
||||
|
||||
const metrics = state?.metrics;
|
||||
const latency = pipelineLatency(metrics);
|
||||
@@ -508,12 +525,12 @@ export default function App() {
|
||||
|
||||
<WizardStep
|
||||
number="02"
|
||||
title="Найдите K1 по Bluetooth (BLE)"
|
||||
title="Выберите K1 среди устройств Bluetooth"
|
||||
status={
|
||||
pendingAction === "scan"
|
||||
? "Поиск…"
|
||||
: selectedDeviceId
|
||||
? "K1 выбран"
|
||||
? "Устройство выбрано"
|
||||
: `Найдено: ${devices.length}`
|
||||
}
|
||||
tone={
|
||||
@@ -525,16 +542,22 @@ export default function App() {
|
||||
}
|
||||
>
|
||||
<p className="step-copy">
|
||||
Поиск занимает 6 секунд и ничего не записывает в настройки сканера.
|
||||
Поиск занимает 6 секунд и показывает все видимые BLE-устройства. Вероятные
|
||||
K1 будут сверху и получат метку, но окончательный выбор делаете вы.
|
||||
</p>
|
||||
<Button
|
||||
width="full"
|
||||
variant="secondary"
|
||||
icon={<Icon name="search" />}
|
||||
disabled={!powerConfirmed || isBusy}
|
||||
onClick={() => void scan()}
|
||||
onClick={() => {
|
||||
setSelectedDeviceId("");
|
||||
void scan();
|
||||
}}
|
||||
>
|
||||
{pendingAction === "scan" ? "Ищем K1 — 6 секунд…" : "Найти K1"}
|
||||
{pendingAction === "scan"
|
||||
? "Сканируем Bluetooth — 6 секунд…"
|
||||
: "Показать все BLE-устройства"}
|
||||
</Button>
|
||||
<div className="device-list">
|
||||
{devices.length ? (
|
||||
@@ -548,8 +571,8 @@ export default function App() {
|
||||
))
|
||||
) : (
|
||||
<div className="empty-device-list">
|
||||
K1 пока не найден. Убедитесь, что он включён и горит ровно зелёным, затем
|
||||
нажмите «Найти K1».
|
||||
Устройства пока не найдены. Убедитесь, что K1 включён и горит ровно
|
||||
зелёным, затем запустите поиск ещё раз.
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -4,6 +4,7 @@ export interface BleDevice {
|
||||
rssi?: number | null;
|
||||
address?: string | null;
|
||||
connectable?: boolean | null;
|
||||
likely_k1?: boolean | null;
|
||||
}
|
||||
|
||||
export type SourceMode = "idle" | "live" | "replay";
|
||||
|
||||
@@ -409,8 +409,11 @@ input {
|
||||
|
||||
.device-list {
|
||||
display: grid;
|
||||
max-height: 28rem;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.75rem;
|
||||
overflow-y: auto;
|
||||
padding-right: 0.2rem;
|
||||
}
|
||||
|
||||
.device-row {
|
||||
@@ -445,6 +448,25 @@ input {
|
||||
gap: 0.2rem;
|
||||
}
|
||||
|
||||
.device-row__name {
|
||||
display: flex;
|
||||
min-width: 0;
|
||||
align-items: center;
|
||||
gap: 0.45rem;
|
||||
}
|
||||
|
||||
.device-row__name small {
|
||||
flex: 0 0 auto;
|
||||
border-radius: 999px;
|
||||
background: var(--k1-accent-soft);
|
||||
color: rgb(var(--nodedc-accent-rgb));
|
||||
padding: 0.2rem 0.42rem;
|
||||
font-size: 0.5rem;
|
||||
font-weight: 750;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.device-row__identity strong {
|
||||
overflow: hidden;
|
||||
font-size: 0.74rem;
|
||||
@@ -467,6 +489,11 @@ input {
|
||||
height: 0.6rem;
|
||||
flex: 0 0 0.6rem;
|
||||
border-radius: 50%;
|
||||
background: var(--nodedc-text-muted);
|
||||
box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.035);
|
||||
}
|
||||
|
||||
.device-row[data-likely-k1="true"] .device-row__signal {
|
||||
background: rgb(var(--nodedc-success-rgb));
|
||||
box-shadow: 0 0 0 0.25rem var(--k1-success-soft);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user