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.74 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.useMutation = (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: useMutation('https://example.com', `graphql MUTATION`)
let url = arg1;
let MUTATION = arg2;
// tagged template literal with context: useMutation`graphql MUTATION`
if (Array.isArray(arg1) && context.url) {
utils_1.invariant(!arg2, 'You cannot have a 2nd argument when using tagged template literal syntax with useMutation.');
url = context.url;
MUTATION = arg1[0];
// regular with context: useMutation(`graphql MUTATION`)
}
else if (arg1 && !arg2 && context.url) {
url = context.url;
MUTATION = arg1;
}
const request = _1.default(url);
const mutate = react_1.useCallback((inputs) => request.mutate(MUTATION, inputs), []);
return Object.assign([request.data, request.loading, request.error, mutate], Object.assign({}, request, { mutate }));
};
//# sourceMappingURL=useMutation.js.map