Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 

130 rader
2.5 KiB

  1. import { fillArray } from '../utils/helpers';
  2. import { AXIS_CHART_DEFAULT_TYPE, AXIS_CHART_MIXED_TYPE, AXIS_DATASET_CHART_TYPES, DEFAULT_CHAR_WIDTH } from '../utils/constants';
  3. export function dataPrep(data, type) {
  4. data.labels = data.labels || [];
  5. let datasetLength = data.labels.length;
  6. // Datasets
  7. let datasets = data.datasets;
  8. let zeroArray = new Array(datasetLength).fill(0);
  9. if(!datasets) {
  10. // default
  11. datasets = [{
  12. values: zeroArray
  13. }];
  14. }
  15. let overridingType;
  16. if(AXIS_DATASET_CHART_TYPES.includes(type)) {
  17. overridingType = type;
  18. };
  19. datasets.map(d=> {
  20. // Set values
  21. if(!d.values) {
  22. d.values = zeroArray;
  23. } else {
  24. // Check for non values
  25. let vals = d.values;
  26. vals = vals.map(val => (!isNaN(val) ? val : 0));
  27. // Trim or extend
  28. if(vals.length > datasetLength) {
  29. vals = vals.slice(0, datasetLength);
  30. } else {
  31. vals = fillArray(vals, datasetLength - vals.length, 0);
  32. }
  33. }
  34. // Set labels
  35. // Set type
  36. if(overridingType) {
  37. d.chartType = overridingType;
  38. } else if(!d.chartType) {
  39. d.chartType = AXIS_CHART_DEFAULT_TYPE;
  40. }
  41. });
  42. // Markers
  43. // Regions
  44. // data.yRegions = data.yRegions || [];
  45. if(data.yRegions) {
  46. data.yRegions.map(d => {
  47. if(d.end < d.start) {
  48. [d.start, d.end] = [d.end, d.start];
  49. }
  50. });
  51. }
  52. return data;
  53. }
  54. export function zeroDataPrep(realData) {
  55. let datasetLength = realData.labels.length;
  56. let zeroArray = new Array(datasetLength).fill(0);
  57. let zeroData = {
  58. labels: realData.labels.slice(0, -1),
  59. datasets: realData.datasets.map(d => {
  60. return {
  61. name: '',
  62. values: zeroArray.slice(0, -1),
  63. chartType: d.chartType
  64. };
  65. }),
  66. };
  67. if(realData.yMarkers) {
  68. zeroData.yMarkers = [
  69. {
  70. value: 0,
  71. label: ''
  72. }
  73. ];
  74. }
  75. if(realData.yRegions) {
  76. zeroData.yRegions = [
  77. {
  78. start: 0,
  79. end: 0,
  80. label: ''
  81. }
  82. ];
  83. }
  84. return zeroData;
  85. }
  86. export function getShortenedLabels(chartWidth, labels=[], isSeries=true) {
  87. let allowedSpace = chartWidth / labels.length;
  88. if(allowedSpace <= 0) allowedSpace = 1;
  89. let allowedLetters = allowedSpace / DEFAULT_CHAR_WIDTH;
  90. let calcLabels = labels.map((label, i) => {
  91. label += "";
  92. if(label.length > allowedLetters) {
  93. if(!isSeries) {
  94. if(allowedLetters-3 > 0) {
  95. label = label.slice(0, allowedLetters-3) + " ...";
  96. } else {
  97. label = label.slice(0, allowedLetters) + '..';
  98. }
  99. } else {
  100. let multiple = Math.ceil(label.length/allowedLetters);
  101. if(i % multiple !== 0) {
  102. label = "";
  103. }
  104. }
  105. }
  106. return label;
  107. });
  108. return calcLabels;
  109. }