private collectAxisGroups(
sources: readonly PriceLabelSource[],
): Map<string, AxisLabelsGroup> {
const groups = new Map<string, AxisLabelsGroup>();
sources.forEach((source) => {
if (
!source.series.isVisible() ||
source.role === 'main' ||
(source.role !== 'volume' && !this.isHistoryMode)
) {
return;
}
const label = this.createLabel(source);
if (!label) {
return;
}
const paneIndex = source.series.getPane().paneIndex();
const side = getAxisSide(source);
const key = `${paneIndex}:${side}`;
const group = groups.get(key);
if (group) {
group.labels.push(label);
return;
}
groups.set(key, {
paneIndex,
side,
labels: [label],
reservedCoordinate: null,
});
});
const mainSource = sources.find((source) => source.role === 'main');
if (!mainSource) {
return groups;
}
const showRealtimeLabel =
this.isHistoryMode ||
this.ensureSourceDefaults(mainSource.series).lastValueVisible;
if (!showRealtimeLabel) {
return groups;
}
const reservedCoordinate = this.getCurrentMainPriceCoordinate();
if (reservedCoordinate === null) {
return groups;
}
const paneIndex = mainSource.series.getPane().paneIndex();
const side = getAxisSide(mainSource);
const group = groups.get(`${paneIndex}:${side}`);
if (group) {
group.reservedCoordinate = reservedCoordinate;
}
return groups;
}