UNPKG

@stackend/react

Version:

React components for Stackend

169 lines (168 loc) 7.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactRedux = require("react-redux"); var Sc = _interopRequireWildcard(require("./ProductImageModal.style")); var _graphql = require("@stackend/api/util/graphql"); var _reactModal = _interopRequireDefault(require("react-modal")); var _Modal = require("../modal/Modal.style"); var _shopUiActions = require("./shopUiActions"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function mapState(_ref) { var shopUi = _ref.shopUi, shop = _ref.shop; if (shopUi.productImageModal) { var product = shop.products[shopUi.productImageModal.handle] || null; if (product) { var image = shopUi.productImageModal.image; return { product: product, image: image, isOpen: !!image }; } } return { product: null, image: null, isOpen: false }; } var mapDispatch = { closeProductImageModal: _shopUiActions.closeProductImageModal }; var connector = (0, _reactRedux.connect)(mapState, mapDispatch); var ProductImageModal = function (_Component) { _inheritsLoose(ProductImageModal, _Component); function ProductImageModal() { var _this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _Component.call.apply(_Component, [this].concat(args)) || this; _defineProperty(_assertThisInitialized(_this), "state", { image: null, productId: '' }); _defineProperty(_assertThisInitialized(_this), "_onPrevClicked", function () { var product = _this.props.product; var image = _this.state.image; if (!image || !product) { return; } var img = image; var prev = null; var found = false; (0, _graphql.forEachGraphQLList)(product.images, function (i) { if (!found) { if (i.url === img.url) { found = true; } else { prev = i; } } }); if (!prev) { prev = product.images.edges.length !== 0 ? product.images.edges[product.images.edges.length - 1].node : img; } _this.setState({ image: prev }); }); _defineProperty(_assertThisInitialized(_this), "_onNextClicked", function () { var product = _this.props.product; var image = _this.state.image; if (!image || !product) { return; } var img = image; var next = null; var nextIsTarget = false; (0, _graphql.forEachGraphQLList)(product.images, function (i) { if (nextIsTarget) { next = i; nextIsTarget = false; } else { if (i.url === img.url) { nextIsTarget = true; } } }); if (!next) { next = product.images.edges.length !== 0 ? product.images.edges[0].node : img; } _this.setState({ image: next }); }); _defineProperty(_assertThisInitialized(_this), "onCloseClicked", function () { var closeProductImageModal = _this.props.closeProductImageModal; closeProductImageModal(); }); return _this; } ProductImageModal.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) { var _props$product; if (!state.image && props.image || ((_props$product = props.product) == null ? void 0 : _props$product.id) !== state.productId) { var _props$product2; return { image: props.image, productId: ((_props$product2 = props.product) == null ? void 0 : _props$product2.id) || '' }; } return state; }; var _proto = ProductImageModal.prototype; _proto.render = function render() { var _this$props = this.props, product = _this$props.product, isOpen = _this$props.isOpen; if (!product) { return null; } var image = this.state.image; if (!image) { return null; } var i = image; return _react.default.createElement(_reactModal.default, { isOpen: isOpen, className: "stackend-product-image-modal stackend-modal-full-screen stackend-modal-not-scrolled", ariaHideApp: false, portalClassName: "stackend stackend-modal StackendModalPortal ReactModalPortal" }, _react.default.createElement(_Modal.ModalContent, null, _react.default.createElement(Sc.ProductImageModal, null, _react.default.createElement("button", { className: "stackend-close stackend-icon", onClick: this.onCloseClicked }, _react.default.createElement("i", { className: "material-icons" }, "close")), _react.default.createElement("button", { className: "stackend-previous stackend-icon", onClick: this._onPrevClicked }, _react.default.createElement("i", { className: "material-icons" }, "navigate_before")), _react.default.createElement("button", { className: "stackend-next stackend-icon", onClick: this._onNextClicked }, _react.default.createElement("i", { className: "material-icons" }, "navigate_next")), _react.default.createElement("img", { src: i.url__originalSrc || i.url, alt: i.altText || '' })))); }; return ProductImageModal; }(_react.Component); var _default = connector(ProductImageModal); exports.default = _default; //# sourceMappingURL=ProductImageModal.js.map