UNPKG

@kiwicom/orbit-components

Version:

Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.

116 lines (95 loc) 3.82 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.StyledLazyImage = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _defaultTheme = _interopRequireDefault(require("../defaultTheme")); var FORMATS = { WEBP: "webp", JPEG: "jpg", ANY: "*" }; var StyledLazyImage = _styledComponents.default.div.withConfig({ displayName: "LazyImage__StyledLazyImage", componentId: "sc-1wyc1sm-0" })(["width:100%;height:100%;position:absolute;"]); exports.StyledLazyImage = StyledLazyImage; var Image = _styledComponents.default.img.withConfig({ displayName: "LazyImage__Image", componentId: "sc-1wyc1sm-1" })(["z-index:", ";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);min-width:100%;min-height:100%;opacity:", ";transition:opacity ", " ease-in-out;filter:", ";"], function (_ref) { var visible = _ref.visible; return visible ? "1" : "0"; }, function (_ref2) { var visible = _ref2.visible; return visible ? "1" : "0"; }, function (_ref3) { var theme = _ref3.theme; return theme.orbit.durationFast; }, function (_ref4) { var lowRes = _ref4.lowRes; return lowRes && "blur(3px)"; }); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 Image.defaultProps = { theme: _defaultTheme.default }; var getPictureType = function getPictureType(picture) { var _TYPES; var TYPES = (_TYPES = {}, (0, _defineProperty2.default)(_TYPES, FORMATS.WEBP, "image/webp"), (0, _defineProperty2.default)(_TYPES, FORMATS.JPEG, "image/jpg"), (0, _defineProperty2.default)(_TYPES, FORMATS.ANY, "image"), _TYPES); return TYPES[picture]; }; var Picture = function Picture(_ref5) { var pictures = _ref5.pictures, name = _ref5.name, loaded = _ref5.loaded, onLoad = _ref5.onLoad, lowRes = _ref5.lowRes; return /*#__PURE__*/React.createElement("picture", null, Object.keys(pictures).map(function (picture) { return /*#__PURE__*/React.createElement(React.Fragment, { key: picture }, picture !== FORMATS.ANY && /*#__PURE__*/React.createElement("source", { srcSet: pictures[picture], type: getPictureType(picture) }), (picture === "jpg" || picture === "*") && /*#__PURE__*/React.createElement(Image, { onLoad: onLoad, src: pictures[picture], alt: name, visible: loaded, lowRes: lowRes })); })); }; var LazyImage = function LazyImage(_ref6) { var placeholder = _ref6.placeholder, original = _ref6.original, name = _ref6.name; var _React$useState = React.useState(false), _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2), loaded = _React$useState2[0], setLoaded = _React$useState2[1]; return /*#__PURE__*/React.createElement(StyledLazyImage, null, placeholder ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Picture, { pictures: original, name: name, loaded: loaded, onLoad: function onLoad() { return setLoaded(true); } }), /*#__PURE__*/React.createElement(Picture, { pictures: placeholder, lowRes: true, name: name, loaded: !loaded })) : /*#__PURE__*/React.createElement(Picture, { pictures: original, name: name, loaded: true })); }; var _default = LazyImage; exports.default = _default;