vue-recaptcha
Version:
ReCAPTCHA vue component
75 lines (71 loc) • 2.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RecaptchaV2State = void 0;
exports.useChallengeV2 = useChallengeV2;
var _shared = require("@vueuse/shared");
var _vueDemi = require("vue-demi");
var _context = require("./context.cjs");
var RecaptchaV2State = /* @__PURE__ */(RecaptchaV2State2 => {
RecaptchaV2State2["Init"] = "init";
RecaptchaV2State2["Verified"] = "verified";
RecaptchaV2State2["Expired"] = "expired";
RecaptchaV2State2["Error"] = "error";
return RecaptchaV2State2;
})(RecaptchaV2State || {});
exports.RecaptchaV2State = RecaptchaV2State;
function useChallengeV2({
root = (0, _vueDemi.ref)(),
options = {}
}) {
const siteKey = (0, _context.useAssertV2SiteKey)();
const widgetID = (0, _vueDemi.ref)();
const proxy = (0, _context.useRecaptchaProxy)();
const verify = (0, _shared.createEventHook)();
const expired = (0, _shared.createEventHook)();
const error = (0, _shared.createEventHook)();
const rootRef = (0, _shared.toRef)(root);
const state = (0, _vueDemi.ref)("init" /* Init */);
(0, _shared.whenever)(rootRef, async el => {
const id = await proxy.render(el, {
...options,
sitekey: siteKey,
// eslint-disable-next-line @typescript-eslint/no-misused-promises
callback: verify.trigger,
// eslint-disable-next-line @typescript-eslint/no-misused-promises
"expired-callback": expired.trigger,
// eslint-disable-next-line @typescript-eslint/no-misused-promises
"error-callback": error.trigger
});
widgetID.value = id;
});
verify.on(() => {
state.value = "verified" /* Verified */;
});
expired.on(() => {
state.value = "expired" /* Expired */;
});
error.on(() => {
state.value = "error" /* Error */;
});
return {
root: rootRef,
widgetID,
execute() {
if (typeof widgetID.value !== "undefined") {
proxy.execute(widgetID.value);
}
},
reset() {
state.value = "init" /* Init */;
if (typeof widgetID.value !== "undefined") {
proxy.reset(widgetID.value);
}
},
state,
onVerify: verify.on,
onExpired: expired.on,
onError: error.on
};
}