UNPKG

react-mapfilter

Version:

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

229 lines (203 loc) 6.8 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"); _Object$defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty")); var _fill = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/fill")); var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map")); var _react = _interopRequireWildcard(require("react")); var _styles = require("@material-ui/core/styles"); var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton")); var _NavigateNext = _interopRequireDefault(require("@material-ui/icons/NavigateNext")); var _NavigateBefore = _interopRequireDefault(require("@material-ui/icons/NavigateBefore")); var _clsx2 = _interopRequireDefault(require("clsx")); var _reactSwipeableViews = _interopRequireDefault(require("react-swipeable-views")); var _reactVirtualizedAutoSizer = _interopRequireDefault(require("react-virtualized-auto-sizer")); // @flow var styles = { container: { backgroundColor: 'black', position: 'relative' }, widget: { position: 'absolute', top: 0, bottom: 0, width: '100%', display: 'flex' }, buttonPrevContainer: { position: 'absolute', left: 0, top: 0, bottom: 0, display: 'flex', alignItems: 'center', pointerEvents: 'none' }, buttonNextContainer: { position: 'absolute', right: 0, top: 0, bottom: 0, display: 'flex', alignItems: 'center', pointerEvents: 'none' }, dotsWidget: { position: 'absolute', bottom: 0, width: '100%', display: 'flex', alignItems: 'flex-end', justifyContent: 'center', marginBottom: 6, pointerEvents: 'none' }, button: { color: 'white', zIndex: 400, pointerEvents: 'auto', '&:hover': { cursor: 'pointer', backgroundColor: 'rgba(0, 0, 0, 0.35)' } }, dot: { zIndex: 400, width: '12px', height: '12px', borderRadius: '50%', backgroundClip: 'content-box', border: 'solid 4px transparent', backgroundColor: 'rgba(255,255,255,0.5)', pointerEvents: 'auto', '&:hover': { cursor: 'pointer' } }, dotHighlight: { backgroundColor: 'rgba(255,255,255,1)' } }; var useStyles = (0, _styles.makeStyles)(styles); var NextPrevButtons = function NextPrevButtons(_ref) { var index = _ref.index, total = _ref.total, onChangeIndex = _ref.onChangeIndex; var cx = useStyles(); if (total <= 1) return null; var showNext = total > 1 && index < total - 1; var showPrev = total > 1 && index > 0; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", { className: cx.buttonPrevContainer }, showPrev && /*#__PURE__*/_react.default.createElement(_IconButton.default, { onClick: function onClick() { return onChangeIndex(index - 1); }, className: cx.button }, /*#__PURE__*/_react.default.createElement(_NavigateBefore.default, null))), /*#__PURE__*/_react.default.createElement("div", { className: cx.buttonNextContainer }, showNext && /*#__PURE__*/_react.default.createElement(_IconButton.default, { onClick: function onClick() { return onChangeIndex(index + 1); }, className: cx.button }, /*#__PURE__*/_react.default.createElement(_NavigateNext.default, null)))); }; var Dots = function Dots(_ref2) { var _context, _context2; var index = _ref2.index, total = _ref2.total, onChangeIndex = _ref2.onChangeIndex; var cx = useStyles(); if (total <= 1) return null; return /*#__PURE__*/_react.default.createElement("div", { className: cx.dotsWidget }, (0, _map.default)(_context = (0, _fill.default)(_context2 = Array(total)).call(_context2)).call(_context, function (_, i) { return /*#__PURE__*/_react.default.createElement("div", { key: i, role: "button", className: (0, _clsx2.default)(cx.dot, (0, _defineProperty2.default)({}, cx.dotHighlight, index === i)), onClick: function onClick() { return onChangeIndex(i); } }); })); }; var MediaItem = function MediaItem(_ref3) { var src = _ref3.src, type = _ref3.type, width = _ref3.width, height = _ref3.height; return /*#__PURE__*/_react.default.createElement("div", { style: { width: width, height: height, position: 'relative' } }, /*#__PURE__*/_react.default.createElement("img", { style: { width: width, height: height, objectFit: 'contain', display: 'block' }, src: src })); }; var MediaCarousel = function MediaCarousel(_ref4) { var items = _ref4.items, style = _ref4.style, initialIndex = _ref4.initialIndex, className = _ref4.className; var _useState = (0, _react.useState)( // Initially display the *last* image unless initialIndex is set initialIndex === undefined ? items.length - 1 : initialIndex), _useState2 = (0, _slicedToArray2.default)(_useState, 2), index = _useState2[0], setIndex = _useState2[1]; var cx = useStyles(); return /*#__PURE__*/_react.default.createElement("div", { style: style, className: (0, _clsx2.default)(cx.container, className) }, /*#__PURE__*/_react.default.createElement(_reactVirtualizedAutoSizer.default, { style: { width: '100%', height: '100%' } }, function (_ref5) { var width = _ref5.width, height = _ref5.height; return /*#__PURE__*/_react.default.createElement(_reactSwipeableViews.default, { enableMouseEvents: true, index: index, onChangeIndex: setIndex }, (0, _map.default)(items).call(items, function (_ref6, idx) { var src = _ref6.src, type = _ref6.type; return /*#__PURE__*/_react.default.createElement(MediaItem, { key: idx, src: src, type: type, width: width, height: height }); })); }), /*#__PURE__*/_react.default.createElement(Dots, { index: index, total: items.length, onChangeIndex: setIndex }), /*#__PURE__*/_react.default.createElement(NextPrevButtons, { index: index, total: items.length, onChangeIndex: setIndex })); }; var _default = MediaCarousel; exports.default = _default; //# sourceMappingURL=MediaCarousel.js.map