UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

80 lines (77 loc) • 1.86 kB
import { useEffect, useState } from "react"; import { Image } from "react-native"; import { NitroModules } from "react-native-nitro-modules"; import { rethrowNativeError } from "../nativeError.native.js"; var hybrid; function getModule() { if (hybrid === void 0) { hybrid = NitroModules.hasHybridObject("OneFonts") ? NitroModules.createHybridObject("OneFonts") : null; } return hybrid; } function resolveFontUri(name, source) { if (typeof source === "string") { return source; } var resolved = Image.resolveAssetSource(source); if (!resolved) { throw new Error(`Fonts.load: "${name}" is not a font asset`); } return resolved.uri; } async function load(fonts) { var module = getModule(); if (!module) { throw new Error("fonts need a native build"); } var entries = Object.entries(fonts).map(function(param) { var [name, source] = param; return { name, uri: resolveFontUri(name, source) }; }); await Promise.all(entries.map(function(param) { var { name, uri } = param; return module.load(name, uri).catch(rethrowNativeError); })); } function isLoaded(name) { var module = getModule(); if (!module) { return false; } return module.isLoaded(name); } var Fonts = { load, isLoaded }; function useFonts(fonts) { var [loaded, setLoaded] = useState(function() { return Object.keys(fonts).every(isLoaded); }); var [error, setError] = useState(null); useEffect(function() { if (loaded) { return; } var cancelled = false; setError(null); load(fonts).then(function() { if (!cancelled) { setLoaded(true); } }, function(reason) { if (!cancelled) { setError(reason instanceof Error ? reason : new Error(String(reason))); } }); return function() { cancelled = true; }; }, []); return [loaded, error]; } export { Fonts, useFonts }; //# sourceMappingURL=index.native.js.map