UNPKG

use-invariant

Version:

- <a target="_blank" rel="noopener noreferrer" href='https://codesandbox.io/s/usefetch-in-nextjs-nn9fm'>Example - Next.js</a> - <a target="_blank" rel="noopener noreferrer" href='https://codesandbox.io/embed/km04k9k9x5'>Examples - create-react-app</a>

39 lines 1.7 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const _1 = __importStar(require(".")); const react_1 = require("react"); const utils_1 = require("./utils"); exports.useQuery = (arg1, arg2) => { const context = react_1.useContext(_1.FetchContext); // we should only need to check this on 1st render react_1.useEffect(() => { if (Array.isArray(arg1)) { utils_1.invariant(!!context.url, 'You need to wrap your application with <Provider url="https://your-site.com"></Provider>'); } }, []); // regular no context: useQuery('https://example.com', `graphql QUERY`) let url = arg1; let QUERY = arg2; // tagged template literal with context: useQuery`graphql QUERY` if (Array.isArray(arg1) && context.url) { utils_1.invariant(!arg2, 'You cannot have a 2nd argument when using tagged template literal syntax with useQuery.'); url = context.url; QUERY = arg1[0]; // regular with context: useQuery(`graphql QUERY`) } else if (arg1 && !arg2 && context.url) { url = context.url; QUERY = arg1; } const request = _1.default(url); const query = react_1.useCallback((inputs) => request.query(QUERY, inputs), []); return Object.assign([request.data, request.loading, request.error, query], Object.assign({}, request, { query })); }; //# sourceMappingURL=useQuery.js.map