@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
JavaScript
;
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;