azure-devops-ui
Version:
React components for building web UI in Azure DevOps
40 lines (39 loc) • 1.87 kB
JavaScript
import { __assign } from "tslib";
import "../../CommonImports";
import "../../Core/core.css";
import "./Image.css";
import * as React from "react";
import { css } from '../../Util';
export function Image(props) {
var imageUrlResolver = props.imageUrlResolver, src = props.src;
var _a = React.useState(), resolvedUrl = _a[0], setResolvedUrl = _a[1];
if (!imageUrlResolver) {
return React.createElement(PureImage, __assign({}, props));
}
React.useEffect(function () {
imageUrlResolver.resolveImageUrl(src)
.then(function (resolvedUrl) {
setResolvedUrl(resolvedUrl);
})
.catch(function () {
setResolvedUrl(src);
});
}, [imageUrlResolver, src]);
var onImageLoad = function () {
if (resolvedUrl && (imageUrlResolver === null || imageUrlResolver === void 0 ? void 0 : imageUrlResolver.onImageLoaded)) {
imageUrlResolver.onImageLoaded(resolvedUrl);
}
};
return React.createElement(PureImage, __assign({}, props, { onLoad: onImageLoad, src: resolvedUrl }));
}
function PureImage(props) {
var shouldContainImage = props.containImage || props.width !== undefined || props.height !== undefined;
var classNameOnImg = props.width === undefined && props.height === undefined;
var image = (React.createElement("img", { alt: props.alt, className: css(classNameOnImg && props.className, "bolt-image flex-noshrink", shouldContainImage && "contain"), key: props.key, role: props.role, src: props.src, onLoad: props.onLoad }));
if (props.width || props.height) {
return (React.createElement("div", { className: css(!classNameOnImg && props.className, "bolt-image-wrapper"), style: { width: props.width, height: props.height } }, image));
}
else {
return image;
}
}