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.

101 lines (85 loc) 2.88 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.StyledLazyImage = void 0; var React = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _defaultTheme = _interopRequireDefault(require("../defaultTheme")); const FORMATS = { WEBP: "webp", JPEG: "jpg", ANY: "*" }; const StyledLazyImage = _styledComponents.default.div.withConfig({ displayName: "LazyImage__StyledLazyImage", componentId: "sc-1wyc1sm-0" })(["width:100%;height:100%;position:absolute;"]); exports.StyledLazyImage = StyledLazyImage; const 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:", ";"], ({ visible }) => visible ? "1" : "0", ({ visible }) => visible ? "1" : "0", ({ theme }) => theme.orbit.durationFast, ({ lowRes }) => lowRes && "blur(3px)"); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198 Image.defaultProps = { theme: _defaultTheme.default }; const getPictureType = picture => { const TYPES = { [FORMATS.WEBP]: "image/webp", [FORMATS.JPEG]: "image/jpg", [FORMATS.ANY]: "image" }; return TYPES[picture]; }; const Picture = ({ pictures, name, loaded, onLoad, lowRes }) => /*#__PURE__*/React.createElement("picture", null, Object.keys(pictures).map(picture => /*#__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 })))); const LazyImage = ({ placeholder, original, name }) => { const [loaded, setLoaded] = React.useState(false); return /*#__PURE__*/React.createElement(StyledLazyImage, null, placeholder ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Picture, { pictures: original, name: name, loaded: loaded, onLoad: () => 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;