UNPKG

@pdftron/webviewer-react-toolkit

Version:

A React component library for integrating with PDFTron WebViewer API.

49 lines (48 loc) 2.49 kB
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 })); });