react-meteo-chart
Version:
pre alpha of meteo chart
359 lines (301 loc) • 14.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _moment = _interopRequireDefault(require("moment"));
var _reactVis = require("react-vis");
var color = _interopRequireWildcard(require("./color-utils"));
var _BasicChart = require("../BasicChart");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function getBufrTranlation(name) {
switch (name) {
case "DIFFERENTIAL REFLECTIVITY":
return "Дифференциальная отражающая способность";
case "DOPPLER MEAN VELOCITY (RADIAL)":
return "Средняя допплеровская (радиальная) скорость";
case "ECHO TOPS":
return "Верхняя граница радиолокационного отражения";
case "HORIZONTAL REFLECTIVITY":
return "Горизонтальная отражательная способность";
case "RADAR RAINFALL INTENSITY":
return "Интенсивность дождя по радиоционным данным";
case "TOTAL PRECIPITATION PAST 1 HOUR":
return "Сумма осадков за последний час";
case "TOTAL PRECIPITATION PAST 12 HOURS":
return "Сумма осадков за последние 12 часов";
case "TOTAL PRECIPITATION PAST 3 HOURS":
return "Сумма осадков за последние 3 часа";
case "TOTAL PRECIPITATION PAST 6 HOURS":
return "Сумма осадков за последние 6 часов";
case "TOTAL PRECIPITATION PAST 24 HOURS":
return "Сумма осадков за последние 24 часа";
case "HAZARDOUS PHENOMENA":
return "Карта опасных явлений";
default:
return name;
}
}
var MiddleVerticalRectSeries =
/*#__PURE__*/
function (_VerticalRectSeries) {
_inherits(MiddleVerticalRectSeries, _VerticalRectSeries);
function MiddleVerticalRectSeries() {
var _getPrototypeOf2;
var _this;
_classCallCheck(this, MiddleVerticalRectSeries);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(MiddleVerticalRectSeries)).call.apply(_getPrototypeOf2, [this].concat(args)));
_defineProperty(_assertThisInitialized(_this), "_handleNearestX", function (event) {
var _props3 = this.props,
onNearestX = _props3.onNearestX,
data = _props3.data;
var minDistance = -Number.POSITIVE_INFINITY;
var value = null;
var valueIndex = null;
var coordinate = this._getXYCoordinateInContainer(event);
var xScaleFn = this._getAttributeFunctor("x");
data.forEach(function (item, i) {
var currentCoordinate = xScaleFn(item);
var newDistance = coordinate.x - currentCoordinate;
if (newDistance <= 0 && newDistance > minDistance) {
minDistance = newDistance;
value = item;
valueIndex = i;
}
});
if (!value) {
return;
}
onNearestX(value, {
innerX: xScaleFn(value),
index: valueIndex,
event: event.nativeEvent
});
});
return _this;
}
return MiddleVerticalRectSeries;
}(_reactVis.VerticalRectSeries);
var BufrChart =
/*#__PURE__*/
function (_Component) {
_inherits(BufrChart, _Component);
function BufrChart() {
var _getPrototypeOf3;
var _this2;
_classCallCheck(this, BufrChart);
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
_this2 = _possibleConstructorReturn(this, (_getPrototypeOf3 = _getPrototypeOf(BufrChart)).call.apply(_getPrototypeOf3, [this].concat(args)));
_defineProperty(_assertThisInitialized(_this2), "state", {
cross: null,
data: _this2.props.superArr[0],
index: 0,
stations: _this2.props.stations,
superArr: _this2.props.superArr,
dataType: _this2.props.dataType,
line: _this2.props.line
});
return _this2;
}
_createClass(BufrChart, [{
key: "render",
value: function render() {
var _this3 = this;
var _this$state = this.state,
index = _this$state.index,
data = _this$state.data,
stations = _this$state.stations,
line = _this$state.line,
dataType = _this$state.dataType;
var haveHeight = this.props.isBufrWithHeight(dataType);
var yMeasure = haveHeight ? "м" : color.getMeasureByType(dataType);
return _react["default"].createElement(_react["default"].Fragment, null, " ", data ? _react["default"].createElement("div", {
style: {
// border: "1px solid #7d9cb8",
height: "85%",
backgroundColor: data ? (0, _BasicChart.rgbToHex)(255, 255, 255, this.props.opacity) : "dada",
textAlign: "center"
}
}, _react["default"].createElement("h5", {
style: {
margin: 5
}
}, this.state.stations[index] && this.state.stations[index].title), _react["default"].createElement("h6", {
style: {
margin: 5
}
}, this.props.getBufrTranlation(this.state.dataType)), _react["default"].createElement(_reactVis.FlexibleXYPlot // TODO: Заменить на FlexibleWidthPlot и прокидывать сюда высоту окна и высчитывать нужный размер(с учетом заголовка и панели выобра станций),
, {
margin: {
left: 65,
right: 65,
top: 45
} //ибо этот флекс плот умееет занимать только весь контейнер (поэтому панель с выбором станции выползает за пределы контейнера
,
onMouseLeave: function onMouseLeave() {
_this3.setState({
cross: null
});
} // height={}
,
style: {
backgroundColor: (0, _BasicChart.rgbToHex)(255, 255, 255, this.props.opacity)
},
xDomain: [data[0].x0, data.slice(-1)[0].x],
yDomain: [0, Math.max.apply(Math, data.map(function (d) {
return d.y;
}))],
xType: "linear",
yType: "linear"
}, _react["default"].createElement(_reactVis.HorizontalGridLines, null), _react["default"].createElement(_reactVis.VerticalGridLines, null), (haveHeight || dataType.search(/PRECIPITATION PAST/) !== -1) && _react["default"].createElement(_reactVis.YAxis // left={0}
, {
tickFormat: function tickFormat(v, indx) {
return v >= 0 ? "".concat(v, " ").concat(yMeasure) : "";
}
}), (haveHeight || dataType.search(/PRECIPITATION PAST/) !== -1) && _react["default"].createElement(_reactVis.YAxis, {
orientation: "right",
tickFormat: function tickFormat(v, indx) {
return v >= 0 ? "".concat(v, " ").concat(yMeasure) : "";
}
}), _react["default"].createElement(_reactVis.XAxis, {
tickPadding: 20,
orientation: "top",
tickValues: [data[0].x0, data.slice(-1)[0].x] // tickTotal={2}
,
tickFormat: function tickFormat(v, indx) {
if (indx == 0) return "".concat(line[0].toFixed(3));else return "".concat(line[2].toFixed(3));
}
}), _react["default"].createElement(_reactVis.XAxis // tickPadding={15}
, {
orientation: "top",
tickValues: [data[0].x0, data.slice(-1)[0].x] // tickTotal={2}
,
tickFormat: function tickFormat(v, indx) {
if (indx == 0) return " ".concat(line[1].toFixed(3));else return " ".concat(line[3].toFixed(3));
}
}), _react["default"].createElement(_reactVis.XAxis // tickPadding={20}
, {
tickFormat: function tickFormat(v, indx, arr, total) {
return "".concat(v, " \u043A\u043C");
}
}), _react["default"].createElement(MiddleVerticalRectSeries, {
getNull: function getNull(d) {
return d.y !== null;
},
data: data,
colorType: "literal",
onNearestX: function onNearestX(value, _ref) {
var index = _ref.index;
_this3.setState({
cross: _this3.state.data.filter(function (d) {
return d.x0 == value.x0;
}).map(function (value) {
return {
x: (value.x + value.x0) / 2,
valu: value.valu,
y: value.y,
y0: value.y0,
isValidValue: value.opacity,
measure: value.measure
};
})
});
}
}), _react["default"].createElement(_reactVis.DiscreteColorLegend, {
style: {
backgroundColor: (0, _BasicChart.rgbToHex)(255, 255, 255, this.props.opacity)
},
items: stations,
orientation: "horizontal",
onItemClick: function onItemClick(e) {
return _this3.setState({
data: _this3.state.superArr[e.index],
index: e.index
});
}
}), this.state.cross && _react["default"].createElement(_reactVis.Crosshair, {
values: this.state.cross
}, _react["default"].createElement("div", {
style: {
background: "rgba(42,61,92, 0.9)",
width: "155px",
color: "#fff",
borderRadius: "4px",
padding: "2px 0 2px 8px",
fontSize: 11
}
}, this.state.cross.filter(function (d) {
return d.valu !== null;
}).length > 0 ? this.state.cross.filter(function (d) {
return d.valu !== null && d.isValidValue !== 0;
}).length > 0 ? this.state.cross.filter(function (d) {
return d.valu !== null && d.isValidValue !== 0;
}).map(function (d) {
return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("div", {
style: {
display: "flex",
justifyContent: "space-between"
}
}, haveHeight && _react["default"].createElement("div", {
style: {
alignContent: "left"
}
}, d.y0 !== -1 ? "".concat(d.y0, " \u043C - ").concat(d.y, " \u043C: ") : ""), _react["default"].createElement("div", {
style: {
marginRight: "5px"
}
}, " ".concat(d.valu !== null ? "".concat(d.valu.toFixed(2), " ").concat(d.measure) : "", " "), " ")));
}) : _react["default"].createElement("div", {
style: {
display: "flex",
justifyContent: "center",
alignContent: "center",
alignItems: "center",
flexDirection: "column",
fontSize: "17px",
height: "100%"
}
}, "\u041B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u0430\u043D\u043D\u044B\u0445") : _react["default"].createElement("div", {
style: {
display: "flex",
justifyContent: "center",
alignContent: "center",
alignItems: "center",
flexDirection: "column",
fontSize: "17px",
height: "100%"
}
}, "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445"))))) : _react["default"].createElement("div", {
style: {
display: "flex",
justifyContent: "center",
alignContent: "center",
alignItems: "center",
flexDirection: "column",
fontSize: "17px",
height: "100%"
}
}, "\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445"));
}
}]);
return BufrChart;
}(_react.Component);
var _default = BufrChart;
exports["default"] = _default;