@redsift/dashboard 11.6.0-muiv5-alpha.3 → 11.6.0-muiv5-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/_internal/ChartEmptyState.js +3 -0
- package/_internal/ChartEmptyState.js.map +1 -0
- package/{components/ChartEmptyState/types.d.ts → _internal/ChartEmptyState2.js} +4 -1
- package/_internal/ChartEmptyState2.js.map +1 -0
- package/_internal/CrossfilterRegistry.js +9 -0
- package/_internal/CrossfilterRegistry.js.map +1 -0
- package/{components/CrossfilterRegistry/CrossfilterRegistry.js → _internal/CrossfilterRegistry2.js} +2 -2
- package/_internal/CrossfilterRegistry2.js.map +1 -0
- package/_internal/Dashboard.js +7 -0
- package/_internal/Dashboard.js.map +1 -0
- package/{components/Dashboard/reducer.js → _internal/Dashboard2.js} +44 -4
- package/_internal/Dashboard2.js.map +1 -0
- package/_internal/PdfExportButton.js +3 -0
- package/_internal/PdfExportButton.js.map +1 -0
- package/{components/PdfExportButton/types.d.ts → _internal/PdfExportButton2.js} +4 -2
- package/_internal/PdfExportButton2.js.map +1 -0
- package/_internal/TimeSeriesBarChart.js +5 -0
- package/_internal/TimeSeriesBarChart.js.map +1 -0
- package/{components/TimeSeriesBarChart/types.d.ts → _internal/TimeSeriesBarChart2.js} +5 -3
- package/_internal/TimeSeriesBarChart2.js.map +1 -0
- package/_internal/WithFilters.js +4 -0
- package/_internal/WithFilters.js.map +1 -0
- package/{components/WithFilters/types.d.ts → _internal/WithFilters2.js} +5 -3
- package/_internal/WithFilters2.js.map +1 -0
- package/{_virtual/_rollupPluginBabelHelpers.js → _internal/context.js} +11 -2
- package/_internal/context.js.map +1 -0
- package/{components/Dashboard/types.d.ts → _internal/reducer.js} +11 -3
- package/{types.d.ts → _internal/types.js} +1 -1
- package/_internal/types.js.map +1 -0
- package/index.js +19 -12
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/components/ChartEmptyState/ChartEmptyState.d.ts +0 -6
- package/components/ChartEmptyState/ChartEmptyState.js +0 -123
- package/components/ChartEmptyState/ChartEmptyState.js.map +0 -1
- package/components/ChartEmptyState/styles.js +0 -35
- package/components/ChartEmptyState/styles.js.map +0 -1
- package/components/CrossfilterRegistry/CrossfilterRegistry.js.map +0 -1
- package/components/Dashboard/Dashboard.d.ts +0 -6
- package/components/Dashboard/Dashboard.js +0 -46
- package/components/Dashboard/Dashboard.js.map +0 -1
- package/components/Dashboard/context.d.ts +0 -7
- package/components/Dashboard/context.js +0 -11
- package/components/Dashboard/context.js.map +0 -1
- package/components/Dashboard/reducer.d.ts +0 -5
- package/components/Dashboard/reducer.js.map +0 -1
- package/components/Dashboard/types.js +0 -23
- package/components/Dashboard/types.js.map +0 -1
- package/components/PdfExportButton/PdfDocument.js +0 -173
- package/components/PdfExportButton/PdfDocument.js.map +0 -1
- package/components/PdfExportButton/PdfExportButton.d.ts +0 -6
- package/components/PdfExportButton/PdfExportButton.js +0 -110
- package/components/PdfExportButton/PdfExportButton.js.map +0 -1
- package/components/PdfExportButton/styles.js +0 -146
- package/components/PdfExportButton/styles.js.map +0 -1
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.d.ts +0 -6
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.js +0 -365
- package/components/TimeSeriesBarChart/TimeSeriesBarChart.js.map +0 -1
- package/components/TimeSeriesBarChart/styles.js +0 -98
- package/components/TimeSeriesBarChart/styles.js.map +0 -1
- package/components/TimeSeriesBarChart/types.js +0 -22
- package/components/TimeSeriesBarChart/types.js.map +0 -1
- package/components/WithFilters/FilterableBarChart.js +0 -152
- package/components/WithFilters/FilterableBarChart.js.map +0 -1
- package/components/WithFilters/FilterableDataGrid.js +0 -51
- package/components/WithFilters/FilterableDataGrid.js.map +0 -1
- package/components/WithFilters/FilterablePieChart.js +0 -160
- package/components/WithFilters/FilterablePieChart.js.map +0 -1
- package/components/WithFilters/FilterableScatterPlot.js +0 -252
- package/components/WithFilters/FilterableScatterPlot.js.map +0 -1
- package/components/WithFilters/WithFilters.d.ts +0 -6
- package/components/WithFilters/WithFilters.js +0 -36
- package/components/WithFilters/WithFilters.js.map +0 -1
- package/hooks/useCategoricalChartAsListbox.js +0 -94
- package/hooks/useCategoricalChartAsListbox.js.map +0 -1
- package/index.d.ts +0 -15
- package/utils/groupReducers/groupReduceCount.d.ts +0 -6
- package/utils/groupReducers/groupReduceCount.js +0 -5
- package/utils/groupReducers/groupReduceCount.js.map +0 -1
- package/utils/groupReducers/groupReduceSum.d.ts +0 -7
- package/utils/groupReducers/groupReduceSum.js +0 -5
- package/utils/groupReducers/groupReduceSum.js.map +0 -1
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
import { objectWithoutProperties as _objectWithoutProperties, objectSpread2 as _objectSpread2, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.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 { useId, useTheme, Button } from '@redsift/design-system';
|
|
7
|
-
import { useColor, scheme } from '@redsift/charts';
|
|
8
|
-
import { TimeSeriesBarChartTheme, TimeSeriesBarChartSize } from './types.js';
|
|
9
|
-
import { StyledTimeSeriesBarChart, StyledTimeSeriesBarChartTitle, StyledTimeSeriesBarChartContainer, StyledTimeSeriesBarChartCaption } from './styles.js';
|
|
10
|
-
import { DashboardReducerActionType } from '../Dashboard/types.js';
|
|
11
|
-
import { ChartEmptyState } from '../ChartEmptyState/ChartEmptyState.js';
|
|
12
|
-
import { DashboardContext } from '../Dashboard/context.js';
|
|
13
|
-
import { CrossfilterRegistry } from '../CrossfilterRegistry/CrossfilterRegistry.js';
|
|
14
|
-
|
|
15
|
-
const _excluded = ["areXLabelsRotated", "caption", "className", "colorTheme", "columnToFilter", "data", "dateTimeFieldName", "dateTimeFormat", "dateTimeGroup", "dimension", "isResetable", "localeText", "onFilter", "size", "stackedCategory", "title", "xAxisLabel", "yAxisLabel"];
|
|
16
|
-
const COMPONENT_NAME = 'TimeSeriesBarChart';
|
|
17
|
-
const CLASSNAME = 'redsift-timeseries-barchart';
|
|
18
|
-
const getStartDate = dates => new Date(Math.min(...dates.map(Number)));
|
|
19
|
-
const getEndDate = dates => new Date(Math.max(...dates.map(Number)));
|
|
20
|
-
const sizeToDimension = size => {
|
|
21
|
-
switch (size) {
|
|
22
|
-
case TimeSeriesBarChartSize.small:
|
|
23
|
-
return {
|
|
24
|
-
width: 400,
|
|
25
|
-
height: 200,
|
|
26
|
-
marginLeft: 16,
|
|
27
|
-
marginTop: 16,
|
|
28
|
-
marginRight: 16,
|
|
29
|
-
marginBottom: 32
|
|
30
|
-
};
|
|
31
|
-
case TimeSeriesBarChartSize.large:
|
|
32
|
-
return {
|
|
33
|
-
width: 1000,
|
|
34
|
-
height: 300,
|
|
35
|
-
marginLeft: 16,
|
|
36
|
-
marginTop: 16,
|
|
37
|
-
marginRight: 16,
|
|
38
|
-
marginBottom: 32
|
|
39
|
-
};
|
|
40
|
-
case TimeSeriesBarChartSize.medium:
|
|
41
|
-
default:
|
|
42
|
-
return {
|
|
43
|
-
width: 600,
|
|
44
|
-
height: 250,
|
|
45
|
-
marginLeft: 16,
|
|
46
|
-
marginTop: 16,
|
|
47
|
-
marginRight: 16,
|
|
48
|
-
marginBottom: 32
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const parseDateTimeGroup = (data, dateTimeGroup, dateTimeFieldName) => {
|
|
53
|
-
const dates = [...data.map(d => new Date(d[dateTimeFieldName]))];
|
|
54
|
-
const startDate = getStartDate(dates);
|
|
55
|
-
const endDate = getEndDate(dates);
|
|
56
|
-
switch (dateTimeGroup) {
|
|
57
|
-
case 'hour':
|
|
58
|
-
return {
|
|
59
|
-
group: g => timeHour(g),
|
|
60
|
-
round: x => timeHour(x),
|
|
61
|
-
x: scaleTime().domain([timeHour.offset(startDate, -1), timeHour.offset(endDate, 2)]),
|
|
62
|
-
xUnits: timeHours
|
|
63
|
-
};
|
|
64
|
-
case 'day':
|
|
65
|
-
return {
|
|
66
|
-
group: g => timeDay(g),
|
|
67
|
-
round: x => timeDay(x),
|
|
68
|
-
x: scaleTime().domain([timeDay.offset(startDate, -1), timeDay.offset(endDate, 2)]),
|
|
69
|
-
xUnits: timeDays
|
|
70
|
-
};
|
|
71
|
-
case 'week':
|
|
72
|
-
return {
|
|
73
|
-
group: g => timeWeek(g),
|
|
74
|
-
round: x => timeWeek(x),
|
|
75
|
-
x: scaleTime().domain([timeWeek.offset(startDate, -1), timeWeek.offset(endDate, 2)]),
|
|
76
|
-
xUnits: timeWeeks
|
|
77
|
-
};
|
|
78
|
-
case 'year':
|
|
79
|
-
return {
|
|
80
|
-
group: g => timeYear(g),
|
|
81
|
-
round: x => timeYear(x),
|
|
82
|
-
x: scaleTime().domain([timeYear.offset(startDate, -2), timeYear.offset(endDate, 2)]),
|
|
83
|
-
xUnits: timeYears
|
|
84
|
-
};
|
|
85
|
-
case 'month':
|
|
86
|
-
default:
|
|
87
|
-
return {
|
|
88
|
-
group: g => timeMonth(g),
|
|
89
|
-
round: x => timeMonth(x),
|
|
90
|
-
x: scaleTime().domain([timeMonth.offset(startDate, -1), timeMonth.offset(endDate, 2)]),
|
|
91
|
-
xUnits: timeMonths
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
const TimeSeriesBarChart = /*#__PURE__*/forwardRef((props, ref) => {
|
|
96
|
-
const containerRef = ref || useRef();
|
|
97
|
-
const chartRef = useRef();
|
|
98
|
-
const [id] = useId();
|
|
99
|
-
const [chart, setChart] = useState();
|
|
100
|
-
const {
|
|
101
|
-
areXLabelsRotated,
|
|
102
|
-
caption,
|
|
103
|
-
className,
|
|
104
|
-
colorTheme = props.stackedCategory ? TimeSeriesBarChartTheme.default : TimeSeriesBarChartTheme.monochrome,
|
|
105
|
-
columnToFilter,
|
|
106
|
-
data: propsData,
|
|
107
|
-
dateTimeFieldName,
|
|
108
|
-
dateTimeFormat = '%Y-%m-%d %H:%M:%S',
|
|
109
|
-
dateTimeGroup = 'month',
|
|
110
|
-
dimension,
|
|
111
|
-
isResetable = true,
|
|
112
|
-
localeText,
|
|
113
|
-
onFilter,
|
|
114
|
-
size = TimeSeriesBarChartSize.medium,
|
|
115
|
-
stackedCategory,
|
|
116
|
-
title,
|
|
117
|
-
xAxisLabel,
|
|
118
|
-
yAxisLabel
|
|
119
|
-
} = props,
|
|
120
|
-
forwardedProps = _objectWithoutProperties(props, _excluded);
|
|
121
|
-
const theme = useTheme();
|
|
122
|
-
|
|
123
|
-
// Get overriden labels and texts.
|
|
124
|
-
const {
|
|
125
|
-
emptyChartTitle,
|
|
126
|
-
emptyChartSubtitle,
|
|
127
|
-
emptyChartResetLabel,
|
|
128
|
-
resetLabel
|
|
129
|
-
} = _objectSpread2({
|
|
130
|
-
resetLabel: 'Reset'
|
|
131
|
-
}, localeText);
|
|
132
|
-
|
|
133
|
-
// Get charts dimensions based on the selected size.
|
|
134
|
-
const chartDimensions = sizeToDimension(size);
|
|
135
|
-
|
|
136
|
-
// Get ndx from context or initialize it.
|
|
137
|
-
const {
|
|
138
|
-
dispatch,
|
|
139
|
-
state,
|
|
140
|
-
data
|
|
141
|
-
} = useContext(DashboardContext);
|
|
142
|
-
const {
|
|
143
|
-
tableFilters
|
|
144
|
-
} = state;
|
|
145
|
-
|
|
146
|
-
// Set color scheme.
|
|
147
|
-
const colorScale = useColor({
|
|
148
|
-
data: propsData !== null && propsData !== void 0 ? propsData : data,
|
|
149
|
-
colorTheme: colorTheme,
|
|
150
|
-
category: stackedCategory !== null && stackedCategory !== void 0 ? stackedCategory : '',
|
|
151
|
-
theme
|
|
152
|
-
});
|
|
153
|
-
const ndx = CrossfilterRegistry.get(propsData ? propsData : data);
|
|
154
|
-
|
|
155
|
-
// useEffect called only once to initialize the chart.
|
|
156
|
-
useEffect(() => {
|
|
157
|
-
if (chartRef.current) {
|
|
158
|
-
config.defaultColors(scheme.default);
|
|
159
|
-
const parseTime = utcParse(dateTimeFormat);
|
|
160
|
-
const barChart$1 = barChart(chartRef.current);
|
|
161
|
-
const dataset = ndx.all();
|
|
162
|
-
|
|
163
|
-
// Get time methods based on props
|
|
164
|
-
const {
|
|
165
|
-
group,
|
|
166
|
-
round,
|
|
167
|
-
x,
|
|
168
|
-
xUnits
|
|
169
|
-
} = parseDateTimeGroup(dataset, dateTimeGroup, dateTimeFieldName);
|
|
170
|
-
|
|
171
|
-
// Compute dimension and group.
|
|
172
|
-
const computedDimension = ndx.dimension(d => parseTime(dimension(d)));
|
|
173
|
-
const timeGroup = computedDimension.group(group);
|
|
174
|
-
|
|
175
|
-
// Initialize the chart.
|
|
176
|
-
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({
|
|
177
|
-
left: chartDimensions.marginLeft + (yAxisLabel ? 24 : 0),
|
|
178
|
-
top: chartDimensions.marginTop,
|
|
179
|
-
right: chartDimensions.marginRight,
|
|
180
|
-
bottom: chartDimensions.marginBottom
|
|
181
|
-
}).barPadding(0.2);
|
|
182
|
-
barChart$1.yAxis().ticks(5);
|
|
183
|
-
|
|
184
|
-
// Add label to axis.
|
|
185
|
-
if (xAxisLabel) {
|
|
186
|
-
barChart$1.xAxisLabel(xAxisLabel);
|
|
187
|
-
}
|
|
188
|
-
if (yAxisLabel) {
|
|
189
|
-
barChart$1.yAxisLabel(yAxisLabel);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Rotate labels and reset the height, if asked for.
|
|
193
|
-
if (areXLabelsRotated) {
|
|
194
|
-
barChart$1.on('pretransition', rowChart => {
|
|
195
|
-
barChart$1.select('.axis').attr('text-anchor', 'end').selectAll('text').attr('transform', 'translate(-6,5) rotate(-45)');
|
|
196
|
-
rowChart.select('svg').attr('height', chartDimensions.height);
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Set group whether the chart is stacked or not.
|
|
201
|
-
if (!stackedCategory) {
|
|
202
|
-
barChart$1.group(timeGroup).colors(colorScale);
|
|
203
|
-
} else if (dataset.length) {
|
|
204
|
-
if (!Array.isArray(dataset[0][stackedCategory])) {
|
|
205
|
-
const categories = dataset.reduce((acc, curr) => {
|
|
206
|
-
if (acc.indexOf(curr[stackedCategory]) === -1) {
|
|
207
|
-
acc.push(curr[stackedCategory]);
|
|
208
|
-
}
|
|
209
|
-
return acc;
|
|
210
|
-
}, []);
|
|
211
|
-
const stackedTimeGroup = timeGroup.reduce((p, v) => {
|
|
212
|
-
p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) + 1;
|
|
213
|
-
return p;
|
|
214
|
-
}, (p, v) => {
|
|
215
|
-
p[v[stackedCategory]] = (p[v[stackedCategory]] || 0) - 1;
|
|
216
|
-
return p;
|
|
217
|
-
}, () => ({}));
|
|
218
|
-
barChart$1.group(stackedTimeGroup, categories[0],
|
|
219
|
-
// @ts-expect-error
|
|
220
|
-
(cat => d => d.value[cat])(categories[0])).colors(colorScale);
|
|
221
|
-
for (var i = 1; i < categories.length; ++i) {
|
|
222
|
-
barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
|
|
223
|
-
}
|
|
224
|
-
} else {
|
|
225
|
-
const categories = dataset.reduce((acc, curr) => {
|
|
226
|
-
curr[stackedCategory].forEach(val => {
|
|
227
|
-
if (acc.indexOf(val) === -1) {
|
|
228
|
-
acc.push(val);
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
return acc;
|
|
232
|
-
}, []);
|
|
233
|
-
const stackedTimeGroup = timeGroup.reduce((p, v) => {
|
|
234
|
-
v[stackedCategory].forEach(val => {
|
|
235
|
-
p[val] = (p[val] || 0) + 1;
|
|
236
|
-
});
|
|
237
|
-
return p;
|
|
238
|
-
}, (p, v) => {
|
|
239
|
-
v[stackedCategory].forEach(val => {
|
|
240
|
-
p[val] = (p[val] || 0) - 1;
|
|
241
|
-
});
|
|
242
|
-
return p;
|
|
243
|
-
}, () => ({}));
|
|
244
|
-
barChart$1.group(stackedTimeGroup, categories[0],
|
|
245
|
-
// @ts-expect-error
|
|
246
|
-
(cat => d => d.value[cat])(categories[0])).colors(colorScale);
|
|
247
|
-
for (var i = 1; i < categories.length; ++i) {
|
|
248
|
-
barChart$1.stack(stackedTimeGroup, categories[i], (cat => d => d.value[cat])(categories[i]));
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Dispatch filters to datagrid when a value is selected or unselected.
|
|
254
|
-
const formatTime = timeFormat('%Y-%m-%dT%H:%M');
|
|
255
|
-
barChart$1.on('filtered', () => {
|
|
256
|
-
if (columnToFilter) {
|
|
257
|
-
var _barChart$filters;
|
|
258
|
-
const dateArray = (_barChart$filters = barChart$1.filters()) === null || _barChart$filters === void 0 ? void 0 : _barChart$filters[0];
|
|
259
|
-
if (Array.isArray(dateArray) && dateArray.length === 2) {
|
|
260
|
-
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
261
|
-
type: DashboardReducerActionType.FilterTableBatch,
|
|
262
|
-
filter: [{
|
|
263
|
-
id: `${barChart$1.anchorName()}-start`,
|
|
264
|
-
columnField: columnToFilter,
|
|
265
|
-
operatorValue: 'after',
|
|
266
|
-
value: formatTime(dateArray[0])
|
|
267
|
-
}, {
|
|
268
|
-
id: `${barChart$1.anchorName()}-end`,
|
|
269
|
-
columnField: columnToFilter,
|
|
270
|
-
operatorValue: 'onOrBefore',
|
|
271
|
-
value: formatTime(dateArray[1])
|
|
272
|
-
}]
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
onFilter === null || onFilter === void 0 ? void 0 : onFilter(barChart$1.filters(), ndx.allFiltered());
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
// Render the chart.
|
|
280
|
-
barChart$1.render();
|
|
281
|
-
|
|
282
|
-
// Store chart for further use.
|
|
283
|
-
setChart(barChart$1);
|
|
284
|
-
}
|
|
285
|
-
}, [propsData, data]);
|
|
286
|
-
|
|
287
|
-
// Filter chart if context is updated by an external component.
|
|
288
|
-
const filterStart = tableFilters.find(filter => filter.columnField === columnToFilter && filter.operatorValue === 'after');
|
|
289
|
-
const filterEnd = tableFilters.find(filter => filter.columnField === columnToFilter && filter.operatorValue === 'onOrBefore');
|
|
290
|
-
useEffect(() => {
|
|
291
|
-
if (chart && filterStart && filterEnd && filterStart.value && filterEnd.value) {
|
|
292
|
-
const chartFiltersObj = chart.filters();
|
|
293
|
-
const chartFilters = chartFiltersObj === null || chartFiltersObj === void 0 ? void 0 : chartFiltersObj[0];
|
|
294
|
-
const chartFilterStart = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[0];
|
|
295
|
-
const chartFilterEnd = chartFilters === null || chartFilters === void 0 ? void 0 : chartFilters[1];
|
|
296
|
-
if (chartFilterStart !== isoParse(filterStart.value) && chartFilterEnd !== isoParse(filterEnd.value)) {
|
|
297
|
-
var _d3isoParse, _d3isoParse2;
|
|
298
|
-
chart.filter(null);
|
|
299
|
-
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));
|
|
300
|
-
redrawAll();
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}, [filterStart === null || filterStart === void 0 ? void 0 : filterStart.value, filterEnd === null || filterEnd === void 0 ? void 0 : filterEnd.value]);
|
|
304
|
-
return /*#__PURE__*/React.createElement(StyledTimeSeriesBarChart, _extends({}, forwardedProps, {
|
|
305
|
-
className: classNames(TimeSeriesBarChart.className, className),
|
|
306
|
-
ref: containerRef,
|
|
307
|
-
$theme: theme
|
|
308
|
-
}), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartTitle, {
|
|
309
|
-
className: `${TimeSeriesBarChart.className}__title`,
|
|
310
|
-
alignItems: "center",
|
|
311
|
-
$theme: theme
|
|
312
|
-
}, title ? /*#__PURE__*/React.createElement("div", {
|
|
313
|
-
id: `id${id}__title`
|
|
314
|
-
}, title) : null, chart && isResetable ? /*#__PURE__*/React.createElement(Button, {
|
|
315
|
-
variant: "unstyled",
|
|
316
|
-
onClick: () => {
|
|
317
|
-
chart.filter(null);
|
|
318
|
-
redrawAll();
|
|
319
|
-
if (columnToFilter) {
|
|
320
|
-
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
321
|
-
type: DashboardReducerActionType.ResetFilter,
|
|
322
|
-
filter: {
|
|
323
|
-
id: `${chart.anchorName()}-start`,
|
|
324
|
-
columnField: columnToFilter,
|
|
325
|
-
operatorValue: 'after'
|
|
326
|
-
}
|
|
327
|
-
});
|
|
328
|
-
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
329
|
-
type: DashboardReducerActionType.ResetFilter,
|
|
330
|
-
filter: {
|
|
331
|
-
id: `${chart.anchorName()}-end`,
|
|
332
|
-
columnField: columnToFilter,
|
|
333
|
-
operatorValue: 'onOrBefore'
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}, resetLabel) : null), /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartContainer, {
|
|
339
|
-
className: `${TimeSeriesBarChart.className}__container`,
|
|
340
|
-
$isEmpty: ndx.all().length === 0
|
|
341
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
342
|
-
className: `${TimeSeriesBarChart.className}-container__chart`,
|
|
343
|
-
ref: chartRef
|
|
344
|
-
}), ndx.all().length === 0 ? /*#__PURE__*/React.createElement(ChartEmptyState, {
|
|
345
|
-
title: emptyChartTitle,
|
|
346
|
-
subtitle: emptyChartSubtitle,
|
|
347
|
-
resetLabel: emptyChartResetLabel,
|
|
348
|
-
onReset: () => {
|
|
349
|
-
filterAll();
|
|
350
|
-
redrawAll();
|
|
351
|
-
dispatch === null || dispatch === void 0 ? void 0 : dispatch({
|
|
352
|
-
type: DashboardReducerActionType.ResetFilters
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
}) : null), caption ? /*#__PURE__*/React.createElement(StyledTimeSeriesBarChartCaption, {
|
|
356
|
-
className: `${TimeSeriesBarChart.className}__caption`,
|
|
357
|
-
id: `id${id}__caption`,
|
|
358
|
-
$theme: theme
|
|
359
|
-
}, caption) : null);
|
|
360
|
-
});
|
|
361
|
-
TimeSeriesBarChart.className = CLASSNAME;
|
|
362
|
-
TimeSeriesBarChart.displayName = COMPONENT_NAME;
|
|
363
|
-
|
|
364
|
-
export { TimeSeriesBarChart };
|
|
365
|
-
//# sourceMappingURL=TimeSeriesBarChart.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TimeSeriesBarChart.js","sources":["../../../src/components/TimeSeriesBarChart/TimeSeriesBarChart.tsx"],"sourcesContent":["// 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 columnField: columnToFilter,\n operatorValue: 'after',\n value: formatTime(dateArray[0]),\n },\n {\n id: `${barChart.anchorName()}-end`,\n columnField: columnToFilter,\n operatorValue: '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(\n (filter) => filter.columnField === columnToFilter && filter.operatorValue === 'after'\n );\n const filterEnd = tableFilters.find(\n (filter) => filter.columnField === columnToFilter && filter.operatorValue === 'onOrBefore'\n );\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 columnField: columnToFilter,\n operatorValue: 'after',\n } as GridFilterItem,\n });\n dispatch?.({\n type: DashboardReducerActionType.ResetFilter,\n filter: {\n id: `${chart.anchorName()}-end`,\n columnField: columnToFilter,\n operatorValue: '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":["COMPONENT_NAME","CLASSNAME","getStartDate","dates","Date","Math","min","map","Number","getEndDate","max","sizeToDimension","size","TimeSeriesBarChartSize","small","width","height","marginLeft","marginTop","marginRight","marginBottom","large","medium","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","TimeSeriesBarChartTheme","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","p","v","cat","value","i","stack","forEach","val","formatTime","d3timeFormat","_barChart$filters","dateArray","filters","type","DashboardReducerActionType","FilterTableBatch","filter","anchorName","columnField","operatorValue","allFiltered","render","filterStart","find","filterEnd","chartFiltersObj","chartFilters","chartFilterStart","chartFilterEnd","d3isoParse","_d3isoParse","_d3isoParse2","dcfilters","RangedFilter","getTime","dcredrawAll","React","createElement","StyledTimeSeriesBarChart","_extends","classNames","$theme","StyledTimeSeriesBarChartTitle","alignItems","Button","variant","onClick","ResetFilter","StyledTimeSeriesBarChartContainer","$isEmpty","ChartEmptyState","subtitle","onReset","dcfilterAll","ResetFilters","StyledTimeSeriesBarChartCaption","displayName"],"mappings":"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"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import styled, { css } from 'styled-components';
|
|
2
|
-
import { Flexbox } from '@redsift/design-system';
|
|
3
|
-
|
|
4
|
-
// istanbul ignore file
|
|
5
|
-
/**
|
|
6
|
-
* Component style.
|
|
7
|
-
*/
|
|
8
|
-
const StyledTimeSeriesBarChart = styled.div`
|
|
9
|
-
margin: 16px;
|
|
10
|
-
padding: 16px;
|
|
11
|
-
|
|
12
|
-
text {
|
|
13
|
-
fill: ${_ref => {
|
|
14
|
-
let {
|
|
15
|
-
$theme
|
|
16
|
-
} = _ref;
|
|
17
|
-
return `var(--redsift-color-${$theme}-components-text-primary)`;
|
|
18
|
-
}};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.redsift-timeseries-barchart__chart {
|
|
22
|
-
display: flex;
|
|
23
|
-
font-family: var(--redsift-typography-font-family-poppins);
|
|
24
|
-
font-size: 12px;
|
|
25
|
-
justify-content: center;
|
|
26
|
-
margin: 8px 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
svg > g {
|
|
30
|
-
margin: 8px;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.grid-line,
|
|
34
|
-
.axis .grid-line,
|
|
35
|
-
.grid-line line,
|
|
36
|
-
.axis .grid-line line {
|
|
37
|
-
fill: none;
|
|
38
|
-
stroke: #ccc;
|
|
39
|
-
shape-rendering: crispEdges;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.axis text {
|
|
43
|
-
font-family: var(--redsift-typography-font-family-poppins);
|
|
44
|
-
font-size: 10px;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
g.stack rect.bar.deselected {
|
|
48
|
-
fill-opacity: 0.5;
|
|
49
|
-
fill: var(--redsift-color-neutral-mid-grey);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.brush .custom-brush-handle {
|
|
53
|
-
fill: #eee;
|
|
54
|
-
stroke: #666;
|
|
55
|
-
cursor: ew-resize;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
text {
|
|
59
|
-
user-select: none;
|
|
60
|
-
}
|
|
61
|
-
`;
|
|
62
|
-
const StyledTimeSeriesBarChartTitle = styled(Flexbox)`
|
|
63
|
-
font-family: var(--redsift-typography-h4-font-family);
|
|
64
|
-
font-size: var(--redsift-typography-h4-font-size);
|
|
65
|
-
font-weight: var(--redsift-typography-h4-font-weight);
|
|
66
|
-
line-height: var(--redsift-typography-h4-line-height);
|
|
67
|
-
`;
|
|
68
|
-
const StyledTimeSeriesBarChartCaption = styled.p`
|
|
69
|
-
font-family: var(--redsift-typography-caption-font-family);
|
|
70
|
-
font-size: var(--redsift-typography-caption-font-size);
|
|
71
|
-
font-weight: var(--redsift-typography-caption-font-weight);
|
|
72
|
-
line-height: var(--redsift-typography-caption-line-height);
|
|
73
|
-
`;
|
|
74
|
-
const StyledTimeSeriesBarChartContainer = styled.div`
|
|
75
|
-
display: flex;
|
|
76
|
-
align-items: center;
|
|
77
|
-
gap: 16px;
|
|
78
|
-
font-family: var(--redsift-typography-font-family-poppins);
|
|
79
|
-
font-size: 11px;
|
|
80
|
-
justify-content: center;
|
|
81
|
-
margin: 8px 0;
|
|
82
|
-
position: relative;
|
|
83
|
-
|
|
84
|
-
.redsift-timeseries-barchart-container__chart {
|
|
85
|
-
position: relative;
|
|
86
|
-
${_ref2 => {
|
|
87
|
-
let {
|
|
88
|
-
$isEmpty
|
|
89
|
-
} = _ref2;
|
|
90
|
-
return $isEmpty ? css`
|
|
91
|
-
display: none;
|
|
92
|
-
` : '';
|
|
93
|
-
}};
|
|
94
|
-
}
|
|
95
|
-
`;
|
|
96
|
-
|
|
97
|
-
export { StyledTimeSeriesBarChart, StyledTimeSeriesBarChartCaption, StyledTimeSeriesBarChartContainer, StyledTimeSeriesBarChartTitle };
|
|
98
|
-
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../src/components/TimeSeriesBarChart/styles.ts"],"sourcesContent":["// 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"],"names":["StyledTimeSeriesBarChart","styled","div","_ref","$theme","StyledTimeSeriesBarChartTitle","Flexbox","StyledTimeSeriesBarChartCaption","p","StyledTimeSeriesBarChartContainer","_ref2","$isEmpty","css"],"mappings":";;;AAAA;AAMA;AACA;AACA;AACaA,MAAAA,wBAAwB,GAAGC,MAAM,CAACC,GAAmC,CAAA;AAClF;AACA;AACA;AACA;AACA,UAAA,EAAYC,IAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,MAAAA;AAAO,GAAC,GAAAD,IAAA,CAAA;EAAA,OAAM,CAAA,oBAAA,EAAsBC,MAAO,CAA0B,yBAAA,CAAA,CAAA;AAAA,CAAC,CAAA;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC;MAEYC,6BAA6B,GAAGJ,MAAM,CAACK,OAAO,CAAiC,CAAA;AAC5F;AACA;AACA;AACA;AACA,EAAC;AAEYC,MAAAA,+BAA+B,GAAGN,MAAM,CAACO,CAAiC,CAAA;AACvF;AACA;AACA;AACA;AACA,EAAC;AAEYC,MAAAA,iCAAiC,GAAGR,MAAM,CAACC,GAErD,CAAA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAA,EAAMQ,KAAA,IAAA;EAAA,IAAC;AAAEC,IAAAA,QAAAA;AAAS,GAAC,GAAAD,KAAA,CAAA;EAAA,OACbC,QAAQ,GACJC,GAAI,CAAA;AACd;AACA,UAAA,CAAW,GACD,EAAE,CAAA;AAAA,CAAC,CAAA;AACb;AACA;;;;"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ColorTheme } from '@redsift/charts';
|
|
2
|
-
|
|
3
|
-
// istanbul ignore file
|
|
4
|
-
/**
|
|
5
|
-
* Component size.
|
|
6
|
-
*/
|
|
7
|
-
const TimeSeriesBarChartSize = {
|
|
8
|
-
large: 'large',
|
|
9
|
-
medium: 'medium',
|
|
10
|
-
small: 'small'
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Component theme.
|
|
14
|
-
*/
|
|
15
|
-
const TimeSeriesBarChartTheme = ColorTheme;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Component props.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
export { TimeSeriesBarChartSize, TimeSeriesBarChartTheme };
|
|
22
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/components/TimeSeriesBarChart/types.ts"],"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"],"names":["TimeSeriesBarChartSize","large","medium","small","TimeSeriesBarChartTheme","ColorTheme"],"mappings":";;AAAA;AAaA;AACA;AACA;AACO,MAAMA,sBAAsB,GAAG;AACpCC,EAAAA,KAAK,EAAE,OAAO;AACdC,EAAAA,MAAM,EAAE,QAAQ;AAChBC,EAAAA,KAAK,EAAE,OAAA;AACT,EAAU;AAGV;AACA;AACA;AACO,MAAMC,uBAAuB,GAAGC,WAAU;;AAYjD;AACA;AACA;;;;"}
|