{"ast":null,"code":"var __jsx = React.createElement;\nimport { chartData, range, singlePointRange, sortingMethodMap, tooltip, transform, xAxisMap } from '~/resource/scalars';\nimport React, { useCallback, useMemo } from 'react';\nimport { em, size } from '~/utils/style';\nimport LineChart from '~/components/LineChart';\nimport { cycleFetcher } from '~/utils/fetch';\nimport queryString from 'query-string';\nimport styled from 'styled-components';\nimport useHeavyWork from '~/hooks/useHeavyWork';\nimport { useRunningRequest } from '~/hooks/useRequest';\nimport { useTranslation } from '~/utils/i18n';\nvar width = em(430);\nvar height = em(320);\n\nvar smoothWasm = function smoothWasm() {\n  return (// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n    // @ts-ignore\n    import('~/wasm/dist').then(function (_ref) {\n      var transform = _ref.transform;\n      return function (params) {\n        return transform(params.datasets, params.smoothing);\n      };\n    })\n  );\n};\n\nvar rangeWasm = function rangeWasm() {\n  return (// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n    // @ts-ignore\n    import('~/wasm/dist').then(function (_ref2) {\n      var range = _ref2.range;\n      return function (params) {\n        return range(params.datasets, params.outlier);\n      };\n    })\n  );\n};\n\nvar smoothWorker = function smoothWorker() {\n  return new Worker('~/worker/scalars/smooth.worker.ts', {\n    type: 'module'\n  });\n};\n\nvar rangeWorker = function rangeWorker() {\n  return new Worker('~/worker/scalars/range.worker.ts', {\n    type: 'module'\n  });\n};\n\nvar StyledLineChart = styled(LineChart).withConfig({\n  displayName: \"ScalarChart__StyledLineChart\",\n  componentId: \"sc-1uqazys-0\"\n})([\"\", \"\"], size(height, width));\nvar Error = styled.div.withConfig({\n  displayName: \"ScalarChart__Error\",\n  componentId: \"sc-1uqazys-1\"\n})([\"\", \" display:flex;justify-content:center;align-items:center;\"], size(height, width));\n\nvar ScalarChart = function ScalarChart(_ref3) {\n  var _useHeavyWork;\n\n  var runs = _ref3.runs,\n      tag = _ref3.tag,\n      smoothing = _ref3.smoothing,\n      xAxis = _ref3.xAxis,\n      sortingMethod = _ref3.sortingMethod,\n      outlier = _ref3.outlier,\n      running = _ref3.running;\n\n  var _useTranslation = useTranslation(['scalars', 'common']),\n      t = _useTranslation.t,\n      i18n = _useTranslation.i18n;\n\n  var _useRunningRequest = useRunningRequest(runs.map(function (run) {\n    return \"/scalars/list?\".concat(queryString.stringify({\n      run: run,\n      tag: tag\n    }));\n  }), !!running, function () {\n    for (var _len = arguments.length, urls = new Array(_len), _key = 0; _key < _len; _key++) {\n      urls[_key] = arguments[_key];\n    }\n\n    return cycleFetcher(urls);\n  }),\n      datasets = _useRunningRequest.data,\n      error = _useRunningRequest.error,\n      loading = _useRunningRequest.loading;\n\n  var smooth = false;\n  var type = useMemo(function () {\n    return xAxis === 'wall' ? 'time' : 'value';\n  }, [xAxis]);\n  var xAxisLabel = useMemo(function () {\n    return xAxis === 'step' ? '' : t(\"x-axis-value.\".concat(xAxis));\n  }, [xAxis, t]);\n  var transformParams = useMemo(function () {\n    var _datasets$map;\n\n    return {\n      datasets: (_datasets$map = datasets === null || datasets === void 0 ? void 0 : datasets.map(function (data) {\n        return data !== null && data !== void 0 ? data : [];\n      })) !== null && _datasets$map !== void 0 ? _datasets$map : [],\n      smoothing: smoothing\n    };\n  }, [datasets, smoothing]);\n  var smoothedDatasets = (_useHeavyWork = useHeavyWork(smoothWasm, smoothWorker, transform, transformParams)) !== null && _useHeavyWork !== void 0 ? _useHeavyWork : [];\n  var rangeParams = useMemo(function () {\n    return {\n      datasets: smoothedDatasets,\n      outlier: !!outlier\n    };\n  }, [smoothedDatasets, outlier]);\n  var yRange = useHeavyWork(rangeWasm, rangeWorker, range, rangeParams);\n  var ranges = useMemo(function () {\n    var x = undefined;\n    var y = yRange; // if there is only one point, place it in the middle\n\n    if (smoothedDatasets.length === 1 && smoothedDatasets[0].length === 1) {\n      if (['value', 'log'].includes(type)) {\n        x = singlePointRange(smoothedDatasets[0][0][xAxisMap[xAxis]]);\n      }\n\n      y = singlePointRange(smoothedDatasets[0][0][2]);\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  }, [smoothedDatasets, yRange, type, xAxis]);\n  var data = useMemo(function () {\n    return chartData({\n      data: smoothedDatasets,\n      runs: runs,\n      smooth: smooth,\n      xAxis: xAxis\n    });\n  }, [smoothedDatasets, runs, smooth, xAxis]);\n  var formatter = useCallback(function (params) {\n    var _smoothedDatasets$map;\n\n    var data = Array.isArray(params) ? params[0].data : params.data;\n    var step = data[1];\n    var points = (_smoothedDatasets$map = smoothedDatasets === null || smoothedDatasets === void 0 ? void 0 : smoothedDatasets.map(function (series, index) {\n      var nearestItem;\n\n      if (step === 0) {\n        nearestItem = series[0];\n      } else {\n        for (var i = 0; i < series.length; i++) {\n          var item = series[i];\n\n          if (item[1] === step) {\n            nearestItem = item;\n            break;\n          }\n\n          if (item[1] > step) {\n            nearestItem = series[i - 1 >= 0 ? i - 1 : 0];\n            break;\n          }\n\n          if (!nearestItem) {\n            nearestItem = series[series.length - 1];\n          }\n        }\n      }\n\n      return {\n        run: runs[index],\n        item: nearestItem || []\n      };\n    })) !== null && _smoothedDatasets$map !== void 0 ? _smoothedDatasets$map : [];\n    var sort = sortingMethodMap[sortingMethod];\n    return tooltip(sort ? sort(points, data) : points, i18n);\n  }, [smoothedDatasets, runs, sortingMethod, i18n]); // display error only on first fetch\n\n  if (!data && error) {\n    return __jsx(Error, null, t('common:error'));\n  }\n\n  return __jsx(StyledLineChart, {\n    title: tag,\n    xAxis: xAxisLabel,\n    xRange: ranges.x,\n    yRange: ranges.y,\n    type: type,\n    tooltip: formatter,\n    data: data,\n    loading: loading\n  });\n};\n\nexport default ScalarChart;","map":null,"metadata":{},"sourceType":"module"}