UNPKG

@vandrei977/react-native-render-html

Version:

The hackable, full-featured Open Source HTML rendering solution for React Native.

95 lines (93 loc) 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = SourceLoaderUri; var _react = _interopRequireWildcard(require("react")); var _RenderTTree = _interopRequireDefault(require("./RenderTTree")); var _sourceLoaderContext = _interopRequireDefault(require("./context/sourceLoaderContext")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const ERROR_STATE = { error: true, resolvedHTML: null }; async function loadHTMLResource(uri, { body, headers, method }) { const response = await fetch(uri, { body, headers, method }); if (response.ok) { const html = await response.text(); return { resolvedHTML: html, error: false }; } return ERROR_STATE; } function useUriSourceLoader({ source, onHTMLLoaded }) { const [loadState, setState] = (0, _react.useState)({ error: false, resolvedHTML: null }); const { error } = loadState; // Effect to reload on uri changes (0, _react.useEffect)(() => { let cancelled = false; if (!error) { setState({ error: false, resolvedHTML: null }); loadHTMLResource(source.uri, { body: source.body, headers: source.headers, method: source.method }).then(state => { !cancelled && setState(state); }).catch(() => { !cancelled && setState(ERROR_STATE); }); } return () => { cancelled = true; }; }, [error, source.uri, source.body, source.headers, source.method]); (0, _react.useEffect)(() => { loadState.resolvedHTML && onHTMLLoaded?.call(null, loadState.resolvedHTML); }, [loadState.resolvedHTML, onHTMLLoaded]); return loadState; } function SourceLoaderUri(props) { const { remoteErrorView, remoteLoadingView } = (0, _react.useContext)(_sourceLoaderContext.default); const { resolvedHTML, error } = useUriSourceLoader(props); if (error) { return remoteErrorView.call(null, props.source); } if (resolvedHTML === null) { return remoteLoadingView.call(null, props.source); } return /*#__PURE__*/_react.default.createElement(_RenderTTree.default, { document: resolvedHTML, baseUrl: props.source.uri }); } //# sourceMappingURL=SourceLoaderUri.js.map