transformProps.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. exports.__esModule = true;
  3. exports.default = transformProps;
  4. var _lodash = require("lodash");
  5. function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
  6. function transformProps(chartProps) {
  7. const {
  8. width,
  9. height,
  10. formData,
  11. queryData
  12. } = chartProps;
  13. const {
  14. encoding,
  15. margin,
  16. theme
  17. } = formData;
  18. const data = queryData.data.map(({
  19. label,
  20. values
  21. }) => ({
  22. label,
  23. min: values.whisker_low,
  24. max: values.whisker_high,
  25. firstQuartile: values.Q1,
  26. median: values.Q2,
  27. thirdQuartile: values.Q3,
  28. outliers: values.outliers
  29. }));
  30. const isHorizontal = encoding.y.type === 'nominal';
  31. const boxPlotValues = data.reduce((r, e) => {
  32. r.push(e.min, e.max, ...e.outliers);
  33. return r;
  34. }, []);
  35. const minBoxPlotValue = Math.min(...boxPlotValues);
  36. const maxBoxPlotValue = Math.max(...boxPlotValues);
  37. const valueDomain = [minBoxPlotValue - 0.1 * Math.abs(minBoxPlotValue), maxBoxPlotValue + 0.1 * Math.abs(maxBoxPlotValue)];
  38. if (isHorizontal) {
  39. encoding.x.scale.domain = valueDomain;
  40. } else {
  41. encoding.y.scale.domain = valueDomain;
  42. }
  43. const hooks = chartProps.hooks;
  44. const fieldsFromHooks = ['TooltipRenderer', 'LegendRenderer', 'LegendGroupRenderer', 'LegendItemRenderer', 'LegendItemMarkRenderer', 'LegendItemLabelRenderer'];
  45. return _extends({
  46. data,
  47. width,
  48. height,
  49. margin,
  50. theme,
  51. encoding
  52. }, (0, _lodash.pick)(hooks, fieldsFromHooks));
  53. }