UNPKG

react-misc-toolbox

Version:

[ ] imageviewer | gradual scroll [ ] imageviewer | cancellable scroll

238 lines (198 loc) 15.4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SC = undefined; var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray'); var _slicedToArray3 = _interopRequireDefault(_slicedToArray2); var _taggedTemplateLiteral2 = require('babel-runtime/helpers/taggedTemplateLiteral'); var _taggedTemplateLiteral3 = _interopRequireDefault(_taggedTemplateLiteral2); var _templateObject = (0, _taggedTemplateLiteral3.default)(['\n grid-area: image;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n '], ['\n grid-area: image;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n ']), _templateObject2 = (0, _taggedTemplateLiteral3.default)(['\n grid-area: belt;\n '], ['\n grid-area: belt;\n ']), _templateObject3 = (0, _taggedTemplateLiteral3.default)(['\n justify-content: center;\n align-items: center;\n display: flex;\n cursor: pointer;\n '], ['\n justify-content: center;\n align-items: center;\n display: flex;\n cursor: pointer;\n ']), _templateObject4 = (0, _taggedTemplateLiteral3.default)(['\n grid-area: info;\n flex-direction: column;\n justify-content: space-between;\n display: flex;\n '], ['\n grid-area: info;\n flex-direction: column;\n justify-content: space-between;\n display: flex;\n ']), _templateObject5 = (0, _taggedTemplateLiteral3.default)(['\n display: grid;\n @media (max-width: ', 'px) {\n grid-template-columns: 1fr 240px 1fr;\n grid-template-rows: 40px auto 40px auto auto auto auto auto;\n grid-template-areas:\n \'nw n-nav ne\'\n \'w-nav image e-nav\'\n \'sw s-nav se\'\n \'info info info\'\n \'belt belt belt\';\n }\n @media (min-width: ', 'px) {\n grid-template-columns: 1fr 320px 400px 1fr;\n grid-template-rows: 40px 13.25rem auto auto 40px auto auto;\n grid-template-areas:\n \'nw n-nav n-nav ne\'\n \'w-nav image info e-nav\'\n \'w-nav image info e-nav\'\n \'w-nav image info e-nav\'\n \'sw s-nav s-nav se\'\n \'belt belt belt belt\';\n }\n '], ['\n display: grid;\n @media (max-width: ', 'px) {\n grid-template-columns: 1fr 240px 1fr;\n grid-template-rows: 40px auto 40px auto auto auto auto auto;\n grid-template-areas:\n \'nw n-nav ne\'\n \'w-nav image e-nav\'\n \'sw s-nav se\'\n \'info info info\'\n \'belt belt belt\';\n }\n @media (min-width: ', 'px) {\n grid-template-columns: 1fr 320px 400px 1fr;\n grid-template-rows: 40px 13.25rem auto auto 40px auto auto;\n grid-template-areas:\n \'nw n-nav n-nav ne\'\n \'w-nav image info e-nav\'\n \'w-nav image info e-nav\'\n \'w-nav image info e-nav\'\n \'sw s-nav s-nav se\'\n \'belt belt belt belt\';\n }\n ']); /* - allow calling item externally - abstract the media query */ var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _helperFunctions = require('./helperFunctions'); var _styledComponents = require('styled-components'); var _styledComponents2 = _interopRequireDefault(_styledComponents); var _ResizeListener = require('./ResizeListener'); var _Button = require('./Button'); var _Button2 = _interopRequireDefault(_Button); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var SC = exports.SC = { Image: _styledComponents2.default.div(_templateObject), Belt: _styledComponents2.default.div(_templateObject2), Nav: (0, _styledComponents2.default)(_Button.StyledButton)(_templateObject3), Info: _styledComponents2.default.div(_templateObject4), Container: _styledComponents2.default.div(_templateObject5, function (_ref) { var widthThreshold = _ref.widthThreshold; return widthThreshold; }, function (_ref2) { var widthThreshold = _ref2.widthThreshold; return widthThreshold; }) }; var Showcase = function Showcase(_ref3) { var _ref3$externallyLoade = _ref3.externallyLoadedId, externallyLoadedId = _ref3$externallyLoade === undefined ? '' : _ref3$externallyLoade, items = _ref3.items, children = _ref3.children; var _useReducer = (0, _react.useReducer)(function (state, newState) { return (0, _extends3.default)({}, state, newState); }, { activeId: externallyLoadedId ? externallyLoadedId : items[0].id, beltIsRendered: true }), _useReducer2 = (0, _slicedToArray3.default)(_useReducer, 2), state = _useReducer2[0], updateState = _useReducer2[1]; var activeId = state.activeId, beltIsRendered = state.beltIsRendered; (0, _react.useEffect)(function () { if (externallyLoadedId.length > 0) { updateState({ activeId: externallyLoadedId }); } }, [externallyLoadedId]); var ids = items.map(function (item) { return item.id; }); var nextId = ids.indexOf(activeId) === ids.length - 1 ? ids[0] : ids[ids.indexOf(activeId) + 1]; var prevId = ids.indexOf(activeId) === 0 ? ids[ids.length - 1] : ids[ids.indexOf(activeId) - 1]; var nextItem = items.find(function (item) { return item.id === nextId; }); var prevItem = items.find(function (item) { return item.id === prevId; }); var getContainerProps = function getContainerProps(_ref4) { var style = _ref4.style, className = _ref4.className, _onClick = _ref4.onClick, props = (0, _objectWithoutProperties3.default)(_ref4, ['style', 'className', 'onClick']); return (0, _extends3.default)({ style: style, className: className ? className + ' showcase__container' : 'showcase__container', onClick: function onClick(e) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } e.stopPropagation(); _onClick && _onClick.apply(undefined, [e].concat(args)); } }, props); }; var getImageProps = function getImageProps() { var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var style = _ref5.style, className = _ref5.className, _onClick2 = _ref5.onClick, props = (0, _objectWithoutProperties3.default)(_ref5, ['style', 'className', 'onClick']); return (0, _extends3.default)({ style: style, className: className ? className + ' showcase__image' : 'showcase__image', onClick: function onClick(e) { for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } e.stopPropagation(); _onClick2 && _onClick2.apply(undefined, [e].concat(args)); } }, props); }; var getInfoProps = function getInfoProps() { var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var style = _ref6.style, className = _ref6.className, _onClick3 = _ref6.onClick, props = (0, _objectWithoutProperties3.default)(_ref6, ['style', 'className', 'onClick']); return (0, _extends3.default)({ style: style, className: className ? className + ' showcase__info' : 'showcase__info', onClick: function onClick(e) { for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } e.stopPropagation(); _onClick3 && _onClick3.apply(undefined, [e].concat(args)); } }, props); }; var getBeltProps = function getBeltProps() { var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var style = _ref7.style, className = _ref7.className, _onClick4 = _ref7.onClick, props = (0, _objectWithoutProperties3.default)(_ref7, ['style', 'className', 'onClick']); return (0, _extends3.default)({ style: style, className: className ? className + ' showcase__belt' : 'showcase__belt', onClick: function onClick(e) { for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } e.stopPropagation(); _onClick4 && _onClick4.apply(undefined, [e].concat(args)); } }, props); }; var getNavProps = function getNavProps() { var _ref8 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var style = _ref8.style, className = _ref8.className, _onClick5 = _ref8.onClick, cardinal = _ref8.cardinal, props = (0, _objectWithoutProperties3.default)(_ref8, ['style', 'className', 'onClick', 'cardinal']); return (0, _extends3.default)({ style: (0, _extends3.default)({ gridArea: cardinal + '-nav' }, style), className: className ? className + ' showcase__nav showcase__' + cardinal + '-nav' : 'showcase__nav showcase__' + cardinal + '-nav', onClick: function onClick(e) { for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { args[_key5 - 1] = arguments[_key5]; } e.stopPropagation(); if (cardinal === 'w') { updateState({ activeId: prevId }); } if (cardinal === 'e') { updateState({ activeId: nextId }); } _onClick5 && _onClick5.apply(undefined, [e].concat(args)); } }, props); }; return _react2.default.createElement( _react.Fragment, null, items.map(function (item, i) { return item.id === activeId ? _react2.default.createElement( _react.Fragment, { key: i }, children({ getContainerProps: getContainerProps, getImageProps: getImageProps, getBeltProps: getBeltProps, getNavProps: getNavProps, getInfoProps: getInfoProps, beltIsRendered: beltIsRendered, updateState: updateState, item: item, nextItem: nextItem, prevItem: prevItem }) ) : null; }) ); }; Showcase.propTypes = {}; //const enhance = compose() // onlyUpdateForKeys([``]) exports.default = Showcase;