UNPKG

react-recaptcha-hook

Version:
91 lines (81 loc) 2.81 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var useScript = require('react-script-hook'); function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); var useScript__default = /*#__PURE__*/_interopDefault(useScript); function useRecaptcha({ sitekey, hideDefaultBadge = false, checkForExisting = true }) { const [recaptcha, setRecaptcha] = React__namespace.useState(); React__namespace.useEffect(() => { if (isBrowser && hideDefaultBadge) { injectStyle('.grecaptcha-badge { visibility: hidden; }'); } }, [hideDefaultBadge]); useScript__default["default"]({ src: `https://www.google.com/recaptcha/api.js?render=${sitekey}`, onload: () => window.grecaptcha.ready(() => { setRecaptcha(window.grecaptcha); }), checkForExisting }); React__namespace.useEffect(() => { if (window.grecaptcha) { window.grecaptcha.ready(() => { setRecaptcha(window.grecaptcha); }); } }, []); return action => { return new Promise((resolve, reject) => { if (recaptcha) { resolve(recaptcha.execute(sitekey, { action })); } else { reject(new Error('Recaptcha script not available')); } }); }; } const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'; const injectStyle = rule => { const styleEl = document.createElement('style'); document.head.appendChild(styleEl); const styleSheet = styleEl.sheet; if (styleSheet) styleSheet.insertRule(rule, styleSheet.cssRules.length); }; const Badge = props => { return /*#__PURE__*/React__namespace.createElement("span", props, "This site is protected by reCAPTCHA and the Google", ' ', /*#__PURE__*/React__namespace.createElement("a", { href: "https://policies.google.com/privacy", target: "_blank", rel: "noopener noreferrer" }, "Privacy Policy"), ' ', "and", ' ', /*#__PURE__*/React__namespace.createElement("a", { href: "https://policies.google.com/terms", target: "_blank", rel: "noopener noreferrer" }, "Terms of Service"), ' ', "apply."); }; exports.Badge = Badge; exports.useRecaptcha = useRecaptcha;