UNPKG

react-mapfilter

Version:

These components are designed for viewing data in Mapeo. They share a common interface:

165 lines (134 loc) 5.41 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault"); var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property"); require("core-js/modules/es.regexp.exec"); require("core-js/modules/es.string.match"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array")); var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray")); var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter")); var React = _interopRequireWildcard(require("react")); var _DateRange = _interopRequireDefault(require("@material-ui/icons/DateRange")); var _styles = require("@material-ui/core/styles"); var _ListItem = _interopRequireDefault(require("@material-ui/core/ListItem")); var _reactIntl = require("react-intl"); var _helpers = require("../utils/helpers"); var _FilterSection = _interopRequireDefault(require("./FilterSection")); var _DateField = _interopRequireDefault(require("../ObservationDialog/DateField")); // @flow var m = (0, _reactIntl.defineMessages)({ // Title of min date field in filter min: { "id": "BB/6+g==", "defaultMessage": 'From' }, // Title of max date field in filter max: { "id": "MOvYnQ==", "defaultMessage": 'To' } }); /*:: type Props = { label: React.Node, fieldKey: Key, filter?: Filter | null, min: string, max: string, type?: 'date' | 'datetime', onChangeFilter: (filter: Array<any> | null) => void }*/ var DateFilter = function DateFilter(_ref) { var label = _ref.label, fieldKey = _ref.fieldKey, filter = (0, _filter.default)(_ref), min = _ref.min, max = _ref.max, _ref$type = _ref.type, type = _ref$type === void 0 ? 'datetime' : _ref$type, onChangeFilter = _ref.onChangeFilter; var cx = useStyles(); var _useIntl = (0, _reactIntl.useIntl)(), t = _useIntl.formatMessage; var _parseDateFilter = parseDateFilter(filter), _parseDateFilter2 = (0, _slicedToArray2.default)(_parseDateFilter, 2), filterMin = _parseDateFilter2[0], filterMax = _parseDateFilter2[1]; var isFiltered = filterMin != null && filterMin > min || filterMax != null && filterMax < max; var handleChange = function handleChange(minOrMax /*: 'min' | 'max'*/ ) { return function (value) { var filterValue = createFilterValue(value, minOrMax); var newFilter = minOrMax === 'min' ? compileFilter(fieldKey, filterValue, filterMax && (filterMax < filterValue ? createFilterValue(value, 'max') : filterMax)) : compileFilter(fieldKey, filterMin && (filterMin > filterValue ? createFilterValue(value, 'min') : filterMin), filterValue); onChangeFilter(newFilter); }; }; return /*#__PURE__*/React.createElement(_FilterSection.default, { title: label, icon: /*#__PURE__*/React.createElement(_DateRange.default, null), isFiltered: isFiltered, onShowAllClick: function onShowAllClick() { return onChangeFilter(null); } }, /*#__PURE__*/React.createElement(_ListItem.default, null, /*#__PURE__*/React.createElement(_DateField.default, { minDate: (0, _helpers.parseDateString)(min), maxDate: (0, _helpers.parseDateString)(max), label: t(m.min), value: filterMin || min, onChange: handleChange('min'), fullWidth: false, margin: "dense", className: cx.dateField }), /*#__PURE__*/React.createElement(_DateField.default, { minDate: (0, _helpers.parseDateString)(min), maxDate: (0, _helpers.parseDateString)(max), label: t(m.max), value: filterMax || max, onChange: handleChange('max'), fullWidth: false, margin: "dense", className: cx.dateField }))); }; var _default = DateFilter; exports.default = _default; function compileFilter(key, min, max) { if (min === undefined && max === undefined) return null; var filter = ['all']; if (min) filter.push(['>=', key, min]); if (max) filter.push(['<=', key, max]); return filter; } function parseDateFilter(filter /*:: ?: Array<any> | null*/ ) { if (!filter || filter.length < 2 || filter[0] !== 'all') return []; var minFilter = (0, _find.default)(filter).call(filter, function (d) { return (0, _isArray.default)(d) && d[0] === '>='; }); var maxFilter = (0, _find.default)(filter).call(filter, function (d) { return (0, _isArray.default)(d) && d[0] === '<='; }); return [minFilter && minFilter[2], maxFilter && maxFilter[2]]; } var useStyles = (0, _styles.makeStyles)(function (theme) { return { dateField: { '&:not(:last-child)': { marginRight: theme.spacing(1) } } }; }); var shortDateRegExp = /^(\d{4})-(\d{2})-(\d{2})$/; function createFilterValue(value, minOrMax) { var match = value.match(shortDateRegExp); if (!match) return value; return minOrMax === 'min' ? new Date(+match[1], +match[2] - 1, +match[3]).toISOString() : new Date(+match[1], +match[2] - 1, +match[3], 23, 59, 59, 999).toISOString(); } //# sourceMappingURL=DateFilter.js.map