UNPKG

@shopify/react-graphql

Version:

Tools for creating type-safe and asynchronous GraphQL components for React

43 lines (38 loc) 1.32 kB
'use strict'; 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;