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