@iotready/nextjs-components-library 1.0.0-preview6 → 1.0.0-preview8

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.
@@ -23,7 +23,7 @@ import MuiTooltip from '@mui/material/Tooltip';
23
23
  const lineOptions = {
24
24
  parsing: false,
25
25
  normalized: true,
26
- spanGaps: false, // enable for all datasets
26
+ spanGaps: true, // enable for all datasets
27
27
  // showLine: false, // disable for all datasets
28
28
  animation: false,
29
29
  responsive: true,
@@ -121,7 +121,7 @@ const chartConfigByPeriod = {
121
121
  scaleUnit: 'year',
122
122
  }
123
123
  };
124
- function GetPoints(data) {
124
+ function getChartPoints(data) {
125
125
  const points = data.results[0].series[0].values.map((row) => {
126
126
  return {
127
127
  x: moment.unix(row[0]),
@@ -198,7 +198,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
198
198
  const [loadingButton, setLoadingButton] = useState(false);
199
199
  const csvLinkRef = useRef(null);
200
200
  const [csvData, setCsvData] = useState('');
201
- const [spanGapsOption, setSpanGapsOption] = useState(false);
201
+ const [spanGapsOption, setSpanGapsOption] = useState(true);
202
202
  const [options, setOptions] = useState({
203
203
  ...lineOptions,
204
204
  plugins: {
@@ -222,6 +222,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
222
222
  }
223
223
  });
224
224
  const [zoomed, setZoomed] = useState(false);
225
+ const prevMeasures = useRef();
225
226
  const resetChart = () => {
226
227
  setOptions({
227
228
  ...options,
@@ -245,6 +246,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
245
246
  setSpanGapsOption(spanG);
246
247
  };
247
248
  const handleChange = (event, newPeriod) => {
249
+ setChartLoading(true);
248
250
  setZoomed(false);
249
251
  setDatePickerUsed(false);
250
252
  setCsvData('');
@@ -277,14 +279,13 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
277
279
  }
278
280
  }, [csvData]);
279
281
  const loadDatasets = async (chartPeriod) => {
280
- setChartLoading(true);
281
282
  let intervalInSeconds = chartPeriod === "ALL" && !datePickerUsed && !zoomed ? 31536000 : timeEnd - timeStart;
282
283
  const rawQuery = intervalInSeconds < 86400; //
283
284
  // Inizializza un array di promesse per ottenere i dati per ciascuna misura
284
285
  const datasetsPromises = measures.map(async (measure) => {
285
286
  const polltime = getPollTime(intervalInSeconds, measure.polltime || 30);
286
287
  const influxData = await handleGetInfluxData(measure.name, timeStart, timeEnd, deviceId, polltime, !measure.polltime && rawQuery);
287
- const points = GetPoints(influxData);
288
+ const points = getChartPoints(influxData);
288
289
  return {
289
290
  label: measure.name,
290
291
  data: points,
@@ -368,10 +369,17 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
368
369
  newChartPeriod = '1Y'; // Set to 1 year
369
370
  }
370
371
  setChartPeriodConfig(chartConfigByPeriod[newChartPeriod]);
372
+ // check prev measures value in order to show the loader
373
+ // hide the loader if measure is the same (for interval get measure value)
374
+ const prevMeasuresValue = prevMeasures.current;
375
+ prevMeasures.current = measures;
376
+ if (!prevMeasuresValue || prevMeasuresValue.length !== measures.length || (prevMeasuresValue[0] && prevMeasuresValue[0].name !== measures[0].name)) {
377
+ setChartLoading(true);
378
+ }
371
379
  loadDatasets(chartPeriod).then(() => {
372
380
  setChartLoading(false);
373
381
  });
374
- }, [timeEnd, timeStart]);
382
+ }, [measures, timeEnd, timeStart]);
375
383
  useEffect(() => {
376
384
  const loadZoomPlugin = async () => {
377
385
  const zoomPlugin = (await import('chartjs-plugin-zoom')).default;
@@ -401,6 +409,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
401
409
  resetChart();
402
410
  }, []);
403
411
  const datePicker = _jsx(Box, { sx: { display: 'flex', alignItems: 'center', mr: { xs: 0, lg: 2 } }, children: _jsxs(LocalizationProvider, { dateAdapter: AdapterMoment, adapterLocale: "it", children: [_jsx(DateTimePicker, { value: moment(timeStartPicker * 1000), onChange: (newValue) => {
412
+ setChartLoading(true);
404
413
  setDatePickerUsed(true);
405
414
  setZoomed(false);
406
415
  setPickerTimeStart(moment(newValue).unix());
@@ -408,6 +417,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
408
417
  }, maxDateTime: moment(timeEnd * 1000), slotProps: {
409
418
  textField: { size: 'small', sx: { width: { sm: 210 } } }
410
419
  } }), " \u00A0\u00A0 ", _jsx(Box, { children: "\u2013" }), " \u00A0\u00A0", _jsx(DateTimePicker, { value: moment(timeEnd * 1000), onChange: (newValue) => {
420
+ setChartLoading(true);
411
421
  setDatePickerUsed(true);
412
422
  setZoomed(false);
413
423
  setPickerTimeEnd(moment(newValue).unix());
@@ -420,6 +430,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
420
430
  , {
421
431
  //@ts-ignore
422
432
  ref: csvLinkRef, data: csvData, filename: `export_${moment().toISOString()}.csv`, separator: ';' })] })), zoomed && (_jsxs(Button, { sx: { minWidth: '40px !important', boxShadow: 1, px: 1 }, variant: "contained", color: "secondary", size: 'small', onClick: () => {
433
+ setChartLoading(true);
423
434
  setZoomed(false);
424
435
  if (chartPeriod === "ALL") {
425
436
  setDatePickerUsed(false);
@@ -443,10 +454,10 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
443
454
  }, children: [_jsx(ZoomOut, { fontSize: 'small' }), _jsx(Box, { sx: { display: { xs: 'none', lg: 'block' }, ml: { md: 1 } }, children: "Reset" })] }))] }), _jsxs(Box, { sx: { display: 'flex', justifyContent: 'flex-end' }, children: [enableDatePicker && _jsx(Box, { sx: { display: { xs: 'none', lg: 'flex' } }, children: datePicker }), _jsxs(ToggleButtonGroup, { color: "primary", value: !datePickerUsed && !zoomed ? chartPeriod : null, exclusive: true, onChange: handleChange, size: "small",
444
455
  // sx={{ boxShadow: 1 }}
445
456
  disabled: chartLoading, children: [_jsx(ToggleButton, { value: "1D", sx: { px: 1 }, children: "1d" }), _jsx(ToggleButton, { value: "1W", sx: { px: 1 }, children: "1w" }), _jsx(ToggleButton, { value: "1M", sx: { px: 1 }, children: "1M" }), _jsx(ToggleButton, { value: "3M", sx: { px: 1 }, children: "3M" }), _jsx(ToggleButton, { value: "6M", sx: { px: 1 }, children: "6M" }), _jsx(ToggleButton, { value: "1Y", sx: { px: 1 }, children: "1Y" }), _jsx(ToggleButton, { value: "ALL", sx: { px: 1 }, children: "ALL" })] }), _jsx(MuiTooltip, { placement: "top", arrow: true, title: "Connect point values", children: _jsx(ToggleButton, { value: "check", color: "primary", size: "small", selected: spanGapsOption, disabled: chartLoading, onChange: () => handleSpanGaps(!spanGapsOption), sx: { ml: 2 }, children: _jsx(TimelineIcon, {}) }) })] })] }), _jsx(Box, { component: 'div', className: "chart-container", sx: { height: { xs: enableDatePicker && props.height ? `calc(${props.height} - 50px)` : props.height, lg: props.height }, minHeight: 300, mt: 2 }, children: chartJsLoaded && !chartLoading && typeof window !== 'undefined' ?
446
- _jsx(_Fragment, { children: dataMeasures && dataMeasures[0]?.data?.length ?
457
+ _jsx(_Fragment, { children: dataMeasures && (dataMeasures.length > 1 || (dataMeasures.length === 1 && dataMeasures[0].data?.length)) ?
447
458
  (_jsx(Line, { options: options, data: {
448
- datasets: dataMeasures || [{ data: [] }]
449
- // datasets: dataMeasures.map(d => ({ ...d, showLine: spanGapsOption || !d.change })) || [{ data: [] }]
459
+ // datasets: dataMeasures || [{ data: [] }]
460
+ datasets: dataMeasures.map(d => ({ ...d, showLine: spanGapsOption || !d.change })) || [{ data: [] }]
450
461
  } })) : _jsxs(Box, { sx: {
451
462
  display: 'flex',
452
463
  flexDirection: 'column',
@@ -460,7 +471,7 @@ const TrendChart = ({ deviceId, measures, enableExportData, enableDatePicker, ha
460
471
  alignItems: 'center',
461
472
  justifyContent: 'center',
462
473
  textAlign: 'center',
463
- height: '100%'
474
+ height: 'calc(100% - 50px)'
464
475
  }, children: _jsx(CircularProgress, {}) })) })] }));
465
476
  };
466
477
  export default TrendChart;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iotready/nextjs-components-library",
3
- "version": "1.0.0-preview6",
3
+ "version": "1.0.0-preview8",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "build": "rm -rf dist && tsc --project tsconfig.build.json && cp package.json dist/",