MCPcopy Index your code
hub / github.com/ChartGPU/ChartGPU / connectCharts

Function connectCharts

src/interaction/createChartSync.ts:13–55  ·  view source on GitHub ↗
(charts: ChartGPU[])

Source from the content-addressed store, hash-verified

11 * - Uses a per-connection loop guard to prevent feedback.
12 */
13export function connectCharts(charts: ChartGPU[]): DisconnectCharts {
14 const connectionToken = Symbol('ChartGPU.connectCharts');
15
16 let disconnected = false;
17 const unsubscribeFns: Array<() => void> = [];
18
19 const broadcast = (sourceChart: ChartGPU, x: number | null): void => {
20 for (const chart of charts) {
21 if (chart === sourceChart) continue;
22 if (chart.disposed) continue;
23 chart.setCrosshairX(x, connectionToken);
24 }
25 };
26
27 for (const chart of charts) {
28 if (chart.disposed) continue;
29
30 const onCrosshairMove = (payload: ChartGPUCrosshairMovePayload): void => {
31 if (disconnected) return;
32 if (payload.source === connectionToken) return;
33 if (chart.disposed) return;
34 broadcast(chart, payload.x);
35 };
36
37 chart.on('crosshairMove', onCrosshairMove);
38 const unsub = (): void => chart.off('crosshairMove', onCrosshairMove);
39 unsubscribeFns.push(unsub);
40 }
41
42 return () => {
43 if (disconnected) return;
44 disconnected = true;
45
46 for (const unsub of unsubscribeFns) unsub();
47 unsubscribeFns.length = 0;
48
49 // Clear any “stuck” remote interactions.
50 for (const chart of charts) {
51 if (chart.disposed) continue;
52 chart.setCrosshairX(null, connectionToken);
53 }
54 };
55}
56

Callers 2

mainFunction · 0.85
mainFunction · 0.85

Calls 3

unsubFunction · 0.85
onMethod · 0.65
setCrosshairXMethod · 0.65

Tested by

no test coverage detected