@pdftron/webviewer-react-toolkit
Version:
A React component library for integrating with PDFTron WebViewer API.
49 lines (48 loc) • 2.49 kB
JavaScript
import { __assign, __awaiter, __generator, __rest } from "tslib";
import classnames from 'classnames';
import React, { forwardRef, useCallback, useEffect, useState } from 'react';
import { futureableOrLazyToFuturable } from '../../data';
export var Image = forwardRef(function (_a, ref) {
var src = _a.src, pending = _a.pending, onRenderLoading = _a.onRenderLoading, onRenderFallback = _a.onRenderFallback, alt = _a.alt, className = _a.className, imgProps = __rest(_a, ["src", "pending", "onRenderLoading", "onRenderFallback", "alt", "className"]);
var sourceIsNotPromise = typeof src === 'string' || !src;
var _b = useState(!sourceIsNotPromise), loading = _b[0], setLoading = _b[1];
var _c = useState(sourceIsNotPromise ? src : undefined), source = _c[0], setSource = _c[1];
var getSource = useCallback(function (srcGetter) { return __awaiter(void 0, void 0, void 0, function () {
var fetchedSource, _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
setLoading(true);
fetchedSource = undefined;
_b.label = 1;
case 1:
_b.trys.push([1, 3, , 4]);
return [4 /*yield*/, futureableOrLazyToFuturable(srcGetter)];
case 2:
fetchedSource = _b.sent();
return [3 /*break*/, 4];
case 3:
_a = _b.sent();
return [3 /*break*/, 4];
case 4:
setLoading(false);
setSource(fetchedSource || undefined);
return [2 /*return*/];
}
});
}); }, []);
useEffect(function () {
if (sourceIsNotPromise) {
setLoading(false);
setSource(src || undefined);
return;
}
getSource(src);
}, [getSource, sourceIsNotPromise, src]);
var imageClass = classnames('ui__image', className);
if (loading || pending)
return React.createElement(React.Fragment, null, onRenderLoading === null || onRenderLoading === void 0 ? void 0 : onRenderLoading());
if (!source)
return React.createElement(React.Fragment, null, onRenderFallback === null || onRenderFallback === void 0 ? void 0 : onRenderFallback());
return React.createElement("img", __assign({}, imgProps, { alt: alt, src: source, className: imageClass, ref: ref }));
});