fix: bug
This commit is contained in:
@@ -99,8 +99,14 @@ type AntStatus = { enabled: boolean; type: string; connected: boolean; direction
|
||||
// only — per-element length adjustment. Heading/state is polled by the panel.
|
||||
function MotorAntennaWidget({ ant, refetch, t }: { ant: AntStatus; refetch: () => void; t: (k: string, v?: any) => string }) {
|
||||
const [err, setErr] = useState('');
|
||||
const [elDraft, setElDraft] = useState<Record<number, string>>({});
|
||||
const [elNum, setElNum] = useState('1'); // element to adjust (1..6)
|
||||
const [elLen, setElLen] = useState(''); // target length (mm)
|
||||
const run = (p: Promise<any>) => p.then(refetch).catch((e) => setErr(String(e?.message ?? e)));
|
||||
const setElement = () => {
|
||||
const n = parseInt(elNum, 10), mm = parseInt(elLen, 10);
|
||||
if (!Number.isFinite(n) || !Number.isFinite(mm)) return;
|
||||
run(MotorSetElement(n - 1, mm)); // protocol elements are 0-based (0..5)
|
||||
};
|
||||
const isUB = ant.type !== 'steppir';
|
||||
const dirs: [number, string][] = [[0, 'N'], [1, '180°'], [2, t('station.bi')]];
|
||||
return (
|
||||
@@ -135,21 +141,27 @@ function MotorAntennaWidget({ ant, refetch, t }: { ant: AntStatus; refetch: () =
|
||||
<ArrowDownToLine className="size-3.5" /> {t('station.retract')}
|
||||
</button>
|
||||
|
||||
{isUB && ant.elements.length > 0 && (
|
||||
{isUB && (
|
||||
<div>
|
||||
<div className="text-[10px] font-semibold uppercase tracking-wider text-muted-foreground mb-1">{t('station.elements')}</div>
|
||||
<div className="space-y-1.5">
|
||||
{ant.elements.map((mm, i) => (
|
||||
<div key={i} className="flex items-center gap-2">
|
||||
<span className="text-xs w-14 shrink-0 text-muted-foreground">{t('station.element')} {i + 1}</span>
|
||||
<span className="text-xs font-mono w-14 tabular-nums">{mm} mm</span>
|
||||
<Input value={elDraft[i] ?? ''} placeholder={String(mm)} className="h-7 w-20 font-mono text-xs"
|
||||
onChange={(e) => setElDraft((d) => ({ ...d, [i]: e.target.value.replace(/[^0-9]/g, '') }))}
|
||||
onKeyDown={(e) => { if (e.key === 'Enter' && elDraft[i]) run(MotorSetElement(i, parseInt(elDraft[i], 10))); }} />
|
||||
<Button size="sm" variant="outline" className="h-7 px-2 text-[11px]" disabled={!elDraft[i]}
|
||||
onClick={() => run(MotorSetElement(i, parseInt(elDraft[i] || '0', 10)))}>{t('station.set')}</Button>
|
||||
</div>
|
||||
))}
|
||||
{ant.elements.length > 0 && (
|
||||
<div className="flex flex-wrap gap-1 mb-1.5">
|
||||
{ant.elements.map((mm, i) => (
|
||||
<span key={i} className="text-[10px] font-mono rounded bg-muted px-1.5 py-0.5">{t('station.element')} {i + 1}: {mm}mm</span>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<div className="flex items-center gap-1.5">
|
||||
<Select value={elNum} onValueChange={setElNum}>
|
||||
<SelectTrigger className="h-8 w-28"><SelectValue /></SelectTrigger>
|
||||
<SelectContent>
|
||||
{[1, 2, 3, 4, 5, 6].map((n) => <SelectItem key={n} value={String(n)}>{t('station.element')} {n}</SelectItem>)}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<Input value={elLen} placeholder="mm" className="h-8 w-20 font-mono text-sm" disabled={!ant.connected}
|
||||
onChange={(e) => setElLen(e.target.value.replace(/[^0-9]/g, ''))}
|
||||
onKeyDown={(e) => { if (e.key === 'Enter') setElement(); }} />
|
||||
<Button size="sm" className="h-8" disabled={!ant.connected || !elLen} onClick={setElement}>{t('station.set')}</Button>
|
||||
</div>
|
||||
<p className="text-[10px] text-muted-foreground mt-1">{t('station.elementsHint')}</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user