react-mapfilter
Version:
These components are designed for viewing data in Mapeo. They share a common interface:
273 lines (208 loc) • 9.18 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isNan = require('babel-runtime/core-js/number/is-nan');
var _isNan2 = _interopRequireDefault(_isNan);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _IconButton = require('@material-ui/core/IconButton');
var _IconButton2 = _interopRequireDefault(_IconButton);
var _Tooltip = require('@material-ui/core/Tooltip');
var _Tooltip2 = _interopRequireDefault(_Tooltip);
var _MoreVert = require('@material-ui/icons/MoreVert');
var _MoreVert2 = _interopRequireDefault(_MoreVert);
var _featureFilterGeojson = require('feature-filter-geojson');
var _featureFilterGeojson2 = _interopRequireDefault(_featureFilterGeojson);
var _Menu = require('@material-ui/core/Menu');
var _Menu2 = _interopRequireDefault(_Menu);
var _MenuItem = require('@material-ui/core/MenuItem');
var _MenuItem2 = _interopRequireDefault(_MenuItem);
var _reactIntl = require('react-intl');
var _fileSaver = require('file-saver');
var _d3Dsv = require('d3-dsv');
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _formatLocation = require('../../util/formatLocation');
var _formatLocation2 = _interopRequireDefault(_formatLocation);
var _flat = require('../../util/flat');
var _prop_types = require('../../util/prop_types');
var MFPropTypes = _interopRequireWildcard(_prop_types);
var _ViewContainer = require('../../containers/ViewContainer');
var _ViewContainer2 = _interopRequireDefault(_ViewContainer);
var _constants = require('../../constants');
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)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var messages = (0, _reactIntl.defineMessages)({
settings: {
'id': 'menu.settings',
'defaultMessage': 'Settings'
},
menu: {
'id': 'buttons.menu',
'defaultMessage': 'Menu'
},
exportGeoJSON: {
'id': 'menu.exportGeoJSON',
'defaultMessage': 'Export GeoJSON\u2026'
},
exportCSV: {
'id': 'menu.exportCSV',
'defaultMessage': 'Export CSV\u2026'
}
});
var MenuButton = function (_React$Component) {
(0, _inherits3.default)(MenuButton, _React$Component);
function MenuButton() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, MenuButton);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = MenuButton.__proto__ || (0, _getPrototypeOf2.default)(MenuButton)).call.apply(_ref, [this].concat(args))), _this), _this.state = { open: false }, _this.handleClick = function (event) {
_this.setState({ open: true, anchorEl: event.currentTarget });
}, _this.handleRequestClose = function () {
_this.setState({ open: false });
}, _this.handleExportGeoJSONClick = function () {
var ff = (0, _featureFilterGeojson2.default)(_this.props.filter);
var features = _this.props.features.filter(ff).map(function (f) {
var newProps = {};
for (var prop in f.properties) {
newProps[prop] = _this._convertValue(prop, f.properties[prop]);
}
return (0, _assign2.default)({}, f, { properties: (0, _flat.unflatten)(newProps) });
});
var geojson = {
type: 'FeatureCollection',
features: features
};
var blob = new window.Blob([(0, _stringify2.default)(geojson, null, 2)], { type: 'application/json' });
(0, _fileSaver.saveAs)(blob, 'data.geojson');
}, _this.handleExportCSVClick = function () {
var columns = [];
var ff = (0, _featureFilterGeojson2.default)(_this.props.filter);
var rows = _this.props.features.filter(ff).map(function (feature) {
var row = (0, _assign2.default)({}, feature.properties);
(0, _keys2.default)(row).forEach(function (key) {
row[key] = _this._convertValue(key, row[key]);
if (columns.indexOf(key) === -1) columns.push(key);
});
if (feature.geometry && feature.geometry.type === 'Point') {
var coords = feature.geometry.coordinates;
return (0, _objectAssign2.default)({}, row, {
lon: coords[0],
lat: coords[1],
UTM: (0, _formatLocation2.default)(coords, _constants.FORMATS_UTM)
});
}
return row;
}).filter(Boolean);
var csv = (0, _d3Dsv.csvFormat)(rows, columns.sort().concat(['UTM', 'lon', 'lat']));
var blob = new window.Blob([csv], { type: 'text/csv' });
(0, _fileSaver.saveAs)(blob, 'data.csv');
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(MenuButton, [{
key: '_convertValue',
value: function _convertValue(prop, value) {
var fieldAnalysis = this.props.fieldAnalysis;
if (fieldAnalysis.properties[prop] && fieldAnalysis.properties[prop].type === _constants.FIELD_TYPE_DATE) {
if (typeof value === 'number' && !(0, _isNan2.default)(value)) {
return (0, _moment2.default)(value).format('YYYY-MM-DD HH:mm:ss');
} else {
return '';
}
}
if (value === _constants.UNDEFINED_KEY) return '';
return value;
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
formatMessage = _props.intl.formatMessage,
openSettings = _props.openSettings,
menuItems = _props.menuItems;
var name = formatMessage(messages.menu);
return _react2.default.createElement(
'div',
null,
_react2.default.createElement(
_Tooltip2.default,
{ title: name },
_react2.default.createElement(
_IconButton2.default,
{
'aria-owns': this.state.open ? 'toolbar-menu' : null,
'aria-haspopup': 'true',
onClick: this.handleClick,
'aria-label': name },
_react2.default.createElement(_MoreVert2.default, { nativeColor: 'white' })
)
),
_react2.default.createElement(
_Menu2.default,
{
open: this.state.open,
MenuListProps: { dense: true },
id: 'toolbar-menu',
anchorEl: this.state.anchorEl,
onClick: this.handleRequestClose,
onClose: this.handleRequestClose },
_react2.default.createElement(
_MenuItem2.default,
{ onClick: function onClick() {
return openSettings('general');
} },
formatMessage(messages.settings)
),
_react2.default.createElement(
_MenuItem2.default,
{ onClick: this.handleExportGeoJSONClick },
formatMessage(messages.exportGeoJSON)
),
_react2.default.createElement(
_MenuItem2.default,
{ onClick: this.handleExportCSVClick },
formatMessage(messages.exportCSV)
),
menuItems.length === 0 ? null : menuItems.map(function (menuItem, i) {
return _react2.default.createElement(_ViewContainer2.default, { key: i, component: menuItem });
})
)
);
}
}]);
return MenuButton;
}(_react2.default.Component);
MenuButton.defaultProps = {
menuItems: []
};
MenuButton.propTypes = {
features: MFPropTypes.features,
intl: _propTypes2.default.object.isRequired,
openSettings: _propTypes2.default.func.isRequired
};
exports.default = (0, _reactIntl.injectIntl)(MenuButton);
//# sourceMappingURL=MenuButton.js.map