@pdftron/webviewer-react-toolkit
Version:
A React component library for integrating with PDFTron WebViewer API.
52 lines (51 loc) • 2.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Image = void 0;
var tslib_1 = require("tslib");
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var react_1 = tslib_1.__importStar(require("react"));
var data_1 = require("../../data");
exports.Image = react_1.forwardRef(function (_a, ref) {
var src = _a.src, pending = _a.pending, onRenderLoading = _a.onRenderLoading, onRenderFallback = _a.onRenderFallback, alt = _a.alt, className = _a.className, imgProps = tslib_1.__rest(_a, ["src", "pending", "onRenderLoading", "onRenderFallback", "alt", "className"]);
var sourceIsNotPromise = typeof src === 'string' || !src;
var _b = react_1.useState(!sourceIsNotPromise), loading = _b[0], setLoading = _b[1];
var _c = react_1.useState(sourceIsNotPromise ? src : undefined), source = _c[0], setSource = _c[1];
var getSource = react_1.useCallback(function (srcGetter) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var fetchedSource, _a;
return tslib_1.__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*/, data_1.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*/];
}
});
}); }, []);
react_1.useEffect(function () {
if (sourceIsNotPromise) {
setLoading(false);
setSource(src || undefined);
return;
}
getSource(src);
}, [getSource, sourceIsNotPromise, src]);
var imageClass = classnames_1.default('ui__image', className);
if (loading || pending)
return react_1.default.createElement(react_1.default.Fragment, null, onRenderLoading === null || onRenderLoading === void 0 ? void 0 : onRenderLoading());
if (!source)
return react_1.default.createElement(react_1.default.Fragment, null, onRenderFallback === null || onRenderFallback === void 0 ? void 0 : onRenderFallback());
return react_1.default.createElement("img", tslib_1.__assign({}, imgProps, { alt: alt, src: source, className: imageClass, ref: ref }));
});