UNPKG

google-recaptcha-v3

Version:

A hook google-recaptcha-v3 for react

37 lines (36 loc) 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = require("react"); var useGoogleRecaptcha = function (siteKey, action, options) { if (options === void 0) { options = {}; } var _a = (0, react_1.useState)(null), token = _a[0], setToken = _a[1]; var _b = (0, react_1.useState)(null), error = _b[0], setError = _b[1]; var _c = options.language, language = _c === void 0 ? 'en' : _c; var loadReCaptcha = (0, react_1.useCallback)(function () { if (window.grecaptcha) { window.grecaptcha.ready(function () { window.grecaptcha .execute(siteKey, { action: action }) .then(function (token) { return setToken(token); }) .catch(function (err) { return setError("ReCAPTCHA execute failed: ".concat(err)); }); }); } else { setError('grecaptcha is not loaded.'); } }, [siteKey, action]); (0, react_1.useEffect)(function () { var script = document.createElement("script"); script.src = "https://www.google.com/recaptcha/api.js?render=".concat(siteKey, "&hl=").concat(language); script.async = true; script.defer = true; script.onload = loadReCaptcha; script.onerror = function () { return setError('Failed to load ReCAPTCHA script.'); }; document.body.appendChild(script); return function () { document.body.removeChild(script); }; }, [siteKey, action, language, loadReCaptcha]); return { token: token, error: error, fetchCaptcha: loadReCaptcha }; }; exports.default = useGoogleRecaptcha;