All files / libs/reporting/plan-dashboards/shared/src/lib/custom-charts custom-chart-to-dashboard-chart.ts

0% Statements 0/87
0% Branches 0/1
0% Functions 0/1
0% Lines 0/87

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                                                                                                                                                                               
import { match } from 'ts-pattern';

import {
  KPIChartDisplayMode,
  type ChartType,
  type DashboardChartConfiguration,
} from '@amalia/reporting/dashboards-v2/types';
import {
  isCombinedChartWidgetConfiguration,
  isKpiChartWidgetConfiguration,
  isTargetVsAchievementChartWidgetConfiguration,
  type PlanDashboardCustomChartWidgetConfiguration,
} from '@amalia/reporting/plan-dashboards/types';

const emptyFilters = {
  periods: { isEnabled: false, values: [] },
  plans: { isEnabled: false, values: [] },
  teams: { isEnabled: false, values: [] },
  users: { isEnabled: false, values: [] },
};

export const planDashboardChartToDashboardChart = (
  planDashboardChartConfiguration: PlanDashboardCustomChartWidgetConfiguration,
): Omit<DashboardChartConfiguration, 'customReportId'> =>
  match(planDashboardChartConfiguration)
    .when(
      isCombinedChartWidgetConfiguration,
      (config): Omit<DashboardChartConfiguration<ChartType.COMBINED_CHART>, 'customReportId'> => ({
        name: config.label,
        type: config.chartType,
        displaySettings: {
          xAxis: { identifier: 'periodStartDate' },
          kpis: config.seriesList.map((series) => ({
            yAxis: series.yAxis,
            color: series.color,
            plot: series.seriesType,
            showAccumulatedValues: series.showAccumulatedValues,
            showAverage: series.showAverage,
          })),
          customization: config.customization,
          filters: emptyFilters,
        },
      }),
    )
    .when(
      isKpiChartWidgetConfiguration,
      (config): Omit<DashboardChartConfiguration<ChartType.KPI_CARD_CHART>, 'customReportId'> => ({
        name: config.label,
        type: config.chartType,
        displaySettings: match(config.series)
          .with({ displayMode: KPIChartDisplayMode.KPI }, (series) => ({
            displayMode: series.displayMode,
            kpi: series.yAxis,
            filters: emptyFilters,
          }))
          .with({ displayMode: KPIChartDisplayMode.DOUGHNUT }, (series) => ({
            displayMode: series.displayMode,
            kpi: series.yAxis,
            color: series.color,
            filters: emptyFilters,
          }))
          .with({ displayMode: KPIChartDisplayMode.GAUGE }, (series) => ({
            displayMode: series.displayMode,
            kpi: series.yAxis,
            segmentsValue: series.segmentsValue,
            filters: emptyFilters,
          }))
          .exhaustive(),
      }),
    )
    .when(
      isTargetVsAchievementChartWidgetConfiguration,
      (config): Omit<DashboardChartConfiguration<ChartType.TARGET_VS_ACHIEVEMENT_CHART>, 'customReportId'> => ({
        name: config.label,
        type: config.chartType,
        displaySettings: {
          xAxis: { identifier: 'periodStartDate' },
          achievement: config.series.achievement,
          target: config.series.target,
          earningsAt100Percent: config.series.earningsAt100Percent,
          color: config.series.color,
          customization: config.customization,
          filters: emptyFilters,
        },
      }),
    )
    .exhaustive();