@gooddata/sdk-ui-dashboard 11.6.0-alpha.3 → 11.6.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/kdaDialog/components/KdaKeyDriverChart.d.ts +7 -1
- package/esm/kdaDialog/components/KdaKeyDriverChart.d.ts.map +1 -1
- package/esm/kdaDialog/components/KdaKeyDriverChart.js +6 -127
- package/esm/kdaDialog/components/KdaKeyDriverChart.js.map +1 -1
- package/esm/kdaDialog/composition/KeyDriversOverview.d.ts.map +1 -1
- package/esm/kdaDialog/composition/KeyDriversOverview.js +5 -1
- package/esm/kdaDialog/composition/KeyDriversOverview.js.map +1 -1
- package/esm/kdaDialog/composition/KeyDriversPanel.d.ts.map +1 -1
- package/esm/kdaDialog/composition/KeyDriversPanel.js +30 -9
- package/esm/kdaDialog/composition/KeyDriversPanel.js.map +1 -1
- package/esm/kdaDialog/composition/data/dataview.d.ts +8 -0
- package/esm/kdaDialog/composition/data/dataview.d.ts.map +1 -0
- package/esm/kdaDialog/composition/data/dataview.js +274 -0
- package/esm/kdaDialog/composition/data/dataview.js.map +1 -0
- package/esm/kdaDialog/composition/hooks/useDataViewWithConfig.d.ts +9 -0
- package/esm/kdaDialog/composition/hooks/useDataViewWithConfig.d.ts.map +1 -0
- package/esm/kdaDialog/composition/hooks/useDataViewWithConfig.js +31 -0
- package/esm/kdaDialog/composition/hooks/useDataViewWithConfig.js.map +1 -0
- package/esm/kdaDialog/composition/hooks/useGroupAndItem.d.ts +8 -0
- package/esm/kdaDialog/composition/hooks/useGroupAndItem.d.ts.map +1 -0
- package/esm/kdaDialog/composition/hooks/useGroupAndItem.js +31 -0
- package/esm/kdaDialog/composition/hooks/useGroupAndItem.js.map +1 -0
- package/esm/kdaDialog/hooks/useDriversList.d.ts +5 -3
- package/esm/kdaDialog/hooks/useDriversList.d.ts.map +1 -1
- package/esm/kdaDialog/hooks/useDriversList.js +9 -3
- package/esm/kdaDialog/hooks/useDriversList.js.map +1 -1
- package/esm/kdaDialog/hooks/useSummaryDrivers.d.ts.map +1 -1
- package/esm/kdaDialog/hooks/useSummaryDrivers.js +3 -1
- package/esm/kdaDialog/hooks/useSummaryDrivers.js.map +1 -1
- package/esm/kdaDialog/internalTypes.d.ts +1 -1
- package/esm/kdaDialog/internalTypes.d.ts.map +1 -1
- package/esm/kdaDialog/providers/KdaState.js +1 -1
- package/esm/kdaDialog/providers/KdaState.js.map +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlerts.d.ts +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsCommands.d.ts +4 -2
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsCommands.d.ts.map +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsCommands.js +2 -2
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsCommands.js.map +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsManagementDialog.d.ts +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsManagementDialog.d.ts.map +1 -1
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsManagementDialog.js +3 -3
- package/esm/model/react/useDashboardAlerting/useDashboardAlertsManagementDialog.js.map +1 -1
- package/esm/model/react/useDashboardAlertsOld.js +1 -1
- package/esm/model/react/useDashboardAlertsOld.js.map +1 -1
- package/esm/model/store/index.d.ts +1 -1
- package/esm/model/store/index.d.ts.map +1 -1
- package/esm/model/store/index.js +1 -1
- package/esm/model/store/index.js.map +1 -1
- package/esm/model/store/ui/index.d.ts +3 -1
- package/esm/model/store/ui/index.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.d.ts +3 -1
- package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.js +8 -1
- package/esm/model/store/ui/uiReducers.js.map +1 -1
- package/esm/model/store/ui/uiSelectors.d.ts +4 -0
- package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
- package/esm/model/store/ui/uiSelectors.js +4 -0
- package/esm/model/store/ui/uiSelectors.js.map +1 -1
- package/esm/model/store/ui/uiState.d.ts +1 -0
- package/esm/model/store/ui/uiState.d.ts.map +1 -1
- package/esm/model/store/ui/uiState.js +1 -0
- package/esm/model/store/ui/uiState.js.map +1 -1
- package/esm/presentation/alerting/DefaultAlertingDialog/DefaultAlertingDialogNew.d.ts.map +1 -1
- package/esm/presentation/alerting/DefaultAlertingDialog/DefaultAlertingDialogNew.js +1 -1
- package/esm/presentation/alerting/DefaultAlertingDialog/DefaultAlertingDialogNew.js.map +1 -1
- package/esm/presentation/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogNew.d.ts.map +1 -1
- package/esm/presentation/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogNew.js +5 -2
- package/esm/presentation/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogNew.js.map +1 -1
- package/esm/presentation/alerting/hooks/useAlertingDialogAccessibility.d.ts +4 -0
- package/esm/presentation/alerting/hooks/useAlertingDialogAccessibility.d.ts.map +1 -0
- package/esm/presentation/alerting/hooks/useAlertingDialogAccessibility.js +12 -0
- package/esm/presentation/alerting/hooks/useAlertingDialogAccessibility.js.map +1 -0
- package/esm/presentation/localization/bundles/en-US.json +4 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +1 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +1 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +8 -4
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts.map +1 -1
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js +3 -2
- package/esm/presentation/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js.map +1 -1
- package/esm/sdk-ui-dashboard.d.ts +10 -2
- package/package.json +18 -18
package/esm/__version.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "11.6.0-alpha.
|
|
1
|
+
export declare const LIB_VERSION = "11.6.0-alpha.5";
|
|
2
2
|
export declare const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
3
3
|
export declare const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
|
4
4
|
//# sourceMappingURL=__version.d.ts.map
|
package/esm/__version.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// (C) 2021 GoodData Corporation
|
|
2
2
|
// DO NOT CHANGE THIS FILE, IT IS RE-GENERATED ON EVERY BUILD
|
|
3
|
-
export const LIB_VERSION = "11.6.0-alpha.
|
|
3
|
+
export const LIB_VERSION = "11.6.0-alpha.5";
|
|
4
4
|
export const LIB_DESCRIPTION = "GoodData SDK - Dashboard Component";
|
|
5
5
|
export const LIB_NAME = "@gooddata/sdk-ui-dashboard";
|
|
6
6
|
//# sourceMappingURL=__version.js.map
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { IDataView } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import { IChartConfig } from "@gooddata/sdk-ui-charts";
|
|
3
|
+
export interface KdaKeyDriverChartProps {
|
|
4
|
+
config: IChartConfig | null;
|
|
5
|
+
dataView: IDataView | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function KdaKeyDriverChart({ config, dataView }: KdaKeyDriverChartProps): import("react/jsx-runtime").JSX.Element;
|
|
2
8
|
//# sourceMappingURL=KdaKeyDriverChart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdaKeyDriverChart.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/components/KdaKeyDriverChart.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KdaKeyDriverChart.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/components/KdaKeyDriverChart.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAIvD,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA2B7E"}
|
|
@@ -1,134 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2025 GoodData Corporation
|
|
3
|
-
import { useState } from "react";
|
|
4
3
|
import cx from "classnames";
|
|
4
|
+
import noop from "lodash-es/noop.js";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
import { selectColorPalette, selectSettings, useDashboardSelector } from "../../model/index.js";
|
|
10
|
-
import { useKdaState } from "../providers/KdaState.js";
|
|
11
|
-
const KDA_LIMIT = 20;
|
|
12
|
-
export function KdaKeyDriverChart() {
|
|
6
|
+
import { RawChart } from "@gooddata/sdk-ui-charts/internal";
|
|
7
|
+
import { UiSkeleton, useElementSize } from "@gooddata/sdk-ui-kit";
|
|
8
|
+
export function KdaKeyDriverChart({ config, dataView }) {
|
|
13
9
|
const intl = useIntl();
|
|
14
|
-
const {
|
|
15
|
-
|
|
16
|
-
const [[min, max], setRange] = useState([undefined, undefined]);
|
|
17
|
-
const colorPalette = useDashboardSelector(selectColorPalette);
|
|
18
|
-
const settings = useDashboardSelector(selectSettings);
|
|
19
|
-
const selectedItem = state.selectedItem;
|
|
20
|
-
const definition = state.definition;
|
|
21
|
-
if (selectedItem === "summary" || !definition) {
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
const { primaryMeasures, secondaryMeasures, viewBy, sortBy, filters, deviation } = createChartData(intl, definition, selectedItem);
|
|
25
|
-
return (_jsx("div", { className: cx("gd-kda-key-drivers-detail-visualisation-container"), ref: ref, children: _jsx(ComboChart, { locale: intl.locale, height: height, primaryMeasures: primaryMeasures, secondaryMeasures: secondaryMeasures, viewBy: viewBy, sortBy: sortBy, filters: filters, config: createConfig(settings, colorPalette, min, max), onDataView: (dv) => {
|
|
26
|
-
const { min, max } = calculateMinMax(dv, deviation);
|
|
27
|
-
setRange([min, max]);
|
|
28
|
-
} }) }));
|
|
29
|
-
}
|
|
30
|
-
function createConfig(settings, colorPalette, min, max) {
|
|
31
|
-
return {
|
|
32
|
-
colorPalette,
|
|
33
|
-
chartFill: {
|
|
34
|
-
type: "outline",
|
|
35
|
-
},
|
|
36
|
-
tooltip: {
|
|
37
|
-
enabled: true,
|
|
38
|
-
className: "gd-kda__vis_tooltip",
|
|
39
|
-
},
|
|
40
|
-
legend: {
|
|
41
|
-
enabled: false,
|
|
42
|
-
responsive: "autoPositionWithPopup",
|
|
43
|
-
},
|
|
44
|
-
dataPoints: {
|
|
45
|
-
visible: false,
|
|
46
|
-
},
|
|
47
|
-
yaxis: {
|
|
48
|
-
min: min?.toString(),
|
|
49
|
-
max: max?.toString(),
|
|
50
|
-
},
|
|
51
|
-
secondary_yaxis: {
|
|
52
|
-
labelsEnabled: false,
|
|
53
|
-
name: {
|
|
54
|
-
visible: false,
|
|
55
|
-
},
|
|
56
|
-
min: min?.toString(),
|
|
57
|
-
max: max?.toString(),
|
|
58
|
-
},
|
|
59
|
-
enableAccessibleTooltip: settings.enableAccessibleChartTooltip,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
function createChartData(intl, definition, selectedItem) {
|
|
63
|
-
const title = intl.formatMessage({ id: "kdaDialog.dialog.keyDriver.chart.std" });
|
|
64
|
-
const metric = definition.metric;
|
|
65
|
-
const trend = selectedItem.data.to.value - selectedItem.data.from.value;
|
|
66
|
-
const deviation = trend >= 0
|
|
67
|
-
? selectedItem.data.mean + selectedItem.data.standardDeviation
|
|
68
|
-
: selectedItem.data.mean - selectedItem.data.standardDeviation;
|
|
69
|
-
const primaryMeasures = [metric];
|
|
70
|
-
const secondaryMeasures = [createStandardDeviationMeasure(metric, title, deviation)];
|
|
71
|
-
const viewBy = [
|
|
72
|
-
newAttribute(selectedItem.data.attribute, (m) => {
|
|
73
|
-
return m.localId("attribute").alias(selectedItem.data.title);
|
|
74
|
-
}),
|
|
75
|
-
];
|
|
76
|
-
const sortBy = [newMeasureSort(metric.measure.localIdentifier, "desc")];
|
|
77
|
-
const operator = trend >= 0 ? "TOP" : "BOTTOM";
|
|
78
|
-
const filters = [newRankingFilter(metric.measure.localIdentifier, operator, KDA_LIMIT)];
|
|
79
|
-
return {
|
|
80
|
-
primaryMeasures,
|
|
81
|
-
secondaryMeasures,
|
|
82
|
-
viewBy,
|
|
83
|
-
sortBy,
|
|
84
|
-
filters,
|
|
85
|
-
deviation,
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
function createStandardDeviationMeasure(metric, title, deviation) {
|
|
89
|
-
return modifyInlineMeasure(newInlineMeasure(`SELECT ${deviation}`), (m) => {
|
|
90
|
-
return m
|
|
91
|
-
.title(title)
|
|
92
|
-
.localId(`${metric.measure.localIdentifier}_ranking`)
|
|
93
|
-
.format(metric.measure.format);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
function calculateMinMax(dv, deviation) {
|
|
97
|
-
const data = dv.rawData().data();
|
|
98
|
-
function calcMin(vals) {
|
|
99
|
-
return vals.reduce((min, val) => {
|
|
100
|
-
if (val === null) {
|
|
101
|
-
return min;
|
|
102
|
-
}
|
|
103
|
-
return Math.min(min, parseFloat(String(val)));
|
|
104
|
-
}, Infinity);
|
|
105
|
-
}
|
|
106
|
-
function calcMax(vals) {
|
|
107
|
-
return vals.reduce((max, val) => {
|
|
108
|
-
if (val === null) {
|
|
109
|
-
return max;
|
|
110
|
-
}
|
|
111
|
-
return Math.max(max, parseFloat(String(val)));
|
|
112
|
-
}, -Infinity);
|
|
113
|
-
}
|
|
114
|
-
let min = data.reduce((min, val) => {
|
|
115
|
-
if (Array.isArray(val)) {
|
|
116
|
-
return Math.min(min, calcMin(val));
|
|
117
|
-
}
|
|
118
|
-
return Math.min(min, parseFloat(String(val)));
|
|
119
|
-
}, Infinity);
|
|
120
|
-
let max = data.reduce((max, val) => {
|
|
121
|
-
if (Array.isArray(val)) {
|
|
122
|
-
return Math.max(max, calcMax(val));
|
|
123
|
-
}
|
|
124
|
-
return Math.max(max, parseFloat(String(val)));
|
|
125
|
-
}, -Infinity);
|
|
126
|
-
//apply also deviation
|
|
127
|
-
min = Math.min(min, deviation);
|
|
128
|
-
max = Math.max(max, deviation);
|
|
129
|
-
return {
|
|
130
|
-
min,
|
|
131
|
-
max,
|
|
132
|
-
};
|
|
10
|
+
const { ref, width, height } = useElementSize();
|
|
11
|
+
return (_jsx("div", { className: cx("gd-kda-key-drivers-detail-visualisation-container"), ref: ref, children: config && dataView ? (_jsx(RawChart, { type: "combo", locale: intl.locale, width: width, height: height, config: config, dataView: dataView, drillableItems: [], onDrill: noop, onLegendReady: noop, afterRender: noop, onDataTooLarge: noop, onNegativeValues: noop })) : (_jsx(UiSkeleton, { itemWidth: width, itemHeight: height })) }));
|
|
133
12
|
}
|
|
134
13
|
//# sourceMappingURL=KdaKeyDriverChart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KdaKeyDriverChart.js","sourceRoot":"","sources":["../../../src/kdaDialog/components/KdaKeyDriverChart.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"KdaKeyDriverChart.js","sourceRoot":"","sources":["../../../src/kdaDialog/components/KdaKeyDriverChart.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAOlE,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA0B;IAC1E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,EAAkB,CAAC;IAEhE,OAAO,CACH,cAAK,SAAS,EAAE,EAAE,CAAC,mDAAmD,CAAC,EAAE,GAAG,EAAE,GAAG,YAC5E,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAClB,KAAC,QAAQ,IACL,IAAI,EAAC,OAAO,EACZ,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,cAAc,EAAE,EAAE,EAClB,OAAO,EAAE,IAAI,EACb,aAAa,EAAE,IAAI,EACnB,WAAW,EAAE,IAAI,EACjB,cAAc,EAAE,IAAI,EACpB,gBAAgB,EAAE,IAAI,GACxB,CACL,CAAC,CAAC,CAAC,CACA,KAAC,UAAU,IAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,GAAI,CACvD,GACC,CACT,CAAC;AACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyDriversOverview.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversOverview.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KeyDriversOverview.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversOverview.tsx"],"names":[],"mappings":"AAeA,MAAM,WAAW,uBAAuB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,uBAAuB,2CAQjF"}
|
|
@@ -7,6 +7,8 @@ import { KdaKeyDriverChart } from "../components/KdaKeyDriverChart.js";
|
|
|
7
7
|
import { KdaSummaryDrivers } from "../components/KdaSummaryDrivers.js";
|
|
8
8
|
import { KdaSummaryHeadline } from "../components/KdaSummaryHeadline.js";
|
|
9
9
|
import { useKdaState } from "../providers/KdaState.js";
|
|
10
|
+
import { useDataViewWithConfig } from "./hooks/useDataViewWithConfig.js";
|
|
11
|
+
import { useGroupAndItem } from "./hooks/useGroupAndItem.js";
|
|
10
12
|
export function KeyDriversOverview({ loading, detailsId }) {
|
|
11
13
|
const { state } = useKdaState();
|
|
12
14
|
if (state.selectedItem === "summary" || loading) {
|
|
@@ -23,7 +25,9 @@ function KeyDriversDetail({ detailsId }) {
|
|
|
23
25
|
const { state } = useKdaState();
|
|
24
26
|
const description = getDescription(state.selectedItem);
|
|
25
27
|
const category = getCategory(state.selectedItem);
|
|
26
|
-
|
|
28
|
+
const { group, item } = useGroupAndItem();
|
|
29
|
+
const { config, dataView } = useDataViewWithConfig(group, item);
|
|
30
|
+
return (_jsxs("div", { className: cx("gd-kda-key-drivers-detail"), id: detailsId, children: [_jsxs("div", { children: [_jsx("div", { className: cx("gd-kda-key-drivers-detail-title"), children: getTitle(intl, state.selectedItem) }), description ? (_jsx("div", { className: cx("gd-kda-key-drivers-detail-description"), children: description })) : null] }), _jsx("div", { className: cx("gd-kda-key-drivers-detail-visualisation"), children: _jsx(KdaKeyDriverChart, { config: config, dataView: dataView }) }), _jsxs("div", { className: cx("gd-kda-key-drivers-detail-info"), children: [_jsx(UiIcon, { type: "questionMark", size: 12 }), " ", intl.formatMessage({ id: "kdaDialog.dialog.keyDrives.overview.detail.tip" }, {
|
|
27
31
|
category,
|
|
28
32
|
})] })] }));
|
|
29
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyDriversOverview.js","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversOverview.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAa,OAAO,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAA6B,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"KeyDriversOverview.js","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversOverview.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyDriversPanel.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversPanel.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"KeyDriversPanel.d.ts","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversPanel.tsx"],"names":[],"mappings":"AAuBA,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,oBAAoB,2CAwK3E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2025 GoodData Corporation
|
|
3
|
-
import { useEffect, useId } from "react";
|
|
3
|
+
import { useCallback, useEffect, useId } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
6
6
|
import { UiButton, UiButtonSegmentedControl, UiIcon, UiIconButton, UiListbox, UiSkeleton, UiTooltip, } from "@gooddata/sdk-ui-kit";
|
|
@@ -17,21 +17,42 @@ export function KeyDriversPanel({ loading, detailsId }) {
|
|
|
17
17
|
const { maximum, list, trendUp, trendDown } = useSignificantDrives();
|
|
18
18
|
// When there are no items for selected trend, switch to the other trend
|
|
19
19
|
useEffect(() => {
|
|
20
|
-
if (
|
|
21
|
-
|
|
20
|
+
if (state.itemsStatus !== "success") {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (trendUp.length === 0 && trendDown.length > 0 && state.selectedTrend.includes("up")) {
|
|
24
|
+
setState({ selectedTrend: ["down"] });
|
|
22
25
|
}
|
|
23
26
|
// eslint-disable-next-line
|
|
24
|
-
}, []);
|
|
27
|
+
}, [state.itemsStatus]);
|
|
28
|
+
const upSelected = state.selectedTrend.includes("up");
|
|
29
|
+
const downSelected = state.selectedTrend.includes("down");
|
|
30
|
+
const onSelectCallback = useCallback((trend) => {
|
|
31
|
+
const selected = state.selectedTrend.includes(trend);
|
|
32
|
+
if (selected) {
|
|
33
|
+
const selectedTrend = state.selectedTrend.filter((t) => trend !== t);
|
|
34
|
+
if (selectedTrend.length === 0) {
|
|
35
|
+
selectedTrend.push(trend === "up" ? "down" : "up");
|
|
36
|
+
}
|
|
37
|
+
setState({
|
|
38
|
+
selectedTrend,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const selectedTrend = [...state.selectedTrend, trend];
|
|
43
|
+
setState({ selectedTrend });
|
|
44
|
+
}
|
|
45
|
+
}, [setState, state.selectedTrend]);
|
|
25
46
|
return (_jsxs("div", { className: cx("gd-kda-key-drivers-panel"), children: [_jsx("div", { className: cx("gd-kda-key-drivers-panel-summary"), children: loading ? (_jsx(UiSkeleton, { itemHeight: 40 })) : (_jsx(SummaryItem, { detailsId: detailsId, isSelected: state.selectedItem === "summary", onSelect: () => {
|
|
26
47
|
setState({ selectedItem: "summary" });
|
|
27
48
|
} })) }), _jsx("div", { className: cx("gd-kda-key-drivers-panel-title"), children: loading ? (_jsx(UiSkeleton, { itemHeight: 21, itemWidth: 70 })) : (_jsxs(_Fragment, { children: [label, _jsx(UiTooltip, { arrowPlacement: "left", triggerBy: ["hover", "focus"], optimalPlacement: true, content: tooltip, anchor: _jsx(UiIconButton, { icon: "question", variant: "tertiary", size: "xsmall", accessibilityConfig: {
|
|
28
49
|
ariaLabel: label,
|
|
29
|
-
} }) })] })) }), _jsx("div", { className: cx("gd-kda-key-drivers-panel-trend"), children: loading ? (_jsx(UiSkeleton, { itemHeight: 27 })) : (_jsxs(UiButtonSegmentedControl, { children: [_jsx(UiButton, { label: intl.formatMessage({ id: "kdaDialog.dialog.keyDrives.button.trendUp" }, { count: trendUp.length }), size: "small", isSelected:
|
|
30
|
-
|
|
50
|
+
} }) })] })) }), _jsx("div", { className: cx("gd-kda-key-drivers-panel-trend"), children: loading ? (_jsx(UiSkeleton, { itemHeight: 27 })) : (_jsxs(UiButtonSegmentedControl, { children: [_jsx(UiButton, { label: intl.formatMessage({ id: "kdaDialog.dialog.keyDrives.button.trendUp" }, { count: trendUp.length }), size: "small", isSelected: upSelected, onClick: () => {
|
|
51
|
+
onSelectCallback("up");
|
|
31
52
|
}, accessibilityConfig: {
|
|
32
53
|
ariaControls: listId,
|
|
33
|
-
} }), _jsx(UiButton, { label: intl.formatMessage({ id: "kdaDialog.dialog.keyDrives.button.trendDown" }, { count: trendDown.length }), size: "small", isSelected:
|
|
34
|
-
|
|
54
|
+
} }), _jsx(UiButton, { label: intl.formatMessage({ id: "kdaDialog.dialog.keyDrives.button.trendDown" }, { count: trendDown.length }), size: "small", isSelected: downSelected, onClick: () => {
|
|
55
|
+
onSelectCallback("down");
|
|
35
56
|
}, accessibilityConfig: {
|
|
36
57
|
ariaControls: listId,
|
|
37
58
|
} })] })) }), _jsx("div", { className: cx("gd-kda-key-drivers-panel-list"), children: loading ? (_jsxs("div", { className: cx("gd-kda-key-drivers-panel-list-loading"), children: [_jsx(UiSkeleton, { itemHeight: 40 }), _jsx(UiSkeleton, { itemHeight: 40 }), _jsx(UiSkeleton, { itemHeight: 40 }), _jsx(UiSkeleton, { itemHeight: 40 }), _jsx(UiSkeleton, { itemHeight: 40 }), _jsx(UiSkeleton, { itemHeight: 40 })] })) : (_jsx(_Fragment, { children: list.length > 0 ? (_jsx(UiListbox, { items: list, ariaAttributes: {
|
|
@@ -41,7 +62,7 @@ export function KeyDriversPanel({ loading, detailsId }) {
|
|
|
41
62
|
return _jsx(KeyDriverItem, { ...props, maximum: maximum });
|
|
42
63
|
}, selectedItemId: getSelectedItem(state), onSelect: (item) => {
|
|
43
64
|
setState({ selectedItem: item });
|
|
44
|
-
} })) : (_jsxs("div", { className: cx("gd-kda-key-drivers-panel-list-empty"), children: [_jsx(UiIcon, { type: "drawerEmpty", size: 26, color: "currentColor" }),
|
|
65
|
+
} })) : (_jsxs("div", { className: cx("gd-kda-key-drivers-panel-list-empty"), children: [_jsx(UiIcon, { type: "drawerEmpty", size: 26, color: "currentColor" }), upSelected && downSelected ? (_jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.empty" })) : (_jsx(_Fragment, { children: upSelected ? (_jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.empty_up" })) : (_jsx(FormattedMessage, { id: "kdaDialog.dialog.keyDrives.empty_down" })) }))] })) })) })] }));
|
|
45
66
|
}
|
|
46
67
|
function getSelectedItem(state) {
|
|
47
68
|
return typeof state.selectedItem === "string" ? undefined : state.selectedItem.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyDriversPanel.js","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversPanel.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"KeyDriversPanel.js","sourceRoot":"","sources":["../../../src/kdaDialog/composition/KeyDriversPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IDataView } from "@gooddata/sdk-backend-spi";
|
|
2
|
+
import { IColorPalette, ISettings } from "@gooddata/sdk-model";
|
|
3
|
+
import { IChartConfig } from "@gooddata/sdk-ui-charts";
|
|
4
|
+
import { KdaItem, KdaItemGroup } from "../../internalTypes.js";
|
|
5
|
+
import { IKdaDefinition } from "../../types.js";
|
|
6
|
+
export declare function createDataView(workspace: string, def: IKdaDefinition | null, group: KdaItemGroup, item: KdaItem, title: string): IDataView | null;
|
|
7
|
+
export declare function createConfig(settings: ISettings, colorPalette: IColorPalette, group: KdaItemGroup, item: KdaItem): IChartConfig;
|
|
8
|
+
//# sourceMappingURL=dataview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataview.d.ts","sourceRoot":"","sources":["../../../../src/kdaDialog/composition/data/dataview.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAGH,aAAa,EAKb,SAAS,EAMZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,wBAAgB,cAAc,CAC1B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,GAAG,IAAI,EAC1B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CA2GlB;AA6ID,wBAAgB,YAAY,CACxB,QAAQ,EAAE,SAAS,EACnB,YAAY,EAAE,aAAa,EAC3B,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,OAAO,GACd,YAAY,CA2Cd"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
|
2
|
+
import { modifyInlineMeasure, newAttribute, newInlineMeasure, objRefToString, } from "@gooddata/sdk-model";
|
|
3
|
+
const DEFAULT_MEASURE_FORMAT = "#,##0.00";
|
|
4
|
+
const LIMIT_KDA = 20;
|
|
5
|
+
export function createDataView(workspace, def, group, item, title) {
|
|
6
|
+
if (!def) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
const { trend, deviation } = getTrendAndDeviation(item);
|
|
10
|
+
const [tempMeasure, tempMeasureHeader, tempMeasureDescriptor] = createTempMeasure(def.metric);
|
|
11
|
+
const [stdMeasure, stdMeasureHeader, stdMeasureDescriptor] = createStandardDeviationMeasure(def.metric, title, deviation);
|
|
12
|
+
const [attribute, attributeDescriptor] = createDateAttribute(item.attribute, item.title);
|
|
13
|
+
const attributeData = getLimitedDataOnly(group, trend).map((item) => item.to.value - item.from.value);
|
|
14
|
+
const stdDate = attributeData.map(() => deviation);
|
|
15
|
+
const definition = {
|
|
16
|
+
workspace,
|
|
17
|
+
buckets: [
|
|
18
|
+
{
|
|
19
|
+
items: [tempMeasure],
|
|
20
|
+
localIdentifier: "measures",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
items: [stdMeasure],
|
|
24
|
+
localIdentifier: "secondary_measures",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
items: [attribute],
|
|
28
|
+
localIdentifier: "view",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
attributes: [attribute],
|
|
32
|
+
measures: [tempMeasure, stdMeasure],
|
|
33
|
+
filters: [],
|
|
34
|
+
sortBy: [
|
|
35
|
+
{
|
|
36
|
+
attributeSortItem: {
|
|
37
|
+
attributeIdentifier: attribute.attribute.localIdentifier,
|
|
38
|
+
direction: "asc",
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
dimensions: [
|
|
43
|
+
{
|
|
44
|
+
itemIdentifiers: ["measureGroup"],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
itemIdentifiers: [attribute.attribute.localIdentifier],
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
const view = {
|
|
52
|
+
offset: [0, 0],
|
|
53
|
+
count: [2, attributeData.length],
|
|
54
|
+
totalCount: [2, attributeData.length],
|
|
55
|
+
headerItems: [
|
|
56
|
+
[[tempMeasureHeader, stdMeasureHeader]],
|
|
57
|
+
[
|
|
58
|
+
group.items.map((item) => ({
|
|
59
|
+
attributeHeaderItem: {
|
|
60
|
+
uri: item.category,
|
|
61
|
+
name: item.category,
|
|
62
|
+
},
|
|
63
|
+
})),
|
|
64
|
+
],
|
|
65
|
+
],
|
|
66
|
+
data: [attributeData, stdDate],
|
|
67
|
+
definition,
|
|
68
|
+
result: {},
|
|
69
|
+
metadata: {
|
|
70
|
+
dataSourceMessages: [],
|
|
71
|
+
},
|
|
72
|
+
equals: (v) => {
|
|
73
|
+
return view.fingerprint() === v.fingerprint();
|
|
74
|
+
},
|
|
75
|
+
fingerprint: () => {
|
|
76
|
+
return JSON.stringify(definition);
|
|
77
|
+
},
|
|
78
|
+
forecast: () => ({
|
|
79
|
+
headerItems: [],
|
|
80
|
+
prediction: [],
|
|
81
|
+
low: [],
|
|
82
|
+
high: [],
|
|
83
|
+
loading: false,
|
|
84
|
+
}),
|
|
85
|
+
clustering: () => ({
|
|
86
|
+
attribute: [],
|
|
87
|
+
clusters: [],
|
|
88
|
+
xcoord: [],
|
|
89
|
+
ycoord: [],
|
|
90
|
+
}),
|
|
91
|
+
withForecast: () => view,
|
|
92
|
+
withClustering: () => view,
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
...view,
|
|
96
|
+
result: createExecutionResults(view, [tempMeasureDescriptor, stdMeasureDescriptor], attributeDescriptor),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function createExecutionResults(view, measures, attributeDescriptor) {
|
|
100
|
+
const res = {
|
|
101
|
+
definition: view.definition,
|
|
102
|
+
dimensions: [
|
|
103
|
+
{
|
|
104
|
+
headers: [
|
|
105
|
+
{
|
|
106
|
+
measureGroupHeader: {
|
|
107
|
+
items: measures,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
headers: [attributeDescriptor],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
withSignal: () => res,
|
|
117
|
+
readAll: () => Promise.resolve(view),
|
|
118
|
+
readWindow: () => Promise.resolve(view),
|
|
119
|
+
readForecastAll: () => Promise.resolve({
|
|
120
|
+
attribute: [],
|
|
121
|
+
origin: [],
|
|
122
|
+
prediction: [],
|
|
123
|
+
lowerBound: [],
|
|
124
|
+
upperBound: [],
|
|
125
|
+
}),
|
|
126
|
+
readAnomalyDetectionAll: () => Promise.resolve({
|
|
127
|
+
attribute: [],
|
|
128
|
+
values: [],
|
|
129
|
+
anomalyFlag: [],
|
|
130
|
+
}),
|
|
131
|
+
readClusteringAll: () => Promise.resolve({
|
|
132
|
+
attribute: [],
|
|
133
|
+
clusters: [],
|
|
134
|
+
xcoord: [],
|
|
135
|
+
ycoord: [],
|
|
136
|
+
}),
|
|
137
|
+
transform: () => {
|
|
138
|
+
throw new Error("This method is not implemented.");
|
|
139
|
+
},
|
|
140
|
+
export: () => Promise.resolve({
|
|
141
|
+
uri: "",
|
|
142
|
+
objectUrl: "",
|
|
143
|
+
}),
|
|
144
|
+
equals: (r) => {
|
|
145
|
+
return r.fingerprint() === res.fingerprint();
|
|
146
|
+
},
|
|
147
|
+
fingerprint: () => {
|
|
148
|
+
return JSON.stringify(view.definition);
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
return res;
|
|
152
|
+
}
|
|
153
|
+
function createTempMeasure(metric) {
|
|
154
|
+
const maql = `SELECT 0`;
|
|
155
|
+
const localId = `${metric.measure.localIdentifier}_vak`;
|
|
156
|
+
const title = metric.measure.alias ?? metric.measure.title ?? "";
|
|
157
|
+
return [
|
|
158
|
+
modifyInlineMeasure(newInlineMeasure(maql), (m) => {
|
|
159
|
+
return m.title(title).localId(localId).format(metric.measure.format);
|
|
160
|
+
}),
|
|
161
|
+
{
|
|
162
|
+
measureHeaderItem: {
|
|
163
|
+
name: title,
|
|
164
|
+
order: 0,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
measureHeaderItem: {
|
|
169
|
+
localIdentifier: localId,
|
|
170
|
+
name: title,
|
|
171
|
+
format: metric.measure.format ?? DEFAULT_MEASURE_FORMAT,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
function createStandardDeviationMeasure(metric, title, deviation) {
|
|
177
|
+
const maql = `SELECT ${deviation}`;
|
|
178
|
+
const localId = `${metric.measure.localIdentifier}_std`;
|
|
179
|
+
return [
|
|
180
|
+
modifyInlineMeasure(newInlineMeasure(maql), (m) => {
|
|
181
|
+
return m.title(title).localId(localId).format(metric.measure.format);
|
|
182
|
+
}),
|
|
183
|
+
{
|
|
184
|
+
measureHeaderItem: {
|
|
185
|
+
name: title,
|
|
186
|
+
order: 1,
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
measureHeaderItem: {
|
|
191
|
+
localIdentifier: localId,
|
|
192
|
+
name: title,
|
|
193
|
+
format: metric.measure.format ?? DEFAULT_MEASURE_FORMAT,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
function createDateAttribute(ref, alias) {
|
|
199
|
+
const localId = `${objRefToString(ref)}_attribute`;
|
|
200
|
+
return [
|
|
201
|
+
newAttribute(ref, (m) => m.localId(localId).alias(alias)),
|
|
202
|
+
{
|
|
203
|
+
attributeHeader: {
|
|
204
|
+
identifier: objRefToString(ref),
|
|
205
|
+
uri: "",
|
|
206
|
+
ref,
|
|
207
|
+
formOf: {
|
|
208
|
+
name: alias,
|
|
209
|
+
identifier: objRefToString(ref),
|
|
210
|
+
uri: "",
|
|
211
|
+
ref,
|
|
212
|
+
},
|
|
213
|
+
primaryLabel: ref,
|
|
214
|
+
localIdentifier: localId,
|
|
215
|
+
name: alias,
|
|
216
|
+
totalItems: [],
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
];
|
|
220
|
+
}
|
|
221
|
+
export function createConfig(settings, colorPalette, group, item) {
|
|
222
|
+
const { trend, deviation } = getTrendAndDeviation(item);
|
|
223
|
+
const items = getLimitedDataOnly(group, trend);
|
|
224
|
+
const min = Math.min(items.reduce((c, item) => Math.min(c, item.to.value - item.from.value), Infinity), deviation);
|
|
225
|
+
const max = Math.max(items.reduce((c, item) => Math.max(c, item.to.value - item.from.value), -Infinity), deviation);
|
|
226
|
+
return {
|
|
227
|
+
colorPalette,
|
|
228
|
+
chartFill: {
|
|
229
|
+
type: "outline",
|
|
230
|
+
},
|
|
231
|
+
tooltip: {
|
|
232
|
+
enabled: true,
|
|
233
|
+
className: "gd-kda__vis_tooltip",
|
|
234
|
+
},
|
|
235
|
+
legend: {
|
|
236
|
+
enabled: false,
|
|
237
|
+
responsive: "autoPositionWithPopup",
|
|
238
|
+
},
|
|
239
|
+
dataPoints: {
|
|
240
|
+
visible: false,
|
|
241
|
+
},
|
|
242
|
+
yaxis: {
|
|
243
|
+
min: min?.toString(),
|
|
244
|
+
max: max?.toString(),
|
|
245
|
+
},
|
|
246
|
+
secondary_yaxis: {
|
|
247
|
+
labelsEnabled: false,
|
|
248
|
+
name: {
|
|
249
|
+
visible: false,
|
|
250
|
+
},
|
|
251
|
+
min: min?.toString(),
|
|
252
|
+
max: max?.toString(),
|
|
253
|
+
},
|
|
254
|
+
enableAccessibleTooltip: settings.enableAccessibleChartTooltip,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function getLimitedDataOnly(group, trend) {
|
|
258
|
+
return group.items.slice(0, LIMIT_KDA).filter((item) => {
|
|
259
|
+
const diff = item.to.value - item.from.value;
|
|
260
|
+
if (trend >= 0) {
|
|
261
|
+
return diff >= 0;
|
|
262
|
+
}
|
|
263
|
+
return diff < 0;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
function getTrendAndDeviation(item) {
|
|
267
|
+
const trend = item.to.value - item.from.value;
|
|
268
|
+
const deviation = trend >= 0 ? item.mean + item.standardDeviation : item.mean - item.standardDeviation;
|
|
269
|
+
return {
|
|
270
|
+
trend,
|
|
271
|
+
deviation,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=dataview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataview.js","sourceRoot":"","sources":["../../../../src/kdaDialog/composition/data/dataview.ts"],"names":[],"mappings":"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"}
|