From 2586e3fdb5c958232e60f5d74509859ffd8fab5b Mon Sep 17 00:00:00 2001 From: Mike Hinchey Date: Fri, 11 Oct 2019 16:02:19 -0700 Subject: [PATCH] [FE-9524] migrate Line-Combo, Invalid time value --- dist/mapd3.js | 2 +- src/charts/data-manager.js | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/dist/mapd3.js b/dist/mapd3.js index 586a731..ec189c9 100644 --- a/dist/mapd3.js +++ b/dist/mapd3.js @@ -132,7 +132,7 @@ eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\tr /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("/* harmony export (immutable) */ __webpack_exports__[\"b\"] = DataGenerator;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = augmentData;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = getNearestDataPoint;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers_constants__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers_common__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep__);\nvar _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; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n\n\n\n\n\n\nfunction DataGenerator() {\n /* eslint-disable no-magic-numbers */\n var config = {\n keyType: \"number\", // number, string, time,\n range: [0, 100],\n pointCount: 200,\n groupCount: 2,\n lineCount: 4,\n stringMinMaxLength: [4, 8],\n randomStepSize: 50,\n nullRatio: null\n };\n var cache = {\n data: null,\n baseDate: null\n };\n\n var DAY_IN_MS = 1000 * 60 * 60 * 24;\n\n function generateRandomString(_length) {\n var stringLength = _length;\n if (!_length) {\n var range = config.stringMinMaxLength;\n stringLength = Math.round(Math.random() * (range[1] - range[0])) + range[0];\n }\n return [].concat(_toConsumableArray(Array(stringLength))).map(function () {\n return String.fromCharCode(Math.round(Math.random() * 25) + 97);\n }).join(\"\");\n }\n\n function generateSeries(_dataKeys, _range) {\n var value = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"randomUniform\"].apply(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__, _toConsumableArray(_range))();\n var randomWalkStepSize = (_range[1] - _range[0]) / config.randomStepSize;\n var rnd = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"randomNormal\"](0, 1);\n return _dataKeys.map(function (d) {\n var isRandomNull = config.nullRatio && Math.random() * 100 / config.nullRatio < 1;\n value = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"clamp\"])(value + rnd() * randomWalkStepSize, _range);\n return {\n y: isRandomNull ? null : value,\n x: config.keyType === \"time\" ? d.toISOString() : d\n };\n });\n }\n\n function generateTestDataset() {\n var dataKeys = null;\n if (config.keyType === \"time\") {\n cache.baseDate = new Date();\n var previousDate = new Date(cache.baseDate.getTime() - DAY_IN_MS * config.pointCount);\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"utcDay\"].range(previousDate, cache.baseDate);\n } else if (config.keyType === \"string\") {\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](0, config.pointCount).map(function () {\n return generateRandomString();\n });\n dataKeys.sort(function (a, b) {\n return a.localeCompare(b, \"en\", { numeric: false });\n });\n } else if (config.keyType === \"number\") {\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](0, config.pointCount).map(function (d, i) {\n return i;\n });\n }\n\n var series = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](config.lineCount).map(function (d) {\n return {\n name: \"Name \" + d,\n label: \"Label \" + d,\n id: d,\n group: d < config.groupCount ? d : 0,\n values: generateSeries(dataKeys, config.range),\n measureName: \"Measure \" + d\n };\n });\n\n cache.data = { series: series\n\n // console.log(\"generated data\", cache.data)\n\n };return cache.data;\n }\n\n function setConfig(_config) {\n config = Object.assign({}, config, _config);\n return this;\n }\n\n return {\n generateTestDataset: generateTestDataset,\n generateSeries: generateSeries,\n setConfig: setConfig\n };\n}\n\n// accessors\nvar getKey = function getKey(d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY];\n};\nvar getID = function getID(d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID];\n};\n\nfunction augmentData(_data, _keyType, _sortBy, _fillData, _stackOffset, _yAxisPercentageFormat) {\n var dataBySeries = __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep___default()(_data[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES]);\n dataBySeries.forEach(function (serie) {\n // convert type\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n if (_keyType === \"time\") {\n d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = convertToDate(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY]);\n }\n if (_fillData) {\n d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE] = Number(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE]);\n }\n });\n });\n var flatData = [];\n\n // get all unique keys\n var allKeys = [];\n dataBySeries.forEach(function (d) {\n allKeys = allKeys.concat(d.values);\n });\n allKeys = allKeys.map(function (d) {\n return d.key;\n });\n allKeys = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"getUnique\"])(allKeys, _keyType);\n\n // Normalize dataBySeries\n dataBySeries.forEach(function (serie) {\n var keyValues = {};\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n keyValues[d.key] = d.value;\n });\n // fill data\n var filled = serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES];\n if (_fillData) {\n filled = allKeys.map(function (d) {\n return {\n key: d,\n value: typeof keyValues[d] === \"undefined\" ? null : keyValues[d]\n };\n });\n }\n\n // sort\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES] = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"sortData\"])(filled, _keyType);\n });\n\n // flatten data\n dataBySeries.forEach(function (serie) {\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n var dataPoint = _extends({}, serie);\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL];\n flatData.push(dataPoint);\n });\n });\n // sort flat data\n var flatDataSorted = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"sortData\"])(flatData, _keyType);\n\n var dataByKey = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"nest\"]().key(getKey).entries(flatDataSorted.map(function (d) {\n return _extends({}, d, {\n x: _keyType === \"time\" ? d.x.toISOString() : d.x\n });\n })).map(function (d) {\n var dataPoint = {};\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = _keyType === \"time\" ? new Date(d.key) : d.key;\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES] = d.values;\n return dataPoint;\n });\n\n // get group keys\n var groupKeys = {};\n dataBySeries.forEach(function (d) {\n if (!groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]]) {\n groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]] = [];\n }\n groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]].push(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID]);\n });\n\n // stack data\n var stackData = dataByKey.map(function (d) {\n var points = {\n key: d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY]\n };\n d.series.forEach(function (dB) {\n points[dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID]] = dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n });\n return points;\n });\n\n // d3 stack\n var stack = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"stack\"]().keys(dataBySeries.map(getID)).value(function (d, key) {\n return d[key] || 0;\n }).order(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"stackOrderNone\"]).offset(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[_stackOffset]);\n\n // get stack totals\n var allKeyTotals = dataByKey.map(function (d) {\n return _extends({\n key: d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY],\n total: __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"sum\"](d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES].map(function (dB) {\n return dB[typeof _yAxisPercentageFormat === \"string\" ? __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL : __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n }))\n }, d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES][0][__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL] && { countval: __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"sum\"](d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES].map(function (dB) {\n return dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL];\n })) });\n });\n\n // sort\n switch (_sortBy) {\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].TOTAL_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"total\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].TOTAL_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"total\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].ALPHA_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"key\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].ALPHA_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"key\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].COUNTVAL_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"countval\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].COUNTVAL_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"countval\", _keyType));\n break;\n default:\n break;\n }\n\n return { dataBySeries: dataBySeries, dataByKey: dataByKey, stack: stack, stackData: stackData, flatDataSorted: flatDataSorted, groupKeys: groupKeys, allKeyTotals: allKeyTotals };\n}\n\nfunction getNearestDataPoint(_mouseX, _dataObject, _scales, _keyType) {\n var keyFromInvertedX = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"invertScale\"])(_scales.xScale, _mouseX, _keyType);\n\n if (_keyType === \"string\") {\n // if we are keying on strings, simply find the value via a key match\n return _dataObject.dataByKey.find(function (d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] === keyFromInvertedX;\n });\n }\n\n var bisectLeft = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"bisector\"](getKey).left;\n var dataEntryIndex = bisectLeft(_dataObject.dataByKey, keyFromInvertedX);\n var dataEntryForXPosition = _dataObject.dataByKey[dataEntryIndex];\n var dataEntryForXPositionPrev = _dataObject.dataByKey[Math.max(dataEntryIndex - 1, 0)];\n\n var nearestDataPoint = null;\n if (keyFromInvertedX && dataEntryForXPosition && dataEntryForXPositionPrev) {\n if (keyFromInvertedX - dataEntryForXPositionPrev[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] < dataEntryForXPosition[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] - keyFromInvertedX) {\n nearestDataPoint = dataEntryForXPositionPrev;\n } else {\n nearestDataPoint = dataEntryForXPosition;\n }\n }\n return nearestDataPoint;\n}\n\nfunction convertToDate(_date) {\n // hacks to handle invalid date like \"0014-06-08T00:00:00.000Z\"\n return new Date(new Date(_date).toISOString());\n}\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/charts/data-manager.js\n// module id = 8\n// module chunks = 0\n\n//# sourceURL=webpack:///./src/charts/data-manager.js?"); +eval("/* harmony export (immutable) */ __webpack_exports__[\"b\"] = DataGenerator;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = augmentData;\n/* harmony export (immutable) */ __webpack_exports__[\"c\"] = getNearestDataPoint;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__helpers_constants__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__helpers_common__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep__);\nvar _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; };\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n\n\n\n\n\n\nfunction DataGenerator() {\n /* eslint-disable no-magic-numbers */\n var config = {\n keyType: \"number\", // number, string, time,\n range: [0, 100],\n pointCount: 200,\n groupCount: 2,\n lineCount: 4,\n stringMinMaxLength: [4, 8],\n randomStepSize: 50,\n nullRatio: null\n };\n var cache = {\n data: null,\n baseDate: null\n };\n\n var DAY_IN_MS = 1000 * 60 * 60 * 24;\n\n function generateRandomString(_length) {\n var stringLength = _length;\n if (!_length) {\n var range = config.stringMinMaxLength;\n stringLength = Math.round(Math.random() * (range[1] - range[0])) + range[0];\n }\n return [].concat(_toConsumableArray(Array(stringLength))).map(function () {\n return String.fromCharCode(Math.round(Math.random() * 25) + 97);\n }).join(\"\");\n }\n\n function generateSeries(_dataKeys, _range) {\n var value = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"randomUniform\"].apply(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__, _toConsumableArray(_range))();\n var randomWalkStepSize = (_range[1] - _range[0]) / config.randomStepSize;\n var rnd = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"randomNormal\"](0, 1);\n return _dataKeys.map(function (d) {\n var isRandomNull = config.nullRatio && Math.random() * 100 / config.nullRatio < 1;\n value = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"clamp\"])(value + rnd() * randomWalkStepSize, _range);\n return {\n y: isRandomNull ? null : value,\n x: config.keyType === \"time\" ? isoStr(d) : d\n };\n });\n }\n\n function generateTestDataset() {\n var dataKeys = null;\n if (config.keyType === \"time\") {\n cache.baseDate = new Date();\n var previousDate = new Date(cache.baseDate.getTime() - DAY_IN_MS * config.pointCount);\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"utcDay\"].range(previousDate, cache.baseDate);\n } else if (config.keyType === \"string\") {\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](0, config.pointCount).map(function () {\n return generateRandomString();\n });\n dataKeys.sort(function (a, b) {\n return a.localeCompare(b, \"en\", { numeric: false });\n });\n } else if (config.keyType === \"number\") {\n dataKeys = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](0, config.pointCount).map(function (d, i) {\n return i;\n });\n }\n\n var series = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"range\"](config.lineCount).map(function (d) {\n return {\n name: \"Name \" + d,\n label: \"Label \" + d,\n id: d,\n group: d < config.groupCount ? d : 0,\n values: generateSeries(dataKeys, config.range),\n measureName: \"Measure \" + d\n };\n });\n\n cache.data = { series: series\n\n // console.log(\"generated data\", cache.data)\n\n };return cache.data;\n }\n\n function setConfig(_config) {\n config = Object.assign({}, config, _config);\n return this;\n }\n\n return {\n generateTestDataset: generateTestDataset,\n generateSeries: generateSeries,\n setConfig: setConfig\n };\n}\n\n// accessors\nvar getKey = function getKey(d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY];\n};\nvar getID = function getID(d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID];\n};\n\nfunction augmentData(_data, _keyType, _sortBy, _fillData, _stackOffset, _yAxisPercentageFormat) {\n var dataBySeries = __WEBPACK_IMPORTED_MODULE_3_lodash_clonedeep___default()(_data[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES]);\n dataBySeries.forEach(function (serie) {\n // convert type\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n if (_keyType === \"time\") {\n d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = convertToDate(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY]);\n }\n if (_fillData) {\n d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE] = Number(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE]);\n }\n });\n });\n var flatData = [];\n\n // get all unique keys\n var allKeys = [];\n dataBySeries.forEach(function (d) {\n allKeys = allKeys.concat(d.values);\n });\n allKeys = allKeys.map(function (d) {\n return d.key;\n });\n allKeys = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"getUnique\"])(allKeys, _keyType);\n\n // Normalize dataBySeries\n dataBySeries.forEach(function (serie) {\n var keyValues = {};\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n keyValues[d.key] = d.value;\n });\n // fill data\n var filled = serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES];\n if (_fillData) {\n filled = allKeys.map(function (d) {\n return {\n key: d,\n value: typeof keyValues[d] === \"undefined\" ? null : keyValues[d]\n };\n });\n }\n\n // sort\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES] = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"sortData\"])(filled, _keyType);\n });\n\n // flatten data\n dataBySeries.forEach(function (serie) {\n serie[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUES].forEach(function (d) {\n var dataPoint = _extends({}, serie);\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL];\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL] = d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL];\n flatData.push(dataPoint);\n });\n });\n // sort flat data\n var flatDataSorted = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"sortData\"])(flatData, _keyType);\n\n var dataByKey = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"nest\"]().key(getKey).entries(flatDataSorted.map(function (d) {\n return _extends({}, d, {\n x: _keyType === \"time\" ? isoStr(d.x) : d.x\n });\n })).map(function (d) {\n var dataPoint = {};\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] = _keyType === \"time\" ? new Date(d.key) : d.key;\n dataPoint[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES] = d.values;\n return dataPoint;\n });\n\n // get group keys\n var groupKeys = {};\n dataBySeries.forEach(function (d) {\n if (!groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]]) {\n groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]] = [];\n }\n groupKeys[d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].GROUP]].push(d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID]);\n });\n\n // stack data\n var stackData = dataByKey.map(function (d) {\n var points = {\n key: d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY]\n };\n d.series.forEach(function (dB) {\n points[dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ID]] = dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n });\n return points;\n });\n\n // d3 stack\n var stack = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"stack\"]().keys(dataBySeries.map(getID)).value(function (d, key) {\n return d[key] || 0;\n }).order(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"stackOrderNone\"]).offset(__WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[_stackOffset]);\n\n // get stack totals\n var allKeyTotals = dataByKey.map(function (d) {\n return _extends({\n key: d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY],\n total: __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"sum\"](d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES].map(function (dB) {\n return dB[typeof _yAxisPercentageFormat === \"string\" ? __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].ABSOLUTEVAL : __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].VALUE];\n }))\n }, d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES][0][__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL] && { countval: __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"sum\"](d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].SERIES].map(function (dB) {\n return dB[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].COUNTVAL];\n })) });\n });\n\n // sort\n switch (_sortBy) {\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].TOTAL_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"total\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].TOTAL_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"total\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].ALPHA_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"key\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].ALPHA_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"key\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].COUNTVAL_ASCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"ascendingComparator\"])(\"countval\", _keyType));\n break;\n case __WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"comparators\"].COUNTVAL_DESCENDING:\n allKeyTotals.sort(Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"descendingComparator\"])(\"countval\", _keyType));\n break;\n default:\n break;\n }\n\n return { dataBySeries: dataBySeries, dataByKey: dataByKey, stack: stack, stackData: stackData, flatDataSorted: flatDataSorted, groupKeys: groupKeys, allKeyTotals: allKeyTotals };\n}\n\nfunction getNearestDataPoint(_mouseX, _dataObject, _scales, _keyType) {\n var keyFromInvertedX = Object(__WEBPACK_IMPORTED_MODULE_2__helpers_common__[\"invertScale\"])(_scales.xScale, _mouseX, _keyType);\n\n if (_keyType === \"string\") {\n // if we are keying on strings, simply find the value via a key match\n return _dataObject.dataByKey.find(function (d) {\n return d[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] === keyFromInvertedX;\n });\n }\n\n var bisectLeft = __WEBPACK_IMPORTED_MODULE_0__helpers_d3_service__[\"bisector\"](getKey).left;\n var dataEntryIndex = bisectLeft(_dataObject.dataByKey, keyFromInvertedX);\n var dataEntryForXPosition = _dataObject.dataByKey[dataEntryIndex];\n var dataEntryForXPositionPrev = _dataObject.dataByKey[Math.max(dataEntryIndex - 1, 0)];\n\n var nearestDataPoint = null;\n if (keyFromInvertedX && dataEntryForXPosition && dataEntryForXPositionPrev) {\n if (keyFromInvertedX - dataEntryForXPositionPrev[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] < dataEntryForXPosition[__WEBPACK_IMPORTED_MODULE_1__helpers_constants__[\"keys\"].KEY] - keyFromInvertedX) {\n nearestDataPoint = dataEntryForXPositionPrev;\n } else {\n nearestDataPoint = dataEntryForXPosition;\n }\n }\n return nearestDataPoint;\n}\n\nfunction convertToDate(_date) {\n try {\n // hacks to handle invalid date like \"0014-06-08T00:00:00.000Z\"\n return new Date(new Date(_date).toISOString());\n } catch (e) {\n console.warn(e + \": \" + _date);\n return _date;\n }\n}\n\nfunction isoStr(d) {\n try {\n return d.toISOString();\n } catch (e) {\n console.warn(e + \": \" + d);\n return d;\n }\n}\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/charts/data-manager.js\n// module id = 8\n// module chunks = 0\n\n//# sourceURL=webpack:///./src/charts/data-manager.js?"); /***/ }), /* 9 */ diff --git a/src/charts/data-manager.js b/src/charts/data-manager.js index 929b4fd..54e6c4c 100644 --- a/src/charts/data-manager.js +++ b/src/charts/data-manager.js @@ -42,7 +42,7 @@ export default function DataGenerator () { value = clamp(value + rnd() * randomWalkStepSize, _range) return { y: isRandomNull ? null : value, - x: config.keyType === "time" ? d.toISOString() : d + x: config.keyType === "time" ? isoStr(d) : d } }) } @@ -152,7 +152,7 @@ export function augmentData (_data, _keyType, _sortBy, _fillData, _stackOffset, .key(getKey) .entries(flatDataSorted.map(d => ({ ...d, - x: _keyType === "time" ? d.x.toISOString() : d.x + x: _keyType === "time" ? isoStr(d.x) : d.x }))) .map((d) => { const dataPoint = {} @@ -249,6 +249,22 @@ export function getNearestDataPoint (_mouseX, _dataObject, _scales, _keyType) { } function convertToDate (_date) { - // hacks to handle invalid date like "0014-06-08T00:00:00.000Z" - return new Date(new Date(_date).toISOString()) + try { + // hacks to handle invalid date like "0014-06-08T00:00:00.000Z" + return new Date(new Date(_date).toISOString()) + } + catch (e) { + console.warn(e + ": " + _date) + return _date + } +} + +function isoStr (d) { + try { + return d.toISOString() + } + catch (e) { + console.warn(e + ": " + d) + return d + } }