one
Version:
One is a React framework for web, iOS, and Android apps.
80 lines (77 loc) • 1.86 kB
JavaScript
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