UNPKG

@shopify/react-graphql

Version:

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

46 lines (39 loc) 1.47 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js'); 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( /*#__PURE__*/_rollupPluginBabelHelpers.asyncToGenerator(function* () { if (!isDocumentNode(documentOrAsyncDocument)) { try { const resolved = yield 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;