@turnkey/react-wallet-kit
Version:
The easiest and most powerful way to integrate Turnkey's Embedded Wallets into your React applications.
187 lines (184 loc) • 7.31 kB
JavaScript
import { slicedToArray as _slicedToArray, asyncToGenerator as _asyncToGenerator, regeneratorRuntime as _regeneratorRuntime } from '../../_virtual/_rollupPluginBabelHelpers.mjs';
import { jsxs, jsx } from 'react/jsx-runtime';
import { faEnvelope } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Input } from '@headlessui/react';
import { useModal } from '../../providers/modal/Hook.mjs';
import { useTurnkey } from '../../providers/client/Hook.mjs';
import { ActionButton } from '../design/Buttons.mjs';
import { useState } from 'react';
import clsx from 'clsx';
import { OtpVerification } from '../auth/OTP.mjs';
import { SuccessPage } from '../design/Success.mjs';
import { OtpType } from '@turnkey/core';
function UpdateEmail(params) {
var onSuccess = params.onSuccess,
onError = params.onError,
successPageDuration = params.successPageDuration;
var _useTurnkey = useTurnkey(),
user = _useTurnkey.user,
updateUserEmail = _useTurnkey.updateUserEmail,
initOtp = _useTurnkey.initOtp,
verifyOtp = _useTurnkey.verifyOtp;
var _useModal = useModal(),
isMobile = _useModal.isMobile,
pushPage = _useModal.pushPage,
closeModal = _useModal.closeModal;
var email = (user === null || user === void 0 ? void 0 : user.userEmail) || "";
var _useState = useState(email),
_useState2 = _slicedToArray(_useState, 2),
emailInput = _useState2[0],
setEmailInput = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
isLoading = _useState4[0],
setIsLoading = _useState4[1];
var isValidEmail = function isValidEmail(e) {
return e.length > 0 && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e) && e !== email;
};
var handleContinue = /*#__PURE__*/function () {
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
var otpId;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
if (!isValidEmail(emailInput)) {
_context2.next = 15;
break;
}
_context2.prev = 1;
setIsLoading(true);
_context2.next = 5;
return initOtp({
otpType: OtpType.Email,
contact: emailInput
});
case 5:
otpId = _context2.sent;
pushPage({
key: "Verify OTP",
content: jsx(OtpVerification, {
contact: emailInput,
otpId: otpId,
otpType: OtpType.Email,
onContinue: function () {
var _onContinue = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(otpCode) {
var _yield$verifyOtp, verificationToken, res;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return verifyOtp({
otpId: otpId,
otpCode: otpCode,
contact: emailInput,
otpType: OtpType.Email
});
case 2:
_yield$verifyOtp = _context.sent;
verificationToken = _yield$verifyOtp.verificationToken;
_context.next = 6;
return updateUserEmail({
email: emailInput,
verificationToken: verificationToken,
userId: user.userId
});
case 6:
res = _context.sent;
handleSuccess(res);
case 8:
case "end":
return _context.stop();
}
}, _callee);
}));
function onContinue(_x) {
return _onContinue.apply(this, arguments);
}
return onContinue;
}()
}),
showTitle: false
});
_context2.next = 12;
break;
case 9:
_context2.prev = 9;
_context2.t0 = _context2["catch"](1);
onError(_context2.t0);
case 12:
_context2.prev = 12;
setIsLoading(false);
return _context2.finish(12);
case 15:
case "end":
return _context2.stop();
}
}, _callee2, null, [[1, 9, 12, 15]]);
}));
return function handleContinue() {
return _ref.apply(this, arguments);
};
}();
var handleSuccess = function handleSuccess(userId) {
onSuccess(userId);
if (!successPageDuration) {
closeModal();
return;
}
pushPage({
key: "success",
content: jsx(SuccessPage, {
text: "Email updated successfully!",
duration: successPageDuration,
onComplete: function onComplete() {
closeModal();
}
}),
preventBack: true,
showTitle: false
});
};
var handleKeyDown = function handleKeyDown(e) {
if (e.key === "Enter") {
handleContinue();
}
};
return jsxs("div", {
className: clsx("mt-8", isMobile ? "w-full" : "w-72"),
children: [jsxs("div", {
className: "my-6 flex flex-col items-center",
children: [jsx(FontAwesomeIcon, {
icon: faEnvelope,
size: "2xl"
}), jsx("div", {
className: "text-2xl font-bold py-2 text-center",
children: params !== null && params !== void 0 && params.title ? params.title : "Update your email"
}), (params === null || params === void 0 ? void 0 : params.subTitle) && jsx("div", {
className: "text-sm text-icon-text-light dark:text-icon-text-dark text-center !p-0",
children: params.subTitle
})]
}), jsxs("div", {
className: "flex flex-col gap-4 my-3",
children: [jsx(Input, {
type: "email",
placeholder: email ? email : "your@email.com",
className: "w-full py-3 px-4 rounded-md text-inherit bg-button-light dark:bg-button-dark border border-modal-background-dark/20 dark:border-modal-background-light/20 focus:outline-primary-light focus:dark:outline-primary-dark focus:outline-[1px] focus:outline-offset-0 box-border",
value: emailInput,
onChange: function onChange(e) {
return setEmailInput(e.target.value);
},
onKeyDown: handleKeyDown
}), jsx(ActionButton, {
onClick: handleContinue,
disabled: !isValidEmail(emailInput),
loading: isLoading,
className: "w-full max-w-md bg-primary-light dark:bg-primary-dark text-primary-text-light dark:text-primary-text-dark",
spinnerClassName: "text-primary-text-light dark:text-primary-text-dark",
children: "Continue"
})]
})]
});
}
export { UpdateEmail };
//# sourceMappingURL=UpdateEmail.mjs.map