@embeddable.com/remarkable-pro 0.1.32 → 0.2.0
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/dist/BarChartDefaultHorizontalPro.js +1 -1
- package/dist/BarChartDefaultPro.js +1 -1
- package/dist/BarChartGroupedHorizontalPro.js +1 -1
- package/dist/BarChartGroupedPro.js +1 -1
- package/dist/BarChartStackedHorizontalPro.js +1 -1
- package/dist/BarChartStackedPro.js +1 -1
- package/dist/ComparisonPeriodSelectFieldPro.js +1 -1
- package/dist/DateRangePickerCustomPro.js +1 -1
- package/dist/DateRangeSelectFieldPro.js +1 -1
- package/dist/DonutChartPro.js +1 -1
- package/dist/DonutLabelChartPro.js +1 -1
- package/dist/HeatMapPro.js +1 -1
- package/dist/KpiChartNumberComparisonPro.js +1 -1
- package/dist/LineChartComparisonDefaultPro.js +1 -1
- package/dist/LineChartDefaultPro.js +1 -1
- package/dist/LineChartGroupedPro.js +1 -1
- package/dist/PieChartPro.js +1 -1
- package/dist/PivotTablePro.js +1 -1
- package/dist/bars.loadData.utils-3BlUREY3.js +126 -0
- package/dist/bars.loadData.utils-3BlUREY3.js.map +1 -0
- package/dist/{bars.utils-jD7h2lii.js → bars.utils-CG7i6UTJ.js} +2 -2
- package/dist/{bars.utils-jD7h2lii.js.map → bars.utils-CG7i6UTJ.js.map} +1 -1
- package/dist/charts.fillGaps.hooks-B6T9882L.js +70 -0
- package/dist/charts.fillGaps.hooks-B6T9882L.js.map +1 -0
- package/dist/{charts.utils-N3kN-XFw.js → charts.utils-BMX0edl3.js} +3480 -3511
- package/dist/charts.utils-BMX0edl3.js.map +1 -0
- package/dist/clientContext.utils-DpB5KsfX.js +15 -0
- package/dist/clientContext.utils-DpB5KsfX.js.map +1 -0
- package/dist/components/charts/bars/BarChartDefaultHorizontalPro/definition.d.ts +4 -3
- package/dist/components/charts/bars/BarChartDefaultHorizontalPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/BarChartDefaultPro/definition.d.ts +4 -3
- package/dist/components/charts/bars/BarChartDefaultPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/BarChartGroupedHorizontalPro/definition.d.ts +2 -1
- package/dist/components/charts/bars/BarChartGroupedHorizontalPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/BarChartGroupedPro/definition.d.ts +2 -1
- package/dist/components/charts/bars/BarChartGroupedPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/BarChartStackedHorizontalPro/definition.d.ts +2 -1
- package/dist/components/charts/bars/BarChartStackedHorizontalPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/BarChartStackedPro/definition.d.ts +2 -1
- package/dist/components/charts/bars/BarChartStackedPro/definition.d.ts.map +1 -1
- package/dist/components/charts/bars/bars.loadData.utils.d.ts +9 -5
- package/dist/components/charts/bars/bars.loadData.utils.d.ts.map +1 -1
- package/dist/components/charts/kpis/KpiChartNumberComparisonPro/definition.d.ts +6 -5
- package/dist/components/charts/kpis/KpiChartNumberComparisonPro/definition.d.ts.map +1 -1
- package/dist/components/charts/lines/LineChartComparisonDefaultPro/definition.d.ts +6 -5
- package/dist/components/charts/lines/LineChartComparisonDefaultPro/definition.d.ts.map +1 -1
- package/dist/components/charts/lines/LineChartDefaultPro/definition.d.ts +4 -3
- package/dist/components/charts/lines/LineChartDefaultPro/definition.d.ts.map +1 -1
- package/dist/components/charts/lines/LineChartGroupedPro/definition.d.ts +4 -3
- package/dist/components/charts/lines/LineChartGroupedPro/definition.d.ts.map +1 -1
- package/dist/components/charts/tables/HeatMapPro/definition.d.ts +4 -3
- package/dist/components/charts/tables/HeatMapPro/definition.d.ts.map +1 -1
- package/dist/components/charts/tables/PivotTablePro/definition.d.ts +6 -5
- package/dist/components/charts/tables/PivotTablePro/definition.d.ts.map +1 -1
- package/dist/components/editors/ComparisonPeriodSelectFieldPro/index.d.ts.map +1 -1
- package/dist/components/editors/dates/DateRangePickerCustomPro/index.d.ts.map +1 -1
- package/dist/components/editors/dates/DateRangePickerPresetsPro/DateRangePickerPresetsPro.types.d.ts +1 -1
- package/dist/components/editors/dates/DateRangePickerPresetsPro/DateRangePickerPresetsPro.types.d.ts.map +1 -1
- package/dist/components/editors/dates/DateRangePickerPresetsPro/DateRangePickerPresetsPro.utils.d.ts +1 -1
- package/dist/components/editors/dates/DateRangePickerPresetsPro/DateRangePickerPresetsPro.utils.d.ts.map +1 -1
- package/dist/components/editors/dates/DateRangePickerPresetsPro/index.d.ts.map +1 -1
- package/dist/components/editors/dates/dates.utils.d.ts +3 -3
- package/dist/components/editors/dates/dates.utils.d.ts.map +1 -1
- package/dist/{dates.utils-C3LPV893.js → dates.utils-D44sdrNs.js} +36 -36
- package/dist/{dates.utils-C3LPV893.js.map → dates.utils-D44sdrNs.js.map} +1 -1
- package/dist/definition-B1B71Q9P.js +164 -0
- package/dist/definition-B1B71Q9P.js.map +1 -0
- package/dist/{definition-B2mKjUhy.js → definition-B1t6-ToS.js} +87 -84
- package/dist/definition-B1t6-ToS.js.map +1 -0
- package/dist/{definition-Dizabfqb.js → definition-BejgCcXe.js} +94 -92
- package/dist/{definition-Dizabfqb.js.map → definition-BejgCcXe.js.map} +1 -1
- package/dist/definition-Bg3R-QHm.js +206 -0
- package/dist/definition-Bg3R-QHm.js.map +1 -0
- package/dist/{definition-Bdwvh471.js → definition-BomoMNHu.js} +19 -18
- package/dist/definition-BomoMNHu.js.map +1 -0
- package/dist/{definition-CN6Ieeer.js → definition-BxDRujfc.js} +65 -63
- package/dist/{definition-CN6Ieeer.js.map → definition-BxDRujfc.js.map} +1 -1
- package/dist/{definition-B5l2-yZu.js → definition-Bx_a3I-X.js} +66 -62
- package/dist/definition-Bx_a3I-X.js.map +1 -0
- package/dist/{definition-bvWr0LdF.js → definition-CLDcybuA.js} +56 -51
- package/dist/definition-CLDcybuA.js.map +1 -0
- package/dist/{definition-C8DCZNOR.js → definition-C_wdRHYX.js} +2 -2
- package/dist/{definition-C8DCZNOR.js.map → definition-C_wdRHYX.js.map} +1 -1
- package/dist/{definition-B9bfDi7Q.js → definition-DFEQMSrJ.js} +2 -2
- package/dist/{definition-B9bfDi7Q.js.map → definition-DFEQMSrJ.js.map} +1 -1
- package/dist/{definition-Dh9UNSfZ.js → definition-DqtPYFiz.js} +39 -30
- package/dist/definition-DqtPYFiz.js.map +1 -0
- package/dist/{definition-CkVv7VMQ.js → definition-MdprJNc9.js} +2 -2
- package/dist/{definition-CkVv7VMQ.js.map → definition-MdprJNc9.js.map} +1 -1
- package/dist/{definition-DnWIyPun.js → definition-NQQg5mwf.js} +80 -76
- package/dist/definition-NQQg5mwf.js.map +1 -0
- package/dist/{definition-SCQMKDEM.js → definition-OA_X18FK.js} +46 -44
- package/dist/definition-OA_X18FK.js.map +1 -0
- package/dist/definition-nSxl9weT.js +525 -0
- package/dist/definition-nSxl9weT.js.map +1 -0
- package/dist/definition-poLEt7kb.js +210 -0
- package/dist/definition-poLEt7kb.js.map +1 -0
- package/dist/{definition-DynupxEC.js → definition-uj4b0NtW.js} +82 -78
- package/dist/definition-uj4b0NtW.js.map +1 -0
- package/dist/definition-xkAbcSB6.js +166 -0
- package/dist/definition-xkAbcSB6.js.map +1 -0
- package/dist/embeddable-components.json +42 -42
- package/dist/embeddable-theme-0137e.js +4437 -4455
- package/dist/index.js +24 -24
- package/dist/{pies.utils-BlPQ76Jf.js → pies.utils-DvbvSz5H.js} +2 -2
- package/dist/{pies.utils-BlPQ76Jf.js.map → pies.utils-DvbvSz5H.js.map} +1 -1
- package/dist/theme/defaults/defaults.ComparisonPeriods.constants.d.ts.map +1 -1
- package/dist/theme/defaults/defaults.DateRanges.constants.d.ts +1 -1
- package/dist/theme/defaults/defaults.DateRanges.constants.d.ts.map +1 -1
- package/dist/theme/theme.constants.d.ts.map +1 -1
- package/dist/theme/theme.types.d.ts +4 -0
- package/dist/theme/theme.types.d.ts.map +1 -1
- package/dist/theme/utils/clientContext.utils.d.ts +2 -0
- package/dist/theme/utils/clientContext.utils.d.ts.map +1 -0
- package/dist/timeRange.utils-CcP33PfM.js +20 -0
- package/dist/timeRange.utils-CcP33PfM.js.map +1 -0
- package/package.json +1 -1
- package/dist/bars.loadData.utils-FxKnljYM.js +0 -116
- package/dist/bars.loadData.utils-FxKnljYM.js.map +0 -1
- package/dist/charts.fillGaps.hooks-CvKhAwUj.js +0 -70
- package/dist/charts.fillGaps.hooks-CvKhAwUj.js.map +0 -1
- package/dist/charts.utils-N3kN-XFw.js.map +0 -1
- package/dist/definition-2JaSZCXp.js +0 -206
- package/dist/definition-2JaSZCXp.js.map +0 -1
- package/dist/definition-B2mKjUhy.js.map +0 -1
- package/dist/definition-B5l2-yZu.js.map +0 -1
- package/dist/definition-Bdwvh471.js.map +0 -1
- package/dist/definition-Bn3Fi9C4.js +0 -515
- package/dist/definition-Bn3Fi9C4.js.map +0 -1
- package/dist/definition-BrVG5pTw.js +0 -162
- package/dist/definition-BrVG5pTw.js.map +0 -1
- package/dist/definition-Dh9UNSfZ.js.map +0 -1
- package/dist/definition-DnWIyPun.js.map +0 -1
- package/dist/definition-DynupxEC.js.map +0 -1
- package/dist/definition-EqCeNipq.js +0 -201
- package/dist/definition-EqCeNipq.js.map +0 -1
- package/dist/definition-SCQMKDEM.js.map +0 -1
- package/dist/definition-bvWr0LdF.js.map +0 -1
- package/dist/definition-pNCrIBqW.js +0 -164
- package/dist/definition-pNCrIBqW.js.map +0 -1
- package/dist/timeRange.utils-D1hjtzlU.js +0 -20
- package/dist/timeRange.utils-D1hjtzlU.js.map +0 -1
package/dist/DonutChartPro.js
CHANGED
package/dist/HeatMapPro.js
CHANGED
package/dist/PieChartPro.js
CHANGED
package/dist/PivotTablePro.js
CHANGED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { useEffect as A } from "react";
|
|
2
|
+
import { l as u } from "./index-CJYh9LRs.js";
|
|
3
|
+
import { g as v } from "./granularity.utils-Hj10GihD.js";
|
|
4
|
+
import { g, S as D } from "./component.inputs.constants-C7tJAhsQ.js";
|
|
5
|
+
function L(t) {
|
|
6
|
+
const { resultsAxisOrder: e, axisDimension: s, setAxisOrderAndCacheKey: n, axisOrderCacheKey: o } = t;
|
|
7
|
+
A(() => {
|
|
8
|
+
if (!n || !(e != null && e.data) || e.isLoading || !o)
|
|
9
|
+
return;
|
|
10
|
+
const r = e.data.map((i) => i[s.name]).filter((i) => i != null);
|
|
11
|
+
n(r, o);
|
|
12
|
+
}, [e]);
|
|
13
|
+
}
|
|
14
|
+
const c = (t) => typeof t == "number" && Number.isInteger(t) && t > 0 ? t : void 0, f = (t, e) => !!(g(t) || c(e)), S = { data: [], isLoading: !1 }, y = ({
|
|
15
|
+
dataset: t,
|
|
16
|
+
axis: e,
|
|
17
|
+
measure: s,
|
|
18
|
+
sortDirection: n,
|
|
19
|
+
limit: o,
|
|
20
|
+
timezone: r
|
|
21
|
+
}) => ({
|
|
22
|
+
from: t,
|
|
23
|
+
select: [e, s],
|
|
24
|
+
orderBy: [
|
|
25
|
+
{
|
|
26
|
+
property: s,
|
|
27
|
+
direction: g(n) ?? D.desc
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
limit: c(o),
|
|
31
|
+
timezone: r
|
|
32
|
+
}), R = ({
|
|
33
|
+
dataset: t,
|
|
34
|
+
axis: e,
|
|
35
|
+
measure: s,
|
|
36
|
+
limitTopAxis: n,
|
|
37
|
+
sortDirection: o,
|
|
38
|
+
timezone: r
|
|
39
|
+
}) => {
|
|
40
|
+
if (f(o, n))
|
|
41
|
+
return u(
|
|
42
|
+
y({
|
|
43
|
+
dataset: t,
|
|
44
|
+
axis: e,
|
|
45
|
+
measure: s,
|
|
46
|
+
sortDirection: o,
|
|
47
|
+
limit: n,
|
|
48
|
+
timezone: r
|
|
49
|
+
})
|
|
50
|
+
);
|
|
51
|
+
}, b = ({
|
|
52
|
+
dataset: t,
|
|
53
|
+
axis: e,
|
|
54
|
+
measure: s,
|
|
55
|
+
sortDirection: n,
|
|
56
|
+
limit: o,
|
|
57
|
+
timezone: r
|
|
58
|
+
}) => {
|
|
59
|
+
if (f(n, o))
|
|
60
|
+
return JSON.stringify(
|
|
61
|
+
y({ dataset: t, axis: e, measure: s, sortDirection: n, limit: o, timezone: r })
|
|
62
|
+
);
|
|
63
|
+
}, E = (t, e) => {
|
|
64
|
+
if (!(t == null || t !== (e == null ? void 0 : e.axisOrderCacheKey)))
|
|
65
|
+
return e == null ? void 0 : e.axisOrder;
|
|
66
|
+
}, p = ({
|
|
67
|
+
dataset: t,
|
|
68
|
+
axis: e,
|
|
69
|
+
groupBy: s,
|
|
70
|
+
measure: n,
|
|
71
|
+
limit: o,
|
|
72
|
+
axisOrder: r,
|
|
73
|
+
timezone: i
|
|
74
|
+
}) => {
|
|
75
|
+
const a = {
|
|
76
|
+
from: t,
|
|
77
|
+
select: [e, s, n],
|
|
78
|
+
limit: c(o),
|
|
79
|
+
timezone: i
|
|
80
|
+
};
|
|
81
|
+
return r != null && r.length && (a.filters = [{ property: e, operator: "equals", value: r }]), a;
|
|
82
|
+
}, G = ({
|
|
83
|
+
dataset: t,
|
|
84
|
+
axis: e,
|
|
85
|
+
groupBy: s,
|
|
86
|
+
measure: n,
|
|
87
|
+
granularity: o,
|
|
88
|
+
sortDirection: r,
|
|
89
|
+
limitTopAxis: i,
|
|
90
|
+
maxResults: a,
|
|
91
|
+
axisOrder: l,
|
|
92
|
+
timezone: d
|
|
93
|
+
}) => {
|
|
94
|
+
const h = f(r, i), m = v(e, o);
|
|
95
|
+
if (!h)
|
|
96
|
+
return u(
|
|
97
|
+
p({
|
|
98
|
+
dataset: t,
|
|
99
|
+
axis: m,
|
|
100
|
+
groupBy: s,
|
|
101
|
+
measure: n,
|
|
102
|
+
limit: a,
|
|
103
|
+
timezone: d
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
if (l != null)
|
|
107
|
+
return l != null && l.length ? u(
|
|
108
|
+
p({
|
|
109
|
+
dataset: t,
|
|
110
|
+
axis: m,
|
|
111
|
+
groupBy: s,
|
|
112
|
+
measure: n,
|
|
113
|
+
limit: a,
|
|
114
|
+
axisOrder: l,
|
|
115
|
+
timezone: d
|
|
116
|
+
})
|
|
117
|
+
) : S;
|
|
118
|
+
};
|
|
119
|
+
export {
|
|
120
|
+
E as a,
|
|
121
|
+
R as b,
|
|
122
|
+
b as g,
|
|
123
|
+
G as l,
|
|
124
|
+
L as u
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=bars.loadData.utils-3BlUREY3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bars.loadData.utils-3BlUREY3.js","sources":["../src/components/charts/bars/bars.hooks.ts","../src/components/charts/bars/bars.loadData.utils.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { DataResponse, Dimension } from '@embeddable.com/core';\n\nexport function useUpdateAxisOrderAndCacheKey(opts: {\n resultsAxisOrder?: DataResponse;\n axisDimension: Dimension;\n setAxisOrderAndCacheKey?: (values: string[], cacheKey: string) => void;\n axisOrderCacheKey?: string;\n}): void {\n const { resultsAxisOrder, axisDimension, setAxisOrderAndCacheKey, axisOrderCacheKey } = opts;\n\n useEffect(() => {\n if (\n !setAxisOrderAndCacheKey ||\n !resultsAxisOrder?.data ||\n resultsAxisOrder.isLoading ||\n !axisOrderCacheKey\n )\n return;\n\n const values = resultsAxisOrder.data\n .map((d) => d[axisDimension.name])\n .filter((v): v is string => v != null);\n\n setAxisOrderAndCacheKey(values, axisOrderCacheKey);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- setAxisOrderAndCacheKey is recreated each render; other deps always change together with resultsAxisOrder\n }, [resultsAxisOrder]);\n}\n","import {\n DataResponse,\n Dataset,\n Dimension,\n Granularity,\n loadData,\n LoadDataRequest,\n Measure,\n OrderDirection,\n} from '@embeddable.com/core';\nimport { getDimensionWithGranularity } from '../utils/granularity.utils';\nimport {\n getSortDirectionValue,\n SortDirectionTypeOptions,\n} from '../../types/SortDirection.type.emb';\n\nexport const getLimit = (limit?: number): number | undefined =>\n typeof limit === 'number' && Number.isInteger(limit) && limit > 0 ? limit : undefined;\n\nexport const shouldGetTopItems = (sortDirection?: OrderDirection, limit?: number): boolean =>\n Boolean(getSortDirectionValue(sortDirection) || getLimit(limit));\n\nconst EMPTY_RESULTS = { data: [], isLoading: false } as DataResponse;\n\n// ---- Axis Order ----\n\ntype LoadDataResultsAxisOrderArgs = {\n dataset: Dataset;\n axis: Dimension;\n measure: Measure;\n sortDirection?: OrderDirection;\n limit?: number;\n timezone?: string;\n};\n\nexport const loadDataResultsAxisOrderArgs = ({\n dataset,\n axis,\n measure,\n sortDirection,\n limit,\n timezone,\n}: LoadDataResultsAxisOrderArgs): LoadDataRequest => {\n return {\n from: dataset,\n select: [axis, measure],\n orderBy: [\n {\n property: measure,\n direction: getSortDirectionValue(sortDirection) ?? SortDirectionTypeOptions.desc,\n },\n ],\n limit: getLimit(limit),\n timezone,\n };\n};\n\ntype LoadDataResultsAxisOrder = {\n dataset: Dataset;\n axis: Dimension;\n measure: Measure;\n limitTopAxis?: number;\n sortDirection?: OrderDirection;\n timezone?: string;\n};\n\nexport const loadDataResultsAxisOrder = ({\n dataset,\n axis,\n measure,\n limitTopAxis,\n sortDirection,\n timezone,\n}: LoadDataResultsAxisOrder): DataResponse | undefined => {\n const needsTopItems = shouldGetTopItems(sortDirection, limitTopAxis);\n\n if (!needsTopItems) return undefined;\n\n return loadData(\n loadDataResultsAxisOrderArgs({\n dataset,\n axis,\n measure,\n sortDirection,\n limit: limitTopAxis,\n timezone,\n }),\n );\n};\n\nexport const getAxisOrderCacheKey = ({\n dataset,\n axis,\n measure,\n sortDirection,\n limit,\n timezone,\n}: LoadDataResultsAxisOrderArgs): string | undefined => {\n if (!shouldGetTopItems(sortDirection, limit)) return undefined;\n return JSON.stringify(\n loadDataResultsAxisOrderArgs({ dataset, axis, measure, sortDirection, limit, timezone }),\n );\n};\n\nexport const getCachedAxisOrder = (\n axisOrderCacheKey: string | undefined,\n state: { axisOrderCacheKey?: string; axisOrder?: string[] } | undefined,\n): string[] | undefined => {\n if (axisOrderCacheKey == null || axisOrderCacheKey !== state?.axisOrderCacheKey) return undefined;\n return state?.axisOrder;\n};\n\n// ---- Results ----\n\ntype LoadDataResultsArgs = {\n dataset: Dataset;\n axis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n limit?: number;\n axisOrder?: string[];\n timezone?: string;\n};\n\nexport const loadDataResultsArgs = ({\n dataset,\n axis,\n groupBy,\n measure,\n limit,\n axisOrder,\n timezone,\n}: LoadDataResultsArgs): LoadDataRequest => {\n const request: LoadDataRequest = {\n from: dataset,\n select: [axis, groupBy, measure],\n limit: getLimit(limit),\n timezone,\n };\n if (axisOrder?.length) {\n request['filters'] = [{ property: axis, operator: 'equals', value: axisOrder }];\n }\n return request;\n};\n\ntype LoadDataResults = {\n dataset: Dataset;\n axis: Dimension;\n groupBy: Dimension;\n measure: Measure;\n granularity?: Granularity;\n sortDirection?: OrderDirection;\n limitTopAxis?: number;\n maxResults?: number;\n axisOrder?: string[];\n timezone?: string;\n};\n\nexport const loadDataResults = ({\n dataset,\n axis,\n groupBy,\n measure,\n granularity,\n sortDirection,\n limitTopAxis,\n maxResults,\n axisOrder,\n timezone,\n}: LoadDataResults): DataResponse | undefined => {\n const needsTopItems = shouldGetTopItems(sortDirection, limitTopAxis);\n const axisWithGranularity = getDimensionWithGranularity(axis, granularity);\n if (!needsTopItems) {\n return loadData(\n loadDataResultsArgs({\n dataset,\n axis: axisWithGranularity,\n groupBy,\n measure,\n limit: maxResults,\n timezone,\n }),\n );\n }\n if (axisOrder == null) return undefined;\n if (!axisOrder?.length) return EMPTY_RESULTS;\n return loadData(\n loadDataResultsArgs({\n dataset,\n axis: axisWithGranularity,\n groupBy,\n measure,\n limit: maxResults,\n axisOrder,\n timezone,\n }),\n );\n};\n"],"names":["useUpdateAxisOrderAndCacheKey","opts","resultsAxisOrder","axisDimension","setAxisOrderAndCacheKey","axisOrderCacheKey","useEffect","values","d","v","getLimit","limit","shouldGetTopItems","sortDirection","getSortDirectionValue","EMPTY_RESULTS","loadDataResultsAxisOrderArgs","dataset","axis","measure","timezone","SortDirectionTypeOptions","loadDataResultsAxisOrder","limitTopAxis","loadData","getAxisOrderCacheKey","getCachedAxisOrder","state","loadDataResultsArgs","groupBy","axisOrder","request","loadDataResults","granularity","maxResults","needsTopItems","axisWithGranularity","getDimensionWithGranularity"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as O, v as w } from "./index-CJYh9LRs.js";
|
|
2
|
-
import { r as M, g as T, a as $ } from "./charts.utils-
|
|
2
|
+
import { r as M, g as T, a as $ } from "./charts.utils-BMX0edl3.js";
|
|
3
3
|
import { g as C } from "./formatter.utils-BLaKKpAa.js";
|
|
4
4
|
import { g as f } from "./styles.utils-C8CnV0SB.js";
|
|
5
5
|
const A = (s, d) => {
|
|
@@ -156,4 +156,4 @@ export {
|
|
|
156
156
|
A as b,
|
|
157
157
|
E as g
|
|
158
158
|
};
|
|
159
|
-
//# sourceMappingURL=bars.utils-
|
|
159
|
+
//# sourceMappingURL=bars.utils-CG7i6UTJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bars.utils-jD7h2lii.js","sources":["../src/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { CUBE_DIMENSION_TYPE_TIME, DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { getDatalabelPercentage, groupTailAsOther } from '../charts.utils';\nimport { getDimensionMeasureColor } from '../../../theme/styles/styles.utils';\nimport { getChartColors } from '@embeddable.com/remarkable-ui';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n axisOrder?: string[];\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const uniqueAxis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))];\n uniqueAxis.sort();\n\n const axis = props.axisOrder ? props.axisOrder.filter((v) => uniqueAxis.includes(v)) : uniqueAxis;\n const groupDimensionName = `${groupDimension.name}${groupDimension.nativeType === CUBE_DIMENSION_TYPE_TIME && groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter((d) => d != null);\n\n const chartColors = getChartColors();\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getDimensionMeasureColor({\n dimensionOrMeasure: groupDimension,\n theme,\n color: 'background',\n value: `${groupDimension.name}.${groupByItem}`,\n index,\n chartColors,\n });\n\n const borderColor = getDimensionMeasureColor({\n dimensionOrMeasure: groupDimension,\n theme,\n color: 'border',\n value: `${groupDimension.name}.${groupByItem}`,\n index,\n chartColors,\n });\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n const chartColors = getChartColors();\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getDimensionMeasureColor({\n dimensionOrMeasure: measure,\n theme,\n color: 'background',\n value: measure.name,\n index,\n chartColors,\n });\n\n const borderColor = getDimensionMeasureColor({\n dimensionOrMeasure: measure,\n theme,\n color: 'border',\n value: measure.name,\n index,\n chartColors,\n });\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked?: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n\n if (measure.inputs?.showValueAsPercentage) {\n return getDatalabelPercentage(Number(value), context.dataset.data);\n }\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n\n const dimensionLabel = themeFormatter.data(dimension, context.dataset.label) || '';\n const measureValue = themeFormatter.data(measure, raw);\n\n let percentage = '';\n if (measure.inputs?.showValueAsPercentage) {\n percentage = `(${getDatalabelPercentage(raw, context.dataset.data)})`;\n }\n return `${dimensionLabel}: ${measureValue} ${percentage}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n if (!onBarClicked) return;\n\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarStackedChartProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","uniqueAxis","d","axis","v","groupDimensionName","CUBE_DIMENSION_TYPE_TIME","_a","groupBy","chartColors","getChartColors","datasets","groupByItem","index","backgroundColor","getDimensionMeasureColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","getBarChartProDatalabelTotalFormatter","context","formatter","i","total","sum","ds","val","getBarChartProOptions","options","onBarClicked","measures","horizontal","_value","value","getDatalabelPercentage","label","raw","dimensionLabel","measureValue","percentage","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":";;;;AAUO,MAAMA,IAA4B,CACvCC,GAOAC,MACqB;;AACrB,QAAMC,IAAiBC,EAAkBF,CAAK,GACxC,EAAE,MAAAG,IAAO,CAAA,GAAI,WAAAC,GAAW,gBAAAC,GAAgB,SAAAC,MAAYP,GAEpDQ,IAAa,CAAC,GAAG,IAAI,IAAIJ,EAAK,IAAI,CAACK,MAAMA,EAAEJ,EAAU,IAAI,CAAC,EAAE,OAAO,CAACI,MAAMA,KAAK,IAAI,CAAC,CAAC;AAC3F,EAAAD,EAAW,KAAA;AAEX,QAAME,IAAOV,EAAM,YAAYA,EAAM,UAAU,OAAO,CAACW,MAAMH,EAAW,SAASG,CAAC,CAAC,IAAIH,GACjFI,IAAqB,GAAGN,EAAe,IAAI,GAAGA,EAAe,eAAeO,OAA4BC,IAAAR,EAAe,WAAf,QAAAQ,EAAuB,eAAc,IAAIR,EAAe,OAAO,WAAW,KAAK,EAAE,IACzLS,IAAU,CAAC,GAAG,IAAI,IAAIX,EAAK,IAAI,CAACK,MAAMA,EAAEG,CAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAACH,MAAMA,KAAK,IAAI,GAEtFO,IAAcC,EAAA,GACdC,IAAWH,EAAQ,IAAI,CAACI,GAAaC,MAAU;AACnD,UAAMC,IAAkBC,EAAyB;AAAA,MAC/C,oBAAoBhB;AAAA,MACpB,OAAAL;AAAA,MACA,OAAO;AAAA,MACP,OAAO,GAAGK,EAAe,IAAI,IAAIa,CAAW;AAAA,MAC5C,OAAAC;AAAA,MACA,aAAAJ;AAAA,IAAA,CACD,GAEKO,IAAcD,EAAyB;AAAA,MAC3C,oBAAoBhB;AAAA,MACpB,OAAAL;AAAA,MACA,OAAO;AAAA,MACP,OAAO,GAAGK,EAAe,IAAI,IAAIa,CAAW;AAAA,MAC5C,OAAAC;AAAA,MACA,aAAAJ;AAAA,IAAA,CACD;AAED,WAAO;AAAA,MACL,OAAOd,EAAe,KAAKI,GAAgBa,CAAW;AAAA,MACtD,UAAUA;AAAA,MACV,iBAAAE;AAAA,MACA,aAAAE;AAAA,MACA,MAAMb,EAAK,IAAI,CAACc,MAAa;AAC3B,cAAMC,IAASrB,EAAK;AAAA,UAClB,CAACK,MAAMA,EAAEG,CAAkB,MAAMO,KAAeV,EAAEJ,EAAU,IAAI,MAAMmB;AAAA,QAAA;AAExE,eAAOC,IAAS,OAAOA,EAAOlB,EAAQ,IAAI,CAAC,IAAI;AAAA,MACjD,CAAC;AAAA,IAAA;AAAA,EAEL,CAAC;AAED,SAAO;AAAA,IACL,QAAQG;AAAA,IACR,UAAAQ;AAAA,EAAA;AAEJ,GAEaQ,IAAqB,CAChC1B,GAMAC,IAAe0B,MACM;AACrB,MAAI,CAAC3B,EAAM;AACT,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA,MACR,UAAU,CAAC,EAAE,MAAM,IAAI;AAAA,IAAA;AAI3B,QAAME,IAAiBC,EAAkBF,CAAK,GACxC2B,IAAcC,EAAiB7B,EAAM,MAAMA,EAAM,WAAWA,EAAM,UAAUA,EAAM,QAAQ,GAC1FgB,IAAcC,EAAA;AAEpB,SAAO;AAAA,IACL,QAAQW,EAAY,IAAI,CAACE,MAChBA,EAAK9B,EAAM,UAAU,IAAI,CACjC;AAAA,IACD,UAAUA,EAAM,SAAS,IAAI,CAACO,GAASa,MAAU;AAC/C,YAAMC,IAAkBC,EAAyB;AAAA,QAC/C,oBAAoBf;AAAA,QACpB,OAAAN;AAAA,QACA,OAAO;AAAA,QACP,OAAOM,EAAQ;AAAA,QACf,OAAAa;AAAA,QACA,aAAAJ;AAAA,MAAA,CACD,GAEKO,IAAcD,EAAyB;AAAA,QAC3C,oBAAoBf;AAAA,QACpB,OAAAN;AAAA,QACA,OAAO;AAAA,QACP,OAAOM,EAAQ;AAAA,QACf,OAAAa;AAAA,QACA,aAAAJ;AAAA,MAAA,CACD;AAED,aAAO;AAAA,QACL,OAAOd,EAAe,wBAAwBK,CAAO;AAAA,QACrD,MAAMqB,EAAY,IAAI,CAACE,MAASA,EAAKvB,EAAQ,IAAI,KAAK,CAAC;AAAA,QACvD,iBAAAc;AAAA,QACA,aAAAE;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EAAA;AAEL,GAEMQ,IAAwC,CAC5CC,GACAC,MACG;AACH,QAAM,EAAE,UAAAf,EAAA,IAAac,EAAQ,MAAM,MAC7BE,IAAIF,EAAQ,WAEZG,IAAQjB,EAAS,OAAO,CAACkB,GAAKC,MAAO;AACzC,UAAMC,IAAMD,EAAG,KAAKH,CAAC;AACrB,WAAOE,KAAOE,KAAO;AAAA,EACvB,GAAG,CAAC;AAEJ,SAAOL,EAAUE,CAAK;AACxB,GAEaI,IAAwB,CACnCC,GAUAvC,MACiC;AACjC,QAAM,EAAE,cAAAwC,GAAc,UAAAC,GAAU,WAAArC,GAAW,YAAAsC,GAAY,MAAAvC,MAASoC,GAE1DtC,IAAiBC,EAAkBF,CAAK;AAC9C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,QAAQ,EAAE,UAAUA,EAAM,OAAO,kBAAkB,SAAA;AAAA,MACnD,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,OAAO;AAAA,YACL,WAAW,CAAC2C,GAAyBZ,MACnCD;AAAA,cAAsCC;AAAA,cAAS,CAACa,MAC9C3C,EAAe,KAAKwC,EAAS,CAAC,GAAIG,CAAK;AAAA,YAAA;AAAA,UACzC;AAAA,UAEJ,OAAO;AAAA,YACL,WAAW,CAACA,GAAwBb,MAAY;;AAC9C,oBAAMzB,IAAUmC,EAASV,EAAQ,eAAeU,EAAS,MAAM;AAE/D,sBAAI5B,IAAAP,EAAQ,WAAR,QAAAO,EAAgB,wBACXgC,EAAuB,OAAOD,CAAK,GAAGb,EAAQ,QAAQ,IAAI,IAE5D9B,EAAe,KAAKK,GAASsC,CAAK;AAAA,YAC3C;AAAA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,MAEF,SAAS;AAAA,QACP,WAAW;AAAA,UACT,OAAO,CAACb,MAAY;;AAClB,kBAAMe,KAAQjC,IAAAkB,EAAQ,CAAC,MAAT,gBAAAlB,EAAY;AAC1B,mBAAOZ,EAAe,KAAKG,GAAW0C,CAAK;AAAA,UAC7C;AAAA,UAEA,OAAO,CAACf,MAAY;;AAClB,kBAAMzB,IAAUmC,EAASV,EAAQ,eAAeU,EAAS,MAAM,GACzDM,IAAMhB,EAAQ,KAEdiB,IAAiB/C,EAAe,KAAKG,GAAW2B,EAAQ,QAAQ,KAAK,KAAK,IAC1EkB,IAAehD,EAAe,KAAKK,GAASyC,CAAG;AAErD,gBAAIG,IAAa;AACjB,oBAAIrC,IAAAP,EAAQ,WAAR,QAAAO,EAAgB,0BAClBqC,IAAa,IAAIL,EAAuBE,GAAKhB,EAAQ,QAAQ,IAAI,CAAC,MAE7D,GAAGiB,CAAc,KAAKC,CAAY,IAAIC,CAAU;AAAA,UACzD;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,QAAQ;AAAA,MACN,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACN,MAAU;AACnB,gBAAIF;AACF,qBAAOzC,EAAe,KAAKwC,EAAS,CAAC,GAAIG,CAAK;AAGhD,gBAAI,CAACzC,KAAQ,CAACA,EAAK,OAAQ;AAE3B,kBAAM2C,IAAQ3C,EAAK,OAAO,OAAOyC,CAAK,CAAC;AAEvC,mBAAO3C,EAAe,KAAKG,GAAW0C,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,MAEF,GAAG;AAAA,QACD,OAAO;AAAA,UACL,UAAU,CAACF,MAAU;AACnB,gBAAI,CAACF;AACH,qBAAOzC,EAAe,KAAKwC,EAAS,CAAC,GAAIG,CAAK;AAEhD,gBAAI,CAACzC,KAAQ,CAACA,EAAK,OAAQ;AAC3B,kBAAM2C,IAAQ3C,EAAK,OAAO,OAAOyC,CAAK,CAAC;AACvC,mBAAO3C,EAAe,KAAKG,GAAW0C,CAAK;AAAA,UAC7C;AAAA,QAAA;AAAA,MACF;AAAA,IACF;AAAA,IAEF,SAAS,CAACK,GAAQC,GAAUC,MAAU;;AACpC,UAAI,CAACb,EAAc;AAEnB,YAAMc,IAAUF,EAAS,CAAC,GACpBG,IAAsBD,IAAUD,EAAM,KAAK,OAAQC,EAAQ,KAAK,IAAI,MAGpEE,IACJF,KACKzC,IAAAwC,EAAM,KAAK,SAASC,EAAQ,YAAY,MAAxC,gBAAAzC,EAA4E,WAC7E;AAGN,MAAA2B,EAAa;AAAA,QACX,oBAAAe;AAAA,QACA,wBAAAC;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"bars.utils-CG7i6UTJ.js","sources":["../src/components/charts/bars/bars.utils.ts"],"sourcesContent":["import { CUBE_DIMENSION_TYPE_TIME, DataResponse, Dimension, Measure } from '@embeddable.com/core';\nimport { Theme } from '../../../theme/theme.types';\nimport { remarkableTheme } from '../../../theme/theme.constants';\nimport { ChartData, ChartOptions } from 'chart.js';\nimport { getThemeFormatter } from '../../../theme/formatter/formatter.utils';\nimport { getDatalabelPercentage, groupTailAsOther } from '../charts.utils';\nimport { getDimensionMeasureColor } from '../../../theme/styles/styles.utils';\nimport { getChartColors } from '@embeddable.com/remarkable-ui';\nimport { Context } from 'chartjs-plugin-datalabels';\n\nexport const getBarStackedChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n groupDimension: Dimension;\n measure: Measure;\n axisOrder?: string[];\n },\n theme: Theme,\n): ChartData<'bar'> => {\n const themeFormatter = getThemeFormatter(theme);\n const { data = [], dimension, groupDimension, measure } = props;\n\n const uniqueAxis = [...new Set(data.map((d) => d[dimension.name]).filter((d) => d != null))];\n uniqueAxis.sort();\n\n const axis = props.axisOrder ? props.axisOrder.filter((v) => uniqueAxis.includes(v)) : uniqueAxis;\n const groupDimensionName = `${groupDimension.name}${groupDimension.nativeType === CUBE_DIMENSION_TYPE_TIME && groupDimension.inputs?.granularity ? `.${groupDimension.inputs.granularity}` : ''}`;\n const groupBy = [...new Set(data.map((d) => d[groupDimensionName]))].filter((d) => d != null);\n\n const chartColors = getChartColors();\n const datasets = groupBy.map((groupByItem, index) => {\n const backgroundColor = getDimensionMeasureColor({\n dimensionOrMeasure: groupDimension,\n theme,\n color: 'background',\n value: `${groupDimension.name}.${groupByItem}`,\n index,\n chartColors,\n });\n\n const borderColor = getDimensionMeasureColor({\n dimensionOrMeasure: groupDimension,\n theme,\n color: 'border',\n value: `${groupDimension.name}.${groupByItem}`,\n index,\n chartColors,\n });\n\n return {\n label: themeFormatter.data(groupDimension, groupByItem),\n rawLabel: groupByItem,\n backgroundColor,\n borderColor,\n data: axis.map((axisItem) => {\n const record = data.find(\n (d) => d[groupDimensionName] === groupByItem && d[dimension.name] === axisItem,\n );\n return record ? Number(record[measure.name]) : 0;\n }),\n };\n });\n\n return {\n labels: axis,\n datasets,\n };\n};\n\nexport const getBarChartProData = (\n props: {\n data: DataResponse['data'];\n dimension: Dimension;\n measures: Measure[];\n maxItems?: number;\n },\n theme: Theme = remarkableTheme,\n): ChartData<'bar'> => {\n if (!props.data) {\n return {\n labels: [],\n datasets: [{ data: [] }],\n };\n }\n\n const themeFormatter = getThemeFormatter(theme);\n const groupedData = groupTailAsOther(props.data, props.dimension, props.measures, props.maxItems);\n const chartColors = getChartColors();\n\n return {\n labels: groupedData.map((item) => {\n return item[props.dimension.name];\n }),\n datasets: props.measures.map((measure, index) => {\n const backgroundColor = getDimensionMeasureColor({\n dimensionOrMeasure: measure,\n theme,\n color: 'background',\n value: measure.name,\n index,\n chartColors,\n });\n\n const borderColor = getDimensionMeasureColor({\n dimensionOrMeasure: measure,\n theme,\n color: 'border',\n value: measure.name,\n index,\n chartColors,\n });\n\n return {\n label: themeFormatter.dimensionOrMeasureTitle(measure),\n data: groupedData.map((item) => item[measure.name] ?? 0),\n backgroundColor,\n borderColor,\n };\n }),\n };\n};\n\nconst getBarChartProDatalabelTotalFormatter = (\n context: Context,\n formatter: (value: number) => string,\n) => {\n const { datasets } = context.chart.data;\n const i = context.dataIndex;\n\n const total = datasets.reduce((sum, ds) => {\n const val = ds.data[i] as number;\n return sum + (val || 0);\n }, 0);\n\n return formatter(total);\n};\n\nexport const getBarChartProOptions = (\n options: {\n onBarClicked?: (args: {\n axisDimensionValue: string | null;\n groupingDimensionValue: string | null;\n }) => void;\n measures: Measure[];\n dimension: Dimension;\n horizontal: boolean;\n data: ChartData<'bar'>;\n },\n theme: Theme,\n): Partial<ChartOptions<'bar'>> => {\n const { onBarClicked, measures, dimension, horizontal, data } = options;\n\n const themeFormatter = getThemeFormatter(theme);\n return {\n plugins: {\n legend: { position: theme.charts.legendPosition ?? 'bottom' },\n datalabels: {\n labels: {\n total: {\n formatter: (_value: string | number, context: Context) =>\n getBarChartProDatalabelTotalFormatter(context, (value: number) =>\n themeFormatter.data(measures[0]!, value),\n ),\n },\n value: {\n formatter: (value: string | number, context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n\n if (measure.inputs?.showValueAsPercentage) {\n return getDatalabelPercentage(Number(value), context.dataset.data);\n }\n return themeFormatter.data(measure, value);\n },\n },\n },\n },\n tooltip: {\n callbacks: {\n title: (context) => {\n const label = context[0]?.label;\n return themeFormatter.data(dimension, label);\n },\n\n label: (context) => {\n const measure = measures[context.datasetIndex % measures.length]!;\n const raw = context.raw as number;\n\n const dimensionLabel = themeFormatter.data(dimension, context.dataset.label) || '';\n const measureValue = themeFormatter.data(measure, raw);\n\n let percentage = '';\n if (measure.inputs?.showValueAsPercentage) {\n percentage = `(${getDatalabelPercentage(raw, context.dataset.data)})`;\n }\n return `${dimensionLabel}: ${measureValue} ${percentage}`;\n },\n },\n },\n },\n scales: {\n x: {\n ticks: {\n callback: (value) => {\n if (horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n\n if (!data || !data.labels) return undefined;\n\n const label = data.labels[Number(value)] as string;\n\n return themeFormatter.data(dimension, label);\n },\n },\n },\n y: {\n ticks: {\n callback: (value) => {\n if (!horizontal) {\n return themeFormatter.data(measures[0]!, value);\n }\n if (!data || !data.labels) return undefined;\n const label = data.labels[Number(value)] as string;\n return themeFormatter.data(dimension, label);\n },\n },\n },\n },\n onClick: (_event, elements, chart) => {\n if (!onBarClicked) return;\n\n const element = elements[0];\n const axisDimensionValue = (element ? chart.data.labels![element.index] : null) as\n | string\n | null;\n const groupingDimensionValue = (\n element\n ? (chart.data.datasets[element.datasetIndex] as { rawLabel?: string | null })?.rawLabel\n : null\n ) as string | null;\n\n onBarClicked({\n axisDimensionValue,\n groupingDimensionValue,\n });\n },\n };\n};\n"],"names":["getBarStackedChartProData","props","theme","themeFormatter","getThemeFormatter","data","dimension","groupDimension","measure","uniqueAxis","d","axis","v","groupDimensionName","CUBE_DIMENSION_TYPE_TIME","_a","groupBy","chartColors","getChartColors","datasets","groupByItem","index","backgroundColor","getDimensionMeasureColor","borderColor","axisItem","record","getBarChartProData","remarkableTheme","groupedData","groupTailAsOther","item","getBarChartProDatalabelTotalFormatter","context","formatter","i","total","sum","ds","val","getBarChartProOptions","options","onBarClicked","measures","horizontal","_value","value","getDatalabelPercentage","label","raw","dimensionLabel","measureValue","percentage","_event","elements","chart","element","axisDimensionValue","groupingDimensionValue"],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { d as s, u as j } from "./utc-CeNUjiDo.js";
|
|
2
|
+
import { i as B, q as C } from "./quarterOfYear-DG6zAl_Q.js";
|
|
3
|
+
import { w as E } from "./index-CJYh9LRs.js";
|
|
4
|
+
import { useTheme as M } from "@embeddable.com/react";
|
|
5
|
+
import { useMemo as W } from "react";
|
|
6
|
+
import { d as Z } from "./component.inputs.constants-C7tJAhsQ.js";
|
|
7
|
+
var O = { exports: {} }, b = O.exports, G;
|
|
8
|
+
function z() {
|
|
9
|
+
return G || (G = 1, (function(h, d) {
|
|
10
|
+
(function(r, t) {
|
|
11
|
+
h.exports = t();
|
|
12
|
+
})(b, (function() {
|
|
13
|
+
return function(r, t) {
|
|
14
|
+
t.prototype.isSameOrBefore = function(u, o) {
|
|
15
|
+
return this.isSame(u, o) || this.isBefore(u, o);
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
}));
|
|
19
|
+
})(O)), O.exports;
|
|
20
|
+
}
|
|
21
|
+
var L = z();
|
|
22
|
+
const N = /* @__PURE__ */ E(L);
|
|
23
|
+
s.extend(j);
|
|
24
|
+
s.extend(B);
|
|
25
|
+
s.extend(N);
|
|
26
|
+
s.extend(C);
|
|
27
|
+
function P(h) {
|
|
28
|
+
const d = M(), { results: r, dimension: t, orderDirection: u = "asc", externalDateBounds: o } = h;
|
|
29
|
+
return W(() => {
|
|
30
|
+
var k, w, q, I, R, V, F;
|
|
31
|
+
const f = (k = t.inputs) == null ? void 0 : k.granularity, n = t.name, a = (w = t.inputs) == null ? void 0 : w.dateBounds, $ = Z.map(
|
|
32
|
+
(e) => e.value
|
|
33
|
+
);
|
|
34
|
+
if (!f || !$.includes(f) || !n || !r || r.isLoading || ((q = r.data) == null ? void 0 : q.length) === 0)
|
|
35
|
+
return r;
|
|
36
|
+
const c = a != null && a.relativeTimeString ? (I = d.defaults.dateRangesOptions.find((e) => e.value === (a == null ? void 0 : a.relativeTimeString))) == null ? void 0 : I.getRange(d.clientContext.timezone) : a;
|
|
37
|
+
if (t.nativeType !== "time") return r;
|
|
38
|
+
const l = [...(r == null ? void 0 : r.data) ?? []].sort((e, i) => {
|
|
39
|
+
const m = e[n], p = i[n];
|
|
40
|
+
return m == null ? 1 : p == null ? -1 : s.utc(m).diff(s.utc(p));
|
|
41
|
+
}), x = s.utc(
|
|
42
|
+
(o == null ? void 0 : o.from) ?? (c == null ? void 0 : c.from) ?? ((R = l[0]) == null ? void 0 : R[n])
|
|
43
|
+
), y = s.utc(
|
|
44
|
+
(o == null ? void 0 : o.to) ?? (c == null ? void 0 : c.to) ?? ((V = l[l.length - 1]) == null ? void 0 : V[n]) ?? ((F = [...l].reverse().find((e) => (e == null ? void 0 : e[n]) != null)) == null ? void 0 : F[n])
|
|
45
|
+
);
|
|
46
|
+
if (!x.isValid() || !y.isValid())
|
|
47
|
+
return { ...r, data: [] };
|
|
48
|
+
const v = /* @__PURE__ */ new Map();
|
|
49
|
+
for (const e of l) {
|
|
50
|
+
const i = e[n];
|
|
51
|
+
if (i == null) continue;
|
|
52
|
+
const m = s.utc(i).toISOString().split("Z")[0], p = v.get(m) ?? [];
|
|
53
|
+
p.push(e), v.set(m, p);
|
|
54
|
+
}
|
|
55
|
+
const g = [];
|
|
56
|
+
let S = x.startOf(f === "week" ? "isoWeek" : f);
|
|
57
|
+
for (; S.isSameOrBefore(y); ) {
|
|
58
|
+
const e = S.toISOString().split("Z")[0], i = v.get(e);
|
|
59
|
+
i && i.length > 0 ? g.push(...i) : g.push({ [n]: e }), S = S.add(1, f);
|
|
60
|
+
}
|
|
61
|
+
return u === "desc" && g.reverse(), {
|
|
62
|
+
...r,
|
|
63
|
+
data: g
|
|
64
|
+
};
|
|
65
|
+
}, [r, t, u, d]);
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
P as u
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=charts.fillGaps.hooks-B6T9882L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.fillGaps.hooks-B6T9882L.js","sources":["../node_modules/dayjs/plugin/isSameOrBefore.js","../src/components/charts/charts.fillGaps.hooks.ts"],"sourcesContent":["!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isSameOrBefore=i()}(this,(function(){\"use strict\";return function(e,i){i.prototype.isSameOrBefore=function(e,i){return this.isSame(e,i)||this.isBefore(e,i)}}}));","import { DataResponse, Dimension, TimeRange } from '@embeddable.com/core';\nimport dayjs, { QUnitType } from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport utc from 'dayjs/plugin/utc.js';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore.js';\nimport { Theme } from '../../theme/theme.types';\nimport { useTheme } from '@embeddable.com/react';\nimport { useMemo } from 'react';\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear.js';\nimport { defaultGranularitySelectFieldOptions } from '../../theme/defaults/defaults.GranularityOptions.constants';\n\ndayjs.extend(utc);\ndayjs.extend(isoWeek);\ndayjs.extend(isSameOrBefore);\ndayjs.extend(quarterOfYear);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype DataRecord = { [key: string]: any };\n\ntype UseFillGapsProps = {\n results: DataResponse | undefined;\n dimension: Dimension;\n orderDirection?: 'asc' | 'desc';\n externalDateBounds?: TimeRange;\n};\n\nexport function useFillGaps(props: UseFillGapsProps): DataResponse {\n const theme = useTheme() as Theme;\n const { results, dimension, orderDirection = 'asc', externalDateBounds } = props;\n\n const processed = useMemo(() => {\n const granularity = dimension.inputs?.granularity;\n const dimensionName = dimension.name;\n const dateBoundsTmp: TimeRange = dimension.inputs?.dateBounds;\n\n const knownGranularities = defaultGranularitySelectFieldOptions.map(\n (opt) => opt.value as string,\n );\n\n if (\n !granularity ||\n !knownGranularities.includes(granularity) ||\n !dimensionName ||\n !results ||\n results.isLoading ||\n results.data?.length === 0\n ) {\n return results;\n }\n\n const dateBounds = dateBoundsTmp?.relativeTimeString\n ? theme.defaults.dateRangesOptions\n .find((option) => option.value === dateBoundsTmp?.relativeTimeString)\n ?.getRange(theme.clientContext.timezone)\n : dateBoundsTmp;\n\n if (dimension.nativeType !== 'time') return results;\n\n const sortedResults = [...(results?.data ?? [])].sort((a, b) => {\n const aVal = a[dimensionName];\n const bVal = b[dimensionName];\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n return dayjs.utc(aVal).diff(dayjs.utc(bVal));\n });\n\n // Determine the full date range even if data is empty\n const from = dayjs.utc(\n externalDateBounds?.from ?? dateBounds?.from ?? sortedResults[0]?.[dimensionName],\n );\n\n const to = dayjs.utc(\n externalDateBounds?.to ??\n dateBounds?.to ??\n sortedResults[sortedResults.length - 1]?.[dimensionName] ??\n [...sortedResults].reverse().find((item) => item?.[dimensionName] != null)?.[dimensionName],\n );\n\n // If we *still* don’t have valid date bounds, bail out safely\n if (!from.isValid() || !to.isValid()) {\n return { ...results, data: [] };\n }\n\n const recordsByDate = new Map<string, DataRecord[]>();\n for (const record of sortedResults) {\n const value = record[dimensionName];\n if (value == null) continue;\n const key = dayjs.utc(value).toISOString().split('Z')[0]!;\n const arr = recordsByDate.get(key) ?? [];\n arr.push(record);\n recordsByDate.set(key, arr);\n }\n\n const filled: DataRecord[] = [];\n let current = from.startOf((granularity === 'week' ? 'isoWeek' : granularity) as QUnitType);\n\n while (current.isSameOrBefore(to)) {\n const key = current.toISOString().split('Z')[0]!;\n const records = recordsByDate.get(key);\n\n if (records && records.length > 0) {\n filled.push(...records);\n } else {\n filled.push({ [dimensionName]: key });\n }\n\n current = current.add(1, granularity as QUnitType);\n }\n\n if (orderDirection === 'desc') {\n filled.reverse();\n }\n\n return {\n ...results,\n data: filled,\n };\n }, [results, dimension, orderDirection, theme]);\n\n return processed as DataResponse;\n}\n"],"names":["e","i","module","this","dayjs","utc","isoWeek","isSameOrBefore","quarterOfYear","useFillGaps","props","theme","useTheme","results","dimension","orderDirection","externalDateBounds","useMemo","granularity","_a","dimensionName","dateBoundsTmp","_b","knownGranularities","defaultGranularitySelectFieldOptions","opt","_c","dateBounds","_d","option","sortedResults","a","b","aVal","bVal","from","_e","to","_f","_g","item","recordsByDate","record","value","key","arr","filled","current","records"],"mappings":"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","x_google_ignoreList":[0]}
|