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
JavaScript
;
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