Path: blob/master/src/packages/frontend/account/settings/email-verification.tsx
1503 views
/*1* This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.2* License: MS-RSL – see LICENSE.md for details3*/45import { Map } from "immutable";6import { defineMessage, FormattedMessage, useIntl } from "react-intl";78import { alert_message } from "@cocalc/frontend/alerts";9import { Button } from "@cocalc/frontend/antd-bootstrap";10import {11Rendered,12useEffect,13useIsMountedRef,14useState,15} from "@cocalc/frontend/app-framework";16import { LabeledRow } from "@cocalc/frontend/components";17import { webapp_client } from "@cocalc/frontend/webapp-client";1819interface Props {20email_address?: string;21email_address_verified?: Map<string, boolean>;22}2324export const emailVerificationMsg = defineMessage({25id: "account.settings.email-verification.button.status",26defaultMessage: `{disabled_button, select, true {Email Sent} other {Send Verification Email}}`,27});2829export function EmailVerification({30email_address,31email_address_verified,32}: Props) {33const intl = useIntl();3435const is_mounted = useIsMountedRef();36const [disabled_button, set_disabled_button] = useState(false);3738useEffect(() => {39set_disabled_button(false);40}, [email_address]);4142async function verify(): Promise<void> {43try {44await webapp_client.account_client.send_verification_email();45} catch (err) {46const err_msg = `Problem sending email verification: ${err}`;47console.log(err_msg);48alert_message({ type: "error", message: err_msg });49} finally {50if (is_mounted.current) {51set_disabled_button(true);52}53}54}5556function render_status(): Rendered {57if (email_address == null) {58return (59<span>60<FormattedMessage61id="account.settings.email-verification.unknown"62defaultMessage={"Unknown"}63/>64</span>65);66} else {67if (email_address_verified?.get(email_address)) {68return (69<span style={{ color: "green" }}>70<FormattedMessage71id="account.settings.email-verification.verified"72defaultMessage={"Verified"}73/>74</span>75);76} else {77return (78<>79<span key={1} style={{ color: "red", paddingRight: "3em" }}>80<FormattedMessage81id="account.settings.email-verification.button.label"82defaultMessage={"Not Verified"}83/>84</span>85<Button86onClick={verify}87bsStyle="success"88disabled={disabled_button}89>90{intl.formatMessage(emailVerificationMsg, { disabled_button })}91</Button>92</>93);94}95}96}9798return (99<LabeledRow100label={intl.formatMessage({101id: "account.settings.email-verification.label",102defaultMessage: "Email verification",103})}104style={{ marginBottom: "15px" }}105>106<div>107<FormattedMessage108id="account.settings.email-verification.status"109defaultMessage={"Status: {status}"}110values={{ status: render_status() }}111/>112</div>113</LabeledRow>114);115}116117118