@redsift/dashboard 11.5.0 → 11.6.0-alpha.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/_internal/ChartEmptyState.js +2 -0
- package/_internal/ChartEmptyState.js.map +1 -0
- package/_internal/ChartEmptyState2.js +154 -0
- package/_internal/ChartEmptyState2.js.map +1 -0
- package/_internal/CrossfilterRegistry.js +2 -0
- package/_internal/CrossfilterRegistry.js.map +1 -0
- package/_internal/CrossfilterRegistry2.js +23 -0
- package/_internal/CrossfilterRegistry2.js.map +1 -0
- package/_internal/Dashboard.js +4 -0
- package/_internal/Dashboard.js.map +1 -0
- package/_internal/Dashboard2.js +101 -0
- package/_internal/Dashboard2.js.map +1 -0
- package/_internal/PdfExportButton.js +2 -0
- package/_internal/PdfExportButton.js.map +1 -0
- package/_internal/PdfExportButton2.js +417 -0
- package/_internal/PdfExportButton2.js.map +1 -0
- package/_internal/TimeSeriesBarChart.js +2 -0
- package/_internal/TimeSeriesBarChart.js.map +1 -0
- package/_internal/TimeSeriesBarChart2.js +474 -0
- package/_internal/TimeSeriesBarChart2.js.map +1 -0
- package/_internal/WithFilters.js +2 -0
- package/_internal/WithFilters.js.map +1 -0
- package/_internal/WithFilters2.js +701 -0
- package/_internal/WithFilters2.js.map +1 -0
- package/_internal/context.js +102 -0
- package/_internal/context.js.map +1 -0
- package/_internal/types.js +23 -0
- package/_internal/types.js.map +1 -0
- package/index.js +8 -1949
- package/index.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
import { a as _objectWithoutProperties, _ as _objectSpread2, D as DashboardContext, b as _extends } from './context.js';
|
|
2
|
+
import React, { forwardRef, useRef, useState, useContext, useEffect } from 'react';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { config, barChart, filters, redrawAll, filterAll } from 'dc';
|
|
5
|
+
import { utcParse, timeFormat, isoParse, timeMonth, scaleTime, timeMonths, timeYear, timeYears, timeWeek, timeWeeks, timeDay, timeDays, timeHour, timeHours } from 'd3';
|
|
6
|
+
import { Flexbox, useId, useTheme, Button } from '@redsift/design-system';
|
|
7
|
+
import { ColorTheme, useColor, scheme } from '@redsift/charts';
|
|
8
|
+
import styled, { css } from 'styled-components';
|
|
9
|
+
import { D as DashboardReducerActionType } from './types.js';
|
|
10
|
+
import { C as ChartEmptyState } from './ChartEmptyState2.js';
|
|
11
|
+
import { C as CrossfilterRegistry } from './CrossfilterRegistry2.js';
|
|
12
|
+
|
|
13
|
+
// istanbul ignore file
|
|
14
|
+
/**
|
|
15
|
+
* Component size.
|
|
16
|
+
*/
|
|
17
|
+
const TimeSeriesBarChartSize = {
|
|
18
|
+
large: 'large',
|
|
19
|
+
medium: 'medium',
|
|
20
|
+
small: 'small'
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Component theme.
|
|
24
|
+
*/
|
|
25
|
+
const TimeSeriesBarChartTheme = ColorTheme;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Component props.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
// istanbul ignore file
|
|
32
|
+
/**
|
|
33
|
+
* Component style.
|
|
34
|
+
*/
|
|
35
|
+
const StyledTimeSeriesBarChart = styled.div`
|
|
36
|
+
margin: 16px;
|
|
37
|
+
padding: 16px;
|
|
38
|
+
|
|
39
|
+
text {
|
|
40
|
+
fill: ${_ref => {
|
|
41
|
+
let {
|
|
42
|
+
$theme
|
|
43
|
+
} = _ref;
|
|
44
|
+
return `var(--redsift-color-${$theme}-components-text-primary)`;
|
|
45
|
+
}};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.redsift-timeseries-barchart__chart {
|
|
49
|
+
display: flex;
|
|
50
|
+
font-family: var(--redsift-typography-font-family-poppins);
|
|
51
|
+
font-size: 12px;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
margin: 8px 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
svg > g {
|
|
57
|
+
margin: 8px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.grid-line,
|
|
61
|
+
.axis .grid-line,
|
|
62
|
+
.grid-line line,
|
|
63
|
+
.axis .grid-line line {
|
|
64
|
+
fill: none;
|
|
65
|
+
stroke: #ccc;
|
|
66
|
+
shape-rendering: crispEdges;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.axis text {
|
|
70
|
+
font-family: var(--redsift-typography-font-family-poppins);
|
|
71
|
+
font-size: 10px;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
g.stack rect.bar.deselected {
|
|
75
|
+
fill-opacity: 0.5;
|
|
76
|
+
fill: var(--redsift-color-neutral-mid-grey);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.brush .custom-brush-handle {
|
|
80
|
+
fill: #eee;
|
|
81
|
+
stroke: #666;
|
|
82
|
+
cursor: ew-resize;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
text {
|
|
86
|
+
user-select: none;
|
|
87
|
+
}
|
|
88
|
+
`;
|
|
89
|
+
const StyledTimeSeriesBarChartTitle = styled(Flexbox)`
|
|
90
|
+
font-family: var(--redsift-typography-h4-font-family);
|
|
91
|
+
font-size: var(--redsift-typography-h4-font-size);
|
|
92
|
+
font-weight: var(--redsift-typography-h4-font-weight);
|
|
93
|
+
line-height: var(--redsift-typography-h4-line-height);
|
|
94
|
+
`;
|
|
95
|
+
const StyledTimeSeriesBarChartCaption = styled.p`
|
|
96
|
+
font-family: var(--redsift-typography-caption-font-family);
|
|
97
|
+
font-size: var(--redsift-typography-caption-font-size);
|
|
98
|
+
font-weight: var(--redsift-typography-caption-font-weight);
|
|
99
|
+
line-height: var(--redsift-typography-caption-line-height);
|
|
100
|
+
`;
|
|
101
|
+
const StyledTimeSeriesBarChartContainer = styled.div`
|
|
102
|
+
display: flex;
|
|
103
|
+
align-items: center;
|
|
104
|
+
gap: 16px;
|
|
105
|
+
font-family: var(--redsift-typography-font-family-poppins);
|
|
106
|
+
font-size: 11px;
|
|
107
|
+
justify-content: center;
|
|
108
|
+
margin: 8px 0;
|
|
109
|
+
position: relative;
|
|
110
|
+
|
|
111
|
+
.redsift-timeseries-barchart-container__chart {
|
|
112
|
+
position: relative;
|
|
113
|
+
${_ref2 => {
|
|
114
|
+
let {
|
|
115
|
+
$isEmpty
|
|
116
|
+
} = _ref2;
|
|
117
|
+
return $isEmpty ? css`
|
|
118
|
+
display: none;
|
|
119
|
+
` : '';
|
|
120
|
+
}};
|
|
121
|
+
}
|
|
122
|
+
`;
|
|
123
|
+
|
|
124
|
+
const _excluded = ["areXLabelsRotated", "caption", "className", "colorTheme", "columnToFilter", "data", "dateTimeFieldName", "dateTimeFormat", "dateTimeGroup", "dimension", "isResetable", "localeText", "onFilter", "size", "stackedCategory", "title", "xAxisLabel", "yAxisLabel"];
|
|
125
|
+
const COMPONENT_NAME = 'TimeSeriesBarChart';
|
|
126
|
+
const CLASSNAME = 'redsift-timeseries-barchart';
|
|
127
|
+
const getStartDate = dates => new Date(Math.min(...dates.map(Number)));
|
|
128
|
+
const getEndDate = dates => new Date(Math.max(...dates.map(Number)));
|
|
129
|
+
const sizeToDimension = size => {
|
|
130
|
+
switch (size) {
|
|
131
|
+
case TimeSeriesBarChartSize.small:
|
|
132
|
+
return {
|
|
133
|
+
width: 400,
|
|
134
|
+
height: 200,
|
|
135
|
+
marginLeft: 16,
|
|
136
|
+
marginTop: 16,
|
|
137
|
+
marginRight: 16,
|
|
138
|
+
marginBottom: 32
|
|
139
|
+
};
|
|
140
|
+
case TimeSeriesBarChartSize.large:
|
|
141
|
+
return {
|
|
142
|
+
width: 1000,
|
|
143
|
+
height: 300,
|
|
144
|
+
marginLeft: 16,
|
|
145
|
+
marginTop: 16,
|
|
146
|
+
marginRight: 16,
|
|
147
|
+
marginBottom: 32
|
|
148
|
+
};
|
|
149
|
+
case TimeSeriesBarChartSize.medium:
|
|
150
|
+
default:
|
|
151
|
+
return {
|
|
152
|
+
width: 600,
|
|
153
|
+
height: 250,
|
|
154
|
+
marginLeft: 16,
|
|
155
|
+
marginTop: 16,
|
|
156
|
+
marginRight: 16,
|
|
157
|
+
marginBottom: 32
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const parseDateTimeGroup = (data, dateTimeGroup, dateTimeFieldName) => {
|
|
162
|
+
const dates = [...data.map(d => new Date(d[dateTimeFieldName]))];
|
|
163
|
+
const startDate = getStartDate(dates);
|
|
164
|
+
const endDate = getEndDate(dates);
|
|
165
|
+
switch (dateTimeGroup) {
|
|
166
|
+
case 'hour':
|
|
167
|
+
return {
|
|
168
|
+
group: g => timeHour(g),
|
|
169
|
+
round: x => timeHour(x),
|
|
170
|
+
x: scaleTime().domain([timeHour.offset(startDate, -1), timeHour.offset(endDate, 2)]),
|
|
171
|
+
xUnits: timeHours
|
|
172
|
+
};
|
|
173
|
+
case 'day':
|
|
174
|
+
return {
|
|
175
|
+
group: g => timeDay(g),
|
|
176
|
+
round: x => timeDay(x),
|
|
177
|
+
x: scaleTime().domain([timeDay.offset(startDate, -1), timeDay.offset(endDate, 2)]),
|
|
178
|
+
xUnits: timeDays
|
|
179
|
+
};
|
|
180
|
+
case 'week':
|
|
181
|
+
return {
|
|
182
|
+
group: g => timeWeek(g),
|
|
183
|
+
round: x => timeWeek(x),
|
|
184
|
+
x: scaleTime().domain([timeWeek.offset(startDate, -1), timeWeek.offset(endDate, 2)]),
|
|
185
|
+
xUnits: timeWeeks
|
|
186
|
+
};
|
|
187
|
+
case 'year':
|
|
188
|
+
return {
|
|
189
|
+
group: g => timeYear(g),
|
|
190
|
+
round: x => timeYear(x),
|
|
191
|
+
x: scaleTime().domain([timeYear.offset(startDate, -2), timeYear.offset(endDate, 2)]),
|
|
192
|
+
xUnits: timeYears
|
|
193
|
+
};
|
|
194
|
+
case 'month':
|
|
195
|
+
default:
|
|
196
|
+
return {
|
|
197
|
+
group: g => timeMonth(g),
|
|
198
|
+
round: x => timeMonth(x),
|
|
199
|
+
x: scaleTime().domain([timeMonth.offset(startDate, -1), timeMonth.offset(endDate, 2)]),
|
|
200
|
+
xUnits: timeMonths
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
const TimeSeriesBarChart = /*#__PURE__*/forwardRef((props, ref) => {
|
|
205
|
+
const containerRef = ref || useRef();
|
|
206
|
+
const chartRef = useRef();
|
|
207
|
+
const [id] = useId();
|
|
208
|
+
const [chart, setChart] = useState();
|
|
209
|
+
const {
|
|
210
|
+
areXLabelsRotated,
|
|
211
|
+
caption,
|
|
212
|
+
className,
|
|
213
|
+
colorTheme = props.stackedCategory ? TimeSeriesBarChartTheme.default : TimeSeriesBarChartTheme.monochrome,
|
|
214
|
+
columnToFilter,
|
|
215
|
+
data: propsData,
|
|
216
|
+
dateTimeFieldName,
|
|
217
|
+
dateTimeFormat = '%Y-%m-%d %H:%M:%S',
|
|
218
|
+
dateTimeGroup = 'month',
|
|
219
|
+
dimension,
|
|
220
|
+
isResetable = true,
|
|
221
|
+
localeText,
|
|
222
|
+
onFilter,
|
|
223
|
+
size = TimeSeriesBarChartSize.medium,
|
|
224
|
+
stackedCategory,
|
|
225
|
+
title,
|
|
226
|
+
xAxisLabel,
|
|
227
|
+
yAxisLabel
|
|
228
|
+
} = props,
|
|
229
|
+
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
230
|
+
const theme = useTheme();
|
|
231
|
+
|
|
232
|
+
// Get overriden labels and texts.
|
|
233
|
+
const {
|
|
234
|
+
emptyChartTitle,
|
|
235
|
+
emptyChartSubtitle,
|
|
236
|
+
emptyChartResetLabel,
|
|
237
|
+
resetLabel
|
|
238
|
+
} = _objectSpread2({
|
|
239
|
+
resetLabel: 'Reset'
|
|
240
|
+
}, localeText);
|
|
241
|
+
|
|
242
|
+
// Get charts dimensions based on the selected size.
|
|
243
|
+
const chartDimensions = sizeToDimension(size);
|
|
244
|
+
|
|
245
|
+
// Get ndx from context or initialize it.
|
|
246
|
+
const {
|
|
247
|
+
dispatch,
|
|
248
|
+
state,
|
|
249
|
+
data
|
|
250
|
+
} = useContext(DashboardContext);
|
|
251
|
+
const {
|
|
252
|
+
tableFilters
|
|
253
|
+
} = state;
|
|
254
|
+
|
|
255
|
+
// Set color scheme.
|
|
256
|
+
const colorScale = useColor({
|
|
257
|
+
data: propsData !== null && propsData !== void 0 ? propsData : data,
|
|
258
|
+
colorTheme: colorTheme,
|
|
259
|
+
category: stackedCategory !== null && stackedCategory !== void 0 ? stackedCategory : '',
|
|
260
|
+
theme
|
|
261
|
+
});
|
|
262
|
+
const ndx = CrossfilterRegistry.get(propsData ? propsData : data);
|
|
263
|
+
|
|
264
|
+
// useEffect called only once to initialize the chart.
|
|
265
|
+
useEffect(() => {
|
|
266
|
+
if (chartRef.current) {
|
|
267
|
+
config.defaultColors(scheme.default);
|
|
268
|
+
const parseTime = utcParse(dateTimeFormat);
|
|
269
|
+
const barChart$1 = barChart(chartRef.current);
|
|
270
|
+
const dataset = ndx.all();
|
|
271
|
+
|
|
272
|
+
// Get time methods based on props
|
|
273
|
+
const {
|
|
274
|
+
group,
|
|
275
|
+
round,
|
|
276
|
+
x,
|
|
277
|
+
xUnits
|
|
278
|
+
} = parseDateTimeGroup(dataset, dateTimeGroup, dateTimeFieldName);
|
|
279
|
+
|
|
280
|
+
// Compute dimension and group.
|
|
281
|
+
const computedDimension = ndx.dimension(d => parseTime(dimension(d)));
|
|
282
|
+
const timeGroup = computedDimension.group(group);
|
|
283
|
+
|
|
284
|
+
// Initialize the chart.
|
|
285
|
+
barChart$1.width(chartDimensions.width).height(chartDimensions.height - (areXLabelsRotated ? 30 : 0)).dimension(computedDimension).x(x).xUnits(xUnits).round(round).centerBar(true).alwaysUseRounding(true).renderHorizontalGridLines(true).margins({
|
|
286
|
+
left: chartDimensions.marginLeft + (yAxisLabel ? 24 : 0),
|
|
287
|
+
top: chartDimensions.marginTop,
|
|
288
|
+
right: chartDimensions.marginRight,
|
|
289
|
+
bottom: chartDimensions.marginBottom
|
|
290
|
+
}).barPadding(0.2);
|
|
291
|
+
barChart$1.yAxis().ticks(5);
|
|
292
|
+
|
|
293
|
+
// Add label to axis.
|
|
294
|
+
if (xAxisLabel) {
|
|
295
|
+
barChart$1.xAxisLabel(xAxisLabel);
|
|
296
|
+
}
|
|
297
|
+
if (yAxisLabel) {
|
|
298
|
+
barChart$1.yAxisLabel(yAxisLabel);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Rotate labels and reset the height, if asked for.
|
|
302
|
+
if (areXLabelsRotated) {
|
|
303
|
+
barChart$1.on('pretransition', rowChart => {
|
|
304
|
+
barChart$1.select('.axis').attr('text-anchor', 'end').selectAll('text').attr('transform', 'translate(-6,5) rotate(-45)');
|
|
305
|
+
rowChart.select('svg').attr('height', chartDimensions.height);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Set group whether the chart is stacked or not.
|
|
310
|
+
if (!stackedCategory) {
|
|
311
|
+
barChart$1.group(timeGroup).colors(colorScale);
|
|
312
|
+
} else if (dataset.length) {
|
|
313
|
+
if (!Array.isArray(dataset[0][stackedCategory])) {
|
|
314
|
+
const categories = dataset.reduce((acc, curr) => {
|
|
315
|
+
if (acc.indexOf(curr[stackedCategory]) === -1) {
|
|
316
|
+
acc.push(curr[stackedCategory]);
|
|
317
|
+
}
|
|
318
|
+
return acc;
|
|
319
|
+
}, []);
|
|
320
|
+
const stackedTimeGroup = timeGroup.reduce((p, v) => {
|
|
321
|
+
p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) + 1;
|
|
322
|
+
return p;
|
|
323
|
+
}, (p, v) => {
|
|
324
|
+
p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) - 1;
|
|
325
|
+
return p;
|
|
326
|
+
}, () => ({}));
|
|
327
|
+
barChart$1.group(stackedTimeGroup, categories[0],
|
|
328
|
+
// @ts-expect-error
|
|
329
|
+
(cat => d => d.value[cat])(categories[0])).colors(colorScale);
|
|
330
|
+
for (var i = 1; i < categories.length; ++i) {
|
|
331
|
+
barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
|
|
332
|
+
}
|
|
333
|
+
} else {
|
|
334
|
+
const categories = dataset.reduce((acc, curr) => {
|
|
335
|
+
curr[stackedCategory].forEach(val => {
|
|
336
|
+
if (acc.indexOf(val) === -1) {
|
|
337
|
+
acc.push(val);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
return acc;
|
|
341
|
+
}, []);
|
|
342
|
+
const stackedTimeGroup = timeGroup.reduce((p, v) => {
|
|
343
|
+
v[stackedCategory].forEach(val => {
|
|
344
|
+
p[val] = (p[val] || 0) + 1;
|
|
345
|
+
});
|
|
346
|
+
return p;
|
|
347
|
+
}, (p, v) => {
|
|
348
|
+
v[stackedCategory].forEach(val => {
|
|
349
|
+
p[val] = (p[val] || 0) - 1;
|
|
350
|
+
});
|
|
351
|
+
return p;
|
|
352
|
+
}, () => ({}));
|
|
353
|
+
barChart$1.group(stackedTimeGroup, categories[0],
|
|
354
|
+
// @ts-expect-error
|
|
355
|
+
(cat => d => d.value[cat])(categories[0])).colors(colorScale);
|
|
356
|
+
for (var i = 1; i < categories.length; ++i) {
|
|
357
|
+
barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Dispatch filters to datagrid when a value is selected or unselected.
|
|
363
|
+
const formatTime = timeFormat('%Y-%m-%dT%H:%M');
|
|
364
|
+
barChart$1.on('filtered', () => {
|
|
365
|
+
if (columnToFilter) {
|
|
366
|
+
var _barChart$filters;
|
|
367
|
+
const dateArray = (_barChart$filters = barChart$1.filters()) === null || _barChart$filters === void 0 ? void 0 : _barChart$filters[0];
|
|
368
|
+
if (Array.isArray(dateArray) && dateArray.length === 2) {
|
|
369
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
370
|
+
type: DashboardReducerActionType.FilterTableBatch,
|
|
371
|
+
filter: [{
|
|
372
|
+
id: `${barChart$1.anchorName()}-start`,
|
|
373
|
+
field: columnToFilter,
|
|
374
|
+
operator: 'after',
|
|
375
|
+
value: formatTime(dateArray[0])
|
|
376
|
+
}, {
|
|
377
|
+
id: `${barChart$1.anchorName()}-end`,
|
|
378
|
+
field: columnToFilter,
|
|
379
|
+
operator: 'onOrBefore',
|
|
380
|
+
value: formatTime(dateArray[1])
|
|
381
|
+
}]
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
onFilter === null || onFilter === void 0 ? void 0 : onFilter(barChart$1.filters(), ndx.allFiltered());
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// Render the chart.
|
|
389
|
+
barChart$1.render();
|
|
390
|
+
|
|
391
|
+
// Store chart for further use.
|
|
392
|
+
setChart(barChart$1);
|
|
393
|
+
}
|
|
394
|
+
}, [propsData, data]);
|
|
395
|
+
|
|
396
|
+
// Filter chart if context is updated by an external component.
|
|
397
|
+
const filterStart = tableFilters.find(filter => filter.field === columnToFilter && filter.operator === 'after');
|
|
398
|
+
const filterEnd = tableFilters.find(filter => filter.field === columnToFilter && filter.operator === 'onOrBefore');
|
|
399
|
+
useEffect(() => {
|
|
400
|
+
if (chart && filterStart && filterEnd && filterStart.value && filterEnd.value) {
|
|
401
|
+
const chartFiltersObj = chart.filters();
|
|
402
|
+
const chartFilters = chartFiltersObj === null || chartFiltersObj === void 0 ? void 0 : chartFiltersObj[0];
|
|
403
|
+
const chartFilterStart = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[0];
|
|
404
|
+
const chartFilterEnd = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[1];
|
|
405
|
+
if (chartFilterStart !== isoParse(filterStart.value) && chartFilterEnd !== isoParse(filterEnd.value)) {
|
|
406
|
+
var _d3isoParse, _d3isoParse2;
|
|
407
|
+
chart.filter(null);
|
|
408
|
+
chart.filter(filters.RangedFilter(((_d3isoParse = isoParse(filterStart.value)) === null || _d3isoParse === void 0 ? void 0 : _d3isoParse.getTime()) || 0, ((_d3isoParse2 = isoParse(filterEnd.value)) === null || _d3isoParse2 === void 0 ? void 0 : _d3isoParse2.getTime()) || 0));
|
|
409
|
+
redrawAll();
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}, [filterStart === null || filterStart === void 0 ? void 0 : filterStart.value, filterEnd === null || filterEnd === void 0 ? void 0 : filterEnd.value]);
|
|
413
|
+
return /*#__PURE__*/React.createElement(StyledTimeSeriesBarChart, _extends({}, forwardedProps, {
|
|
414
|
+
className: classNames(TimeSeriesBarChart.className, className),
|
|
415
|
+
ref: containerRef,
|
|
416
|
+
$theme: theme
|
|
417
|
+
}), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartTitle, {
|
|
418
|
+
className: `${TimeSeriesBarChart.className}__title`,
|
|
419
|
+
alignItems: "center",
|
|
420
|
+
$theme: theme
|
|
421
|
+
}, title ? /*#__PURE__*/React.createElement("div", {
|
|
422
|
+
id: `id${id}__title`
|
|
423
|
+
}, title) : null, chart && isResetable ? /*#__PURE__*/React.createElement(Button, {
|
|
424
|
+
variant: "unstyled",
|
|
425
|
+
onClick: () => {
|
|
426
|
+
chart.filter(null);
|
|
427
|
+
redrawAll();
|
|
428
|
+
if (columnToFilter) {
|
|
429
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
430
|
+
type: DashboardReducerActionType.ResetFilter,
|
|
431
|
+
filter: {
|
|
432
|
+
id: `${chart.anchorName()}-start`,
|
|
433
|
+
field: columnToFilter,
|
|
434
|
+
operator: 'after'
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
438
|
+
type: DashboardReducerActionType.ResetFilter,
|
|
439
|
+
filter: {
|
|
440
|
+
id: `${chart.anchorName()}-end`,
|
|
441
|
+
field: columnToFilter,
|
|
442
|
+
operator: 'onOrBefore'
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}, resetLabel) : null), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartContainer, {
|
|
448
|
+
className: `${TimeSeriesBarChart.className}__container`,
|
|
449
|
+
$isEmpty: ndx.all().length === 0
|
|
450
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
451
|
+
className: `${TimeSeriesBarChart.className}-container__chart`,
|
|
452
|
+
ref: chartRef
|
|
453
|
+
}), ndx.all().length === 0 ? /*#__PURE__*/React.createElement(ChartEmptyState, {
|
|
454
|
+
title: emptyChartTitle,
|
|
455
|
+
subtitle: emptyChartSubtitle,
|
|
456
|
+
resetLabel: emptyChartResetLabel,
|
|
457
|
+
onReset: () => {
|
|
458
|
+
filterAll();
|
|
459
|
+
redrawAll();
|
|
460
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
461
|
+
type: DashboardReducerActionType.ResetFilters
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
}) : null), caption ? /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartCaption, {
|
|
465
|
+
className: `${TimeSeriesBarChart.className}__caption`,
|
|
466
|
+
id: `id${id}__caption`,
|
|
467
|
+
$theme: theme
|
|
468
|
+
}, caption) : null);
|
|
469
|
+
});
|
|
470
|
+
TimeSeriesBarChart.className = CLASSNAME;
|
|
471
|
+
TimeSeriesBarChart.displayName = COMPONENT_NAME;
|
|
472
|
+
|
|
473
|
+
export { TimeSeriesBarChart as T, TimeSeriesBarChartSize as a, TimeSeriesBarChartTheme as b };
|
|
474
|
+
//# sourceMappingURL=TimeSeriesBarChart2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSeriesBarChart2.js","sources":["../../src/components/TimeSeriesBarChart/types.ts","../../src/components/TimeSeriesBarChart/styles.ts","../../src/components/TimeSeriesBarChart/TimeSeriesBarChart.tsx"],"sourcesContent":["// istanbul ignore file\n\nimport { ComponentProps } from 'react';\nimport { Theme, ValueOf } from '@redsift/design-system';\nimport { ColorTheme, DimensionSelector, JSONArray } from '../../types';\n\ntype SuccessDangerColorTheme = {\n success: string;\n warning: string;\n danger: string;\n neutral?: string;\n};\n\n/**\n * Component size.\n */\nexport const TimeSeriesBarChartSize = {\n large: 'large',\n medium: 'medium',\n small: 'small',\n} as const;\nexport type TimeSeriesBarChartSize = ValueOf<typeof TimeSeriesBarChartSize>;\n\n/**\n * Component theme.\n */\nexport const TimeSeriesBarChartTheme = ColorTheme;\nexport type TimeSeriesBarChartTheme = ValueOf<typeof TimeSeriesBarChartTheme>;\n\nexport type datetimeEnum = 'hour' | 'day' | 'week' | 'month' | 'year';\n\ninterface LocaleText {\n emptyChartTitle?: string;\n emptyChartSubtitle?: string;\n emptyChartResetLabel?: string;\n resetLabel?: string;\n}\n\n/**\n * Component props.\n */\nexport interface TimeSeriesBarChartProps extends ComponentProps<'div'> {\n /** Caption. */\n caption?: string;\n /** Whether the x axis labels are rotated or not. */\n areXLabelsRotated?: boolean;\n /** Field value of the DataGrid column to filter. */\n columnToFilter?: string;\n /** Dataset to use to generate the chart, if no context is provided. */\n data?: JSONArray;\n /** Name of the dataset field that contains the datetime value. */\n dateTimeFieldName: string;\n /** Format used for the date and time values in the dataset by d3.js. Should follow https://github.com/d3/d3-time-format#locale_format. */\n dateTimeFormat?: string;\n /** Datetime unit to used to group values and for x units. */\n dateTimeGroup?: datetimeEnum;\n /** Method that will be used by crossfilter to compute the dimensions of the charts. */\n dimension: DimensionSelector;\n /** Whether the reset button is hidden or not. */\n isResetable?: boolean;\n /** Overriden values for internal labels and texts. */\n localeText?: LocaleText;\n /** Method to call when a filter occured on the chart. */\n onFilter?: (filters?: string[], allFiltered?: JSONArray) => void;\n /** TimeSeriesChart size. */\n size?: TimeSeriesBarChartSize;\n /** Color palette to use. You can choose among the list of available color palette or also choose to use the success/warning/danger theme for which you have to specify which key corresponds to which status. */\n colorTheme?: TimeSeriesBarChartTheme | SuccessDangerColorTheme;\n /** Title. */\n title?: string;\n /** Dataset key to use to stack values. */\n stackedCategory?: string;\n /** X Axis Label. */\n xAxisLabel?: string;\n /** Y Axis Label. */\n yAxisLabel?: string;\n}\n\nexport type StyledTimeSeriesBarChartProps = Omit<TimeSeriesBarChartProps, 'dimension' | 'dateTimeFieldName'> & {\n $theme: Theme;\n};\n","// istanbul ignore file\n\nimport styled, { css } from 'styled-components';\nimport { Flexbox } from '@redsift/design-system';\nimport { StyledTimeSeriesBarChartProps } from './types';\n\n/**\n * Component style.\n */\nexport const StyledTimeSeriesBarChart = styled.div<StyledTimeSeriesBarChartProps>`\n margin: 16px;\n padding: 16px;\n\n text {\n fill: ${({ $theme }) => `var(--redsift-color-${$theme}-components-text-primary)`};\n }\n\n .redsift-timeseries-barchart__chart {\n display: flex;\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 12px;\n justify-content: center;\n margin: 8px 0;\n }\n\n svg > g {\n margin: 8px;\n }\n\n .grid-line,\n .axis .grid-line,\n .grid-line line,\n .axis .grid-line line {\n fill: none;\n stroke: #ccc;\n shape-rendering: crispEdges;\n }\n\n .axis text {\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 10px;\n }\n\n g.stack rect.bar.deselected {\n fill-opacity: 0.5;\n fill: var(--redsift-color-neutral-mid-grey);\n }\n\n .brush .custom-brush-handle {\n fill: #eee;\n stroke: #666;\n cursor: ew-resize;\n }\n\n text {\n user-select: none;\n }\n`;\n\nexport const StyledTimeSeriesBarChartTitle = styled(Flexbox)<StyledTimeSeriesBarChartProps>`\n font-family: var(--redsift-typography-h4-font-family);\n font-size: var(--redsift-typography-h4-font-size);\n font-weight: var(--redsift-typography-h4-font-weight);\n line-height: var(--redsift-typography-h4-line-height);\n`;\n\nexport const StyledTimeSeriesBarChartCaption = styled.p<StyledTimeSeriesBarChartProps>`\n font-family: var(--redsift-typography-caption-font-family);\n font-size: var(--redsift-typography-caption-font-size);\n font-weight: var(--redsift-typography-caption-font-weight);\n line-height: var(--redsift-typography-caption-line-height);\n`;\n\nexport const StyledTimeSeriesBarChartContainer = styled.div<{\n $isEmpty: boolean;\n}>`\n display: flex;\n align-items: center;\n gap: 16px;\n font-family: var(--redsift-typography-font-family-poppins);\n font-size: 11px;\n justify-content: center;\n margin: 8px 0;\n position: relative;\n\n .redsift-timeseries-barchart-container__chart {\n position: relative;\n ${({ $isEmpty }) =>\n $isEmpty\n ? css`\n display: none;\n `\n : ''};\n }\n`;\n","// istanbul ignore file\n\nimport React, { forwardRef, RefObject, useContext, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport {\n config as dcconfig,\n filterAll as dcfilterAll,\n filters as dcfilters,\n redrawAll as dcredrawAll,\n barChart as dcbarChart,\n BarChart as dcBarChart,\n UnitFunction as dcUnitFunction,\n} from 'dc';\nimport {\n scaleTime as d3scaleTime,\n timeFormat as d3timeFormat,\n isoParse as d3isoParse,\n utcParse as d3utcParse,\n timeHour as d3timeHour,\n timeHours as d3timeHours,\n timeDay as d3timeDay,\n timeDays as d3timeDays,\n timeWeek as d3timeWeek,\n timeWeeks as d3timeWeeks,\n timeMonth as d3timeMonth,\n timeMonths as d3timeMonths,\n timeYear as d3timeYear,\n timeYears as d3timeYears,\n} from 'd3';\n\nimport { Button, Comp, useId, useTheme } from '@redsift/design-system';\nimport { scheme, useColor } from '@redsift/charts';\n\nimport { DashboardContext, DashboardReducerActionType } from '../Dashboard';\nimport { TimeSeriesBarChartProps, TimeSeriesBarChartSize, TimeSeriesBarChartTheme } from './types';\nimport { JSONObject, JSONArray } from '../../types';\nimport {\n StyledTimeSeriesBarChart,\n StyledTimeSeriesBarChartCaption,\n StyledTimeSeriesBarChartTitle,\n StyledTimeSeriesBarChartContainer,\n} from './styles';\nimport { GridFilterItem } from '@redsift/table';\nimport { ChartEmptyState } from '../ChartEmptyState';\nimport { CrossfilterRegistry } from '../CrossfilterRegistry';\n\nconst COMPONENT_NAME = 'TimeSeriesBarChart';\nconst CLASSNAME = 'redsift-timeseries-barchart';\n\ntype ChartDimensions = {\n width: number;\n height: number;\n marginTop?: number;\n marginRight?: number;\n marginBottom?: number;\n marginLeft?: number;\n};\n\nconst getStartDate = (dates: Date[]) => new Date(Math.min(...dates.map(Number)));\nconst getEndDate = (dates: Date[]) => new Date(Math.max(...dates.map(Number)));\n\nconst sizeToDimension = (size: TimeSeriesBarChartSize): ChartDimensions => {\n switch (size) {\n case TimeSeriesBarChartSize.small:\n return {\n width: 400,\n height: 200,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n case TimeSeriesBarChartSize.large:\n return {\n width: 1000,\n height: 300,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n case TimeSeriesBarChartSize.medium:\n default:\n return {\n width: 600,\n height: 250,\n marginLeft: 16,\n marginTop: 16,\n marginRight: 16,\n marginBottom: 32,\n };\n }\n};\n\nconst parseDateTimeGroup = (\n data: JSONArray,\n dateTimeGroup: TimeSeriesBarChartProps['dateTimeGroup'],\n dateTimeFieldName: string\n) => {\n const dates = [...data.map((d: (typeof data)[number]) => new Date(d[dateTimeFieldName] as string))];\n const startDate = getStartDate(dates);\n const endDate = getEndDate(dates);\n\n switch (dateTimeGroup) {\n case 'hour':\n return {\n group: (g: Date) => d3timeHour(g),\n round: (x: Date) => d3timeHour(x),\n x: d3scaleTime().domain([d3timeHour.offset(startDate, -1), d3timeHour.offset(endDate, 2)]),\n xUnits: d3timeHours,\n };\n case 'day':\n return {\n group: (g: Date) => d3timeDay(g),\n round: (x: Date) => d3timeDay(x),\n x: d3scaleTime().domain([d3timeDay.offset(startDate, -1), d3timeDay.offset(endDate, 2)]),\n xUnits: d3timeDays,\n };\n case 'week':\n return {\n group: (g: Date) => d3timeWeek(g),\n round: (x: Date) => d3timeWeek(x),\n x: d3scaleTime().domain([d3timeWeek.offset(startDate, -1), d3timeWeek.offset(endDate, 2)]),\n xUnits: d3timeWeeks,\n };\n case 'year':\n return {\n group: (g: Date) => d3timeYear(g),\n round: (x: Date) => d3timeYear(x),\n x: d3scaleTime().domain([d3timeYear.offset(startDate, -2), d3timeYear.offset(endDate, 2)]),\n xUnits: d3timeYears,\n };\n case 'month':\n default:\n return {\n group: (g: Date) => d3timeMonth(g),\n round: (x: Date) => d3timeMonth(x),\n x: d3scaleTime().domain([d3timeMonth.offset(startDate, -1), d3timeMonth.offset(endDate, 2)]),\n xUnits: d3timeMonths,\n };\n }\n};\n\nexport const TimeSeriesBarChart: Comp<TimeSeriesBarChartProps, HTMLDivElement> = forwardRef((props, ref) => {\n const containerRef = (ref || useRef<HTMLDivElement>()) as RefObject<HTMLDivElement>;\n const chartRef = useRef<HTMLDivElement>() as RefObject<HTMLDivElement>;\n\n const [id] = useId();\n const [chart, setChart] = useState<dcBarChart>();\n\n const {\n areXLabelsRotated,\n caption,\n className,\n colorTheme = props.stackedCategory ? TimeSeriesBarChartTheme.default : TimeSeriesBarChartTheme.monochrome,\n columnToFilter,\n data: propsData,\n dateTimeFieldName,\n dateTimeFormat = '%Y-%m-%d %H:%M:%S',\n dateTimeGroup = 'month',\n dimension,\n isResetable = true,\n localeText,\n onFilter,\n size = TimeSeriesBarChartSize.medium,\n stackedCategory,\n title,\n xAxisLabel,\n yAxisLabel,\n ...forwardedProps\n } = props;\n const theme = useTheme();\n\n // Get overriden labels and texts.\n const { emptyChartTitle, emptyChartSubtitle, emptyChartResetLabel, resetLabel } = {\n resetLabel: 'Reset',\n ...localeText,\n };\n\n // Get charts dimensions based on the selected size.\n const chartDimensions = sizeToDimension(size!);\n\n // Get ndx from context or initialize it.\n const { dispatch, state, data } = useContext(DashboardContext);\n const { tableFilters } = state;\n\n // Set color scheme.\n const colorScale = useColor({\n data: propsData ?? data,\n colorTheme: colorTheme!,\n category: stackedCategory ?? '',\n theme,\n });\n\n const ndx = CrossfilterRegistry.get(propsData ? propsData : data);\n\n // useEffect called only once to initialize the chart.\n useEffect(() => {\n if (chartRef.current) {\n dcconfig.defaultColors(scheme.default);\n const parseTime = d3utcParse(dateTimeFormat!);\n const barChart = dcbarChart(chartRef.current as any);\n const dataset = ndx.all();\n\n // Get time methods based on props\n const { group, round, x, xUnits } = parseDateTimeGroup(dataset as JSONArray, dateTimeGroup, dateTimeFieldName);\n\n // Compute dimension and group.\n const computedDimension = ndx.dimension((d: JSONArray) => parseTime(dimension(d) as string) as Date);\n const timeGroup = computedDimension.group(group);\n\n // Initialize the chart.\n barChart\n .width(chartDimensions.width)\n .height(chartDimensions.height - (areXLabelsRotated ? 30 : 0))\n .dimension(computedDimension)\n .x(x)\n .xUnits(xUnits as dcUnitFunction)\n .round(round)\n .centerBar(true)\n .alwaysUseRounding(true)\n .renderHorizontalGridLines(true)\n .margins({\n left: chartDimensions.marginLeft! + (yAxisLabel ? 24 : 0),\n top: chartDimensions.marginTop!,\n right: chartDimensions.marginRight!,\n bottom: chartDimensions.marginBottom!,\n })\n .barPadding(0.2);\n\n barChart.yAxis().ticks(5);\n\n // Add label to axis.\n if (xAxisLabel) {\n barChart.xAxisLabel(xAxisLabel);\n }\n if (yAxisLabel) {\n barChart.yAxisLabel(yAxisLabel);\n }\n\n // Rotate labels and reset the height, if asked for.\n if (areXLabelsRotated) {\n barChart.on('pretransition', (rowChart) => {\n barChart\n .select('.axis')\n .attr('text-anchor', 'end')\n .selectAll('text')\n .attr('transform', 'translate(-6,5) rotate(-45)');\n rowChart.select('svg').attr('height', chartDimensions.height);\n });\n }\n\n // Set group whether the chart is stacked or not.\n if (!stackedCategory) {\n barChart.group(timeGroup).colors(colorScale as any);\n } else if (dataset.length) {\n if (!Array.isArray(dataset[0][stackedCategory])) {\n const categories = dataset.reduce((acc: string[], curr: JSONObject) => {\n if (acc.indexOf(curr[stackedCategory] as string) === -1) {\n acc.push(curr[stackedCategory] as string);\n }\n return acc;\n }, []);\n const stackedTimeGroup = timeGroup.reduce(\n (p, v) => {\n (p as JSONObject)[v[stackedCategory]] = (((p as JSONObject)[v[stackedCategory]] as number) || 0) + 1;\n return p;\n },\n (p, v) => {\n (p as JSONObject)[v[stackedCategory]] = (((p as JSONObject)[v[stackedCategory]] as number) || 0) - 1;\n return p;\n },\n () => ({})\n );\n barChart\n .group(\n stackedTimeGroup,\n categories[0], // @ts-expect-error\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[0])\n )\n .colors(colorScale as any);\n for (var i = 1; i < categories.length; ++i) {\n barChart.stack(\n stackedTimeGroup,\n categories[i],\n (\n (cat) => (d) =>\n d.value[cat]\n )(categories[i])\n );\n }\n } else {\n const categories = dataset.reduce((acc: string[], curr: JSONObject) => {\n (curr[stackedCategory] as string[]).forEach((val: string) => {\n if (acc.indexOf(val) === -1) {\n acc.push(val);\n }\n });\n return acc;\n }, []);\n const stackedTimeGroup = timeGroup.reduce(\n (p, v) => {\n v[stackedCategory].forEach((val: string) => {\n (p as JSONObject)[val] = (((p as JSONObject)[val] as number) || 0) + 1;\n });\n return p;\n },\n (p, v) => {\n v[stackedCategory].forEach((val: string) => {\n (p as JSONObject)[val] = (((p as JSONObject)[val] as number) || 0) - 1;\n });\n return p;\n },\n () => ({})\n );\n barChart\n .group(\n stackedTimeGroup,\n categories[0], // @ts-expect-error\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[0])\n )\n .colors(colorScale as any);\n for (var i = 1; i < categories.length; ++i) {\n barChart.stack(\n stackedTimeGroup,\n categories[i],\n (\n (cat) => (d: { key: Date; value: { [key: string]: number } }) =>\n d.value[cat]\n )(categories[i])\n );\n }\n }\n }\n\n // Dispatch filters to datagrid when a value is selected or unselected.\n const formatTime = d3timeFormat('%Y-%m-%dT%H:%M');\n barChart.on('filtered', () => {\n if (columnToFilter) {\n const dateArray = barChart.filters()?.[0];\n if (Array.isArray(dateArray) && dateArray.length === 2) {\n dispatch?.({\n type: DashboardReducerActionType.FilterTableBatch,\n filter: [\n {\n id: `${barChart.anchorName()}-start`,\n field: columnToFilter,\n operator: 'after',\n value: formatTime(dateArray[0]),\n },\n {\n id: `${barChart.anchorName()}-end`,\n field: columnToFilter,\n operator: 'onOrBefore',\n value: formatTime(dateArray[1]),\n },\n ],\n });\n }\n }\n\n onFilter?.(barChart.filters(), ndx.allFiltered());\n });\n\n // Render the chart.\n barChart.render();\n\n // Store chart for further use.\n setChart(barChart);\n }\n }, [propsData, data]);\n\n // Filter chart if context is updated by an external component.\n const filterStart = tableFilters.find((filter) => filter.field === columnToFilter && filter.operator === 'after');\n const filterEnd = tableFilters.find((filter) => filter.field === columnToFilter && filter.operator === 'onOrBefore');\n useEffect(() => {\n if (chart && filterStart && filterEnd && filterStart.value && filterEnd.value) {\n const chartFiltersObj = chart.filters();\n const chartFilters = chartFiltersObj?.[0];\n const chartFilterStart = chartFilters?.[0];\n const chartFilterEnd = chartFilters?.[1];\n if (chartFilterStart !== d3isoParse(filterStart.value) && chartFilterEnd !== d3isoParse(filterEnd.value)) {\n chart.filter(null);\n chart.filter(\n dcfilters.RangedFilter(\n d3isoParse(filterStart.value)?.getTime() || 0,\n d3isoParse(filterEnd.value)?.getTime() || 0\n )\n );\n dcredrawAll();\n }\n }\n }, [filterStart?.value, filterEnd?.value]);\n\n return (\n <StyledTimeSeriesBarChart\n {...forwardedProps}\n className={classNames(TimeSeriesBarChart.className, className)}\n ref={containerRef as RefObject<HTMLDivElement>}\n $theme={theme}\n >\n <StyledTimeSeriesBarChartTitle\n className={`${TimeSeriesBarChart.className}__title`}\n alignItems=\"center\"\n $theme={theme}\n >\n {title ? <div id={`id${id}__title`}>{title}</div> : null}\n {chart && isResetable ? (\n <Button\n variant=\"unstyled\"\n onClick={() => {\n chart.filter(null);\n dcredrawAll();\n\n if (columnToFilter) {\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${chart.anchorName()}-start`,\n field: columnToFilter,\n operator: 'after',\n } as GridFilterItem,\n });\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${chart.anchorName()}-end`,\n field: columnToFilter,\n operator: 'onOrBefore',\n } as GridFilterItem,\n });\n }\n }}\n >\n {resetLabel}\n </Button>\n ) : null}\n </StyledTimeSeriesBarChartTitle>\n\n <StyledTimeSeriesBarChartContainer\n className={`${TimeSeriesBarChart.className}__container`}\n $isEmpty={ndx.all().length === 0}\n >\n <div\n className={`${TimeSeriesBarChart.className}-container__chart`}\n ref={chartRef as RefObject<HTMLDivElement>}\n />\n {ndx.all().length === 0 ? (\n <ChartEmptyState\n title={emptyChartTitle!}\n subtitle={emptyChartSubtitle}\n resetLabel={emptyChartResetLabel}\n onReset={() => {\n dcfilterAll();\n dcredrawAll();\n dispatch?.({\n type: DashboardReducerActionType.ResetFilters,\n });\n }}\n />\n ) : null}\n </StyledTimeSeriesBarChartContainer>\n\n {caption ? (\n <StyledTimeSeriesBarChartCaption\n className={`${TimeSeriesBarChart.className}__caption`}\n id={`id${id}__caption`}\n $theme={theme}\n >\n {caption}\n </StyledTimeSeriesBarChartCaption>\n ) : null}\n </StyledTimeSeriesBarChart>\n );\n});\nTimeSeriesBarChart.className = CLASSNAME;\nTimeSeriesBarChart.displayName = COMPONENT_NAME;\n"],"names":["TimeSeriesBarChartSize","large","medium","small","TimeSeriesBarChartTheme","ColorTheme","StyledTimeSeriesBarChart","styled","div","_ref","$theme","StyledTimeSeriesBarChartTitle","Flexbox","StyledTimeSeriesBarChartCaption","p","StyledTimeSeriesBarChartContainer","_ref2","$isEmpty","css","COMPONENT_NAME","CLASSNAME","getStartDate","dates","Date","Math","min","map","Number","getEndDate","max","sizeToDimension","size","width","height","marginLeft","marginTop","marginRight","marginBottom","parseDateTimeGroup","data","dateTimeGroup","dateTimeFieldName","d","startDate","endDate","group","g","d3timeHour","round","x","d3scaleTime","domain","offset","xUnits","d3timeHours","d3timeDay","d3timeDays","d3timeWeek","d3timeWeeks","d3timeYear","d3timeYears","d3timeMonth","d3timeMonths","TimeSeriesBarChart","forwardRef","props","ref","containerRef","useRef","chartRef","id","useId","chart","setChart","useState","areXLabelsRotated","caption","className","colorTheme","stackedCategory","default","monochrome","columnToFilter","propsData","dateTimeFormat","dimension","isResetable","localeText","onFilter","title","xAxisLabel","yAxisLabel","forwardedProps","_objectWithoutProperties","_excluded","theme","useTheme","emptyChartTitle","emptyChartSubtitle","emptyChartResetLabel","resetLabel","_objectSpread","chartDimensions","dispatch","state","useContext","DashboardContext","tableFilters","colorScale","useColor","category","ndx","CrossfilterRegistry","get","useEffect","current","dcconfig","defaultColors","scheme","parseTime","d3utcParse","barChart","dcbarChart","dataset","all","computedDimension","timeGroup","centerBar","alwaysUseRounding","renderHorizontalGridLines","margins","left","top","right","bottom","barPadding","yAxis","ticks","on","rowChart","select","attr","selectAll","colors","length","Array","isArray","categories","reduce","acc","curr","indexOf","push","stackedTimeGroup","v","cat","value","i","stack","forEach","val","formatTime","d3timeFormat","_barChart$filters","dateArray","filters","type","DashboardReducerActionType","FilterTableBatch","filter","anchorName","field","operator","allFiltered","render","filterStart","find","filterEnd","chartFiltersObj","chartFilters","chartFilterStart","chartFilterEnd","d3isoParse","_d3isoParse","_d3isoParse2","dcfilters","RangedFilter","getTime","dcredrawAll","React","createElement","_extends","classNames","alignItems","Button","variant","onClick","ResetFilter","ChartEmptyState","subtitle","onReset","dcfilterAll","ResetFilters","displayName"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WithFilters.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|