MCPcopy
hub / github.com/cpaczek/skylight / ConfigPanel

Function ConfigPanel

web/src/tracker/components/ConfigPanel.tsx:38–188  ·  view source on GitHub ↗
({
  config,
  conn,
}: {
  config: TrackerConfig;
  conn: TrackerConnection;
})

Source from the content-addressed store, hash-verified

36}
37
38export function ConfigPanel({
39 config,
40 conn,
41}: {
42 config: TrackerConfig;
43 conn: TrackerConnection;
44}) {
45 const [ipDraft, setIpDraft] = useState<string | null>(null);
46 return (
47 <div className="cfg">
48 <div className="cfg-group">
49 <div className="cfg-title">camera</div>
50 <div className="segmented">
51 {(["sim", "visca"] as const).map((d) => (
52 <button key={d} className={`segment ${config.driver === d ? "active" : ""}`}
53 onClick={() => conn.send({ type: "patchTracker", patch: { driver: d } })}>
54 {d}
55 </button>
56 ))}
57 </div>
58 <label className="cfg-num">
59 <span>ip</span>
60 <input
61 type="text"
62 value={ipDraft ?? config.cameraIp}
63 onChange={(e) => setIpDraft(e.target.value)}
64 onBlur={() => {
65 if (ipDraft && ipDraft !== config.cameraIp) {
66 conn.send({ type: "patchTracker", patch: { cameraIp: ipDraft } });
67 }
68 setIpDraft(null);
69 }}
70 />
71 </label>
72 </div>
73
74 <div className="cfg-group">
75 <div className="cfg-title">site (camera position)</div>
76 <Num label="lat" value={config.site.lat} step={0.0001}
77 onCommit={(v) => conn.send({ type: "patchTracker", patch: { site: { lat: v } } })} />
78 <Num label="lon" value={config.site.lon} step={0.0001}
79 onCommit={(v) => conn.send({ type: "patchTracker", patch: { site: { lon: v } } })} />
80 <Num label="alt m" value={config.site.altM} step={1}
81 onCommit={(v) => conn.send({ type: "patchTracker", patch: { site: { altM: v } } })} />
82 </div>
83
84 <div className="cfg-group">
85 <div className="cfg-title">targeting</div>
86 <Num label="min el°" value={config.target.minElevationDeg} step={1}
87 onCommit={(v) => conn.send({ type: "patchTracker", patch: { target: { minElevationDeg: v } } })} />
88 <Num label="max mi" value={config.target.maxRangeMi} step={1}
89 onCommit={(v) => conn.send({ type: "patchTracker", patch: { target: { maxRangeMi: v } } })} />
90 <Num label="dwell s" value={config.target.hysteresisSec} step={1}
91 onCommit={(v) => conn.send({ type: "patchTracker", patch: { target: { hysteresisSec: v } } })} />
92 </div>
93
94 <div className="cfg-group">
95 <div className="cfg-title">pursuit</div>

Callers

nothing calls this directly

Calls 1

sendMethod · 0.45

Tested by

no test coverage detected