@shopify/react-graphql
Version:
Tools for creating type-safe and asynchronous GraphQL components for React
43 lines (38 loc) • 1.32 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var reactHooks = require('@shopify/react-hooks');
var reactAsync = require('@shopify/react-async');
function useGraphQLDocument(documentOrAsyncDocument) {
const [document, setDocument] = React.useState(() => {
if (isDocumentNode(documentOrAsyncDocument)) {
return documentOrAsyncDocument;
} else {
return documentOrAsyncDocument.resolver.resolved;
}
});
const mounted = reactHooks.useMountedRef();
const loadDocument = React.useCallback(async () => {
if (!isDocumentNode(documentOrAsyncDocument)) {
try {
const resolved = await documentOrAsyncDocument.resolver.resolve();
if (mounted.current) {
setDocument(resolved);
}
} catch (error) {
throw Error('error loading GraphQL document');
}
}
}, [documentOrAsyncDocument, mounted]);
React.useEffect(() => {
if (!document) {
loadDocument();
}
}, [document, loadDocument]);
reactAsync.useAsyncAsset(isDocumentNode(documentOrAsyncDocument) ? undefined : documentOrAsyncDocument.resolver.id);
return document;
}
function isDocumentNode(arg) {
return Boolean(arg && arg.kind && arg.kind === 'Document');
}
exports["default"] = useGraphQLDocument;