function mergeSeries()

in dashboard/new-dashboard/src/configurators/MeasureConfigurator.ts [450:485]


function mergeSeries(dataList: (string | number)[][][], configuration: DataQueryExecutorConfiguration) {
  const mergedDataList: DataQueryResult = []
  const seriesIdsToIndex = new Map<string, number>()
  const seriesIdToSeriesName = new Map<number, string>()
  const seriesIdToMeasureName = new Map<number, string>()
  for (const [dataIndex, seriesData] of dataList.entries()) {
    if (seriesData[1]?.length === 0) {
      console.log("Serie is empty and will be hidden: " + configuration.seriesNames[dataIndex])
      continue
    }
    const measureName = configuration.measureNames[dataIndex]
    let seriesName = configuration.seriesNames[dataIndex]
    //fleet
    if (seriesName == "" && (seriesData.length == 6 || seriesData.length == 10)) {
      seriesName = seriesData[4][0] as string
    } else if (seriesName == "" && seriesData.length > 6) {
      // we take only the one project name, there can't be more
      seriesName = seriesData[6][0] as string
    }
    seriesName = measureNameToLabel(seriesName)
    const id = measureName === seriesName ? seriesName : `${measureName}@${seriesName}`
    if (seriesIdsToIndex.has(id)) {
      const seriesIndex = seriesIdsToIndex.get(id) as number
      const values = mergedDataList[seriesIndex]
      for (const [i, seriesDatum] of seriesData.entries()) {
        values[i] = i < values.length ? [...values[i], ...seriesDatum] : [...seriesDatum]
      }
    } else {
      const newId = mergedDataList.push(seriesData) - 1
      seriesIdsToIndex.set(id, newId)
      seriesIdToSeriesName.set(newId, seriesName)
      seriesIdToMeasureName.set(newId, measureName)
    }
  }
  return new MergeResults(mergedDataList, seriesIdToSeriesName, seriesIdToMeasureName)
}