UNPKG

react-mapfilter

Version:

A React Component for viewing and filtering GeoJSON

411 lines (349 loc) 12.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); 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 _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _Paper = require('@material-ui/core/Paper'); var _Paper2 = _interopRequireDefault(_Paper); var _Typography = require('@material-ui/core/Typography'); var _Typography2 = _interopRequireDefault(_Typography); var _styles = require('@material-ui/core/styles'); var _omit = require('lodash/omit'); var _omit2 = _interopRequireDefault(_omit); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); var _ReportToolbar = require('./ReportToolbar'); var _ReportToolbar2 = _interopRequireDefault(_ReportToolbar); var _ReportFeature = require('./ReportFeature'); var _ReportFeature2 = _interopRequireDefault(_ReportFeature); var _prop_types = require('../../util/prop_types'); var MFPropTypes = _interopRequireWildcard(_prop_types); var _MapView = require('../MapView'); var _MapView2 = _interopRequireDefault(_MapView); var _Alert = require('./Alert'); var _Alert2 = _interopRequireDefault(_Alert); var _config = require('../../../config.json'); var _config2 = _interopRequireDefault(_config); 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 }; } // import {FIELD_TYPE_DATE} from '../../constants' var styles = { reportHeader: { position: 'relative', minWidth: 'calc(8.5in + 40px)', zIndex: 1, '@media only print': { display: 'none' } }, reportWrapper: { overflow: 'scroll', position: 'absolute', backgroundColor: 'rgba(236, 236, 236, 1)', width: '100%', height: '100%', '@media only print': { position: 'relative', width: 'auto', height: 'auto', backgroundColor: 'initial' } }, letter: { '& $reportContainer': { minWidth: '8.5in' }, '& $reportPaper': { width: '8.5in', '@media only print': { /* for some reason we need to substract 2px for a perfect fit */ width: 'calc(7.5in - 2px)' } }, '& $reportPaperMap': { height: 'calc(11in - 2px)', '@media only print': { height: 'calc(10in - 2px)' } }, '& $pageBreak': { top: '10.5in' }, '& $reportPage': { minHeight: '10in', '@media only print': { minHeight: 'auto' } } }, a4: { '& $reportContainer': { minWidth: '210mm' }, '& $reportPaper': { width: '210mm', '@media only print': { /* for some reason we need to substract 2px for a perfect fit */ width: 'calc(210mm - 1in - 2px)' } }, '& $reportPaperMap': { height: 'calc(297mm - 3px)', '@media only print': { height: 'calc(297mm - 1in - 3px)' } }, '& $pageBreak': { top: 'calc(297mm - 0.5in)' }, '& $reportPage': { minHeight: 'calc(297mm - 1in)', '@media only print': { minHeight: 'auto' } } }, reportContainer: { padding: '0 20px', '@media only print': { display: 'block', padding: 0, overflow: 'visible' } }, reportPaper: { cursor: 'pointer', margin: '20px auto', overflow: 'hidden', pageBreakAfter: 'always', position: 'relative', '@media only print': { minHeight: 'auto', boxShadow: 'none !important', borderRadius: '0 !important', margin: 0 }, '&:last-child': { pageBreakAfter: 'avoid !important' } }, reportPaperMap: { cursor: 'auto', display: 'flex' }, mapContainer: { flex: 1, position: 'relative' }, pageBreak: { position: 'absolute', left: 0, width: '100%', border: 'none', margin: 0, borderBottom: '3px dashed rgba(200,200,200, 0.75)', '@media only print': { display: 'none' } }, reportPage: { margin: '0.5in', outline: '1px dashed #eeeeee', '@media only print': { margin: 0, outline: 'none' } }, reportPageMap: { flex: 1, display: 'flex', flexDirection: 'column' }, '@global': { '@media only print': { tr: { pageBreakInside: 'avoid' } } } }; var VIEW_ID = 'report'; var MAX_REPORT_LEN = 26; var ReportView = function (_React$Component) { (0, _inherits3.default)(ReportView, _React$Component); function ReportView() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, ReportView); 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 = ReportView.__proto__ || (0, _getPrototypeOf2.default)(ReportView)).call.apply(_ref, [this].concat(args))), _this), _this.handleOnShowAll = function () { _this.props.updateViewState({ hiddenFields: {} }); }, _this.handleOnHideAll = function () { var _this$props = _this.props, fieldAnalysis = _this$props.fieldAnalysis, updateViewState = _this$props.updateViewState; var hiddenFields = {}; (0, _keys2.default)(fieldAnalysis.properties).forEach(function (key) { hiddenFields[key] = true; }); updateViewState({ hiddenFields: hiddenFields }); }, _this.handleFieldVisibilityToggle = function (fieldname) { var _this$props2 = _this.props, updateViewState = _this$props2.updateViewState, _this$props2$viewStat = _this$props2.viewState.hiddenFields, hiddenFields = _this$props2$viewStat === undefined ? {} : _this$props2$viewStat; updateViewState({ hiddenFields: (0, _objectAssign2.default)({}, hiddenFields, (0, _defineProperty3.default)({}, fieldname, !hiddenFields[fieldname])) }); }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(ReportView, [{ key: 'render', value: function render() { var _this2 = this; var _props = this.props, filteredFeatures = _props.filteredFeatures, featuresById = _props.featuresById, showFeatureDetail = _props.showFeatureDetail, fieldAnalysis = _props.fieldAnalysis, classes = _props.classes, requestPrint = _props.requestPrint, paperSize = _props.paperSize, viewState = _props.viewState; var featuresSlice = filteredFeatures.length > MAX_REPORT_LEN ? filteredFeatures.slice(0, MAX_REPORT_LEN) : filteredFeatures; return _react2.default.createElement( 'div', null, _react2.default.createElement(_ReportToolbar2.default, { hiddenFields: viewState.hiddenFields, onToggleFieldVisibility: this.handleFieldVisibilityToggle, onShowAll: this.handleOnShowAll, onHideAll: this.handleOnHideAll, fieldAnalysis: fieldAnalysis, requestPrint: requestPrint }), _react2.default.createElement( 'div', { className: classes.reportWrapper + ' ' + classes[paperSize] }, _react2.default.createElement( 'div', { className: classes.reportHeader }, filteredFeatures.length > MAX_REPORT_LEN && _react2.default.createElement(_Alert2.default, { label: 'Current filters show ' + filteredFeatures.length + ' records, a report will only show the first ' + MAX_REPORT_LEN + ' records' }) ), _react2.default.createElement( 'div', { className: classes.reportContainer }, _react2.default.createElement( _Paper2.default, { className: classes.reportPaper + ' ' + classes.reportPaperMap, elevation: 1 }, _react2.default.createElement( 'div', { className: classes.reportPage + ' ' + classes.reportPageMap }, _react2.default.createElement( 'header', { className: classes.mapHeader }, _react2.default.createElement( _Typography2.default, { variant: 'title' }, 'Monitoring Report' ), _react2.default.createElement( _Typography2.default, { variant: 'subheading', style: { marginBottom: '0.5em' } }, featuresSlice.length, ' locations' ) ), _react2.default.createElement( 'div', { className: classes.mapContainer }, _react2.default.createElement(_MapView2.default, (0, _extends3.default)({}, (0, _omit2.default)(this.props, 'classes'), { features: featuresSlice, interactive: false, labelPoints: true })) ) ) ), featuresSlice.map(function (feature, i) { return _react2.default.createElement( _Paper2.default, { className: classes.reportPaper, key: i, onClick: function onClick() { return showFeatureDetail(feature.id); }, elevation: 1 }, _react2.default.createElement( 'div', { className: classes.reportPage }, _react2.default.createElement(_ReportFeature2.default, (0, _extends3.default)({}, (0, _omit2.default)(_this2.props, 'classes'), { hiddenFields: viewState.hiddenFields, feature: featuresById[feature.id], label: _config2.default.labelChars.charAt(i) })) ), _react2.default.createElement('hr', { className: classes.pageBreak }) ); }), featuresSlice.length > MAX_REPORT_LEN && _react2.default.createElement( _Paper2.default, { className: classes.reportPaper }, _react2.default.createElement( 'div', { className: classes.reportPage }, _react2.default.createElement( 'h2', null, 'Cannot print more than 26 observations in a single report' ) ) ) ) ) ); } }]); return ReportView; }(_react2.default.Component); ReportView.propTypes = { filteredFeatures: _propTypes2.default.arrayOf(MFPropTypes.mapViewFeature).isRequired, featuresById: _propTypes2.default.objectOf(MFPropTypes.mapViewFeature).isRequired, fieldAnalysis: MFPropTypes.fieldAnalysis.isRequired, paperSize: MFPropTypes.paperSize, willPrint: _propTypes2.default.bool, viewState: _propTypes2.default.shape({ hiddenFields: _propTypes2.default.object }), filter: MFPropTypes.mapboxFilter, showFeatureDetail: _propTypes2.default.func.isRequired, requestPrint: _propTypes2.default.func.isRequired, classes: _propTypes2.default.object.isRequired }; ReportView.defaultProps = { paperSize: 'a4', viewState: { hiddenFields: {} } }; ReportView.MfViewId = VIEW_ID; exports.default = (0, _styles.withStyles)(styles)(ReportView); //# sourceMappingURL=ReportView.js.map