"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var antd_1 = require("antd");
var database_1 = __importDefault(require("lib/hooks/database"));
var loading_1 = __importDefault(require("components/share/loading"));
var save_button_1 = __importDefault(require("components/misc/save-button"));
var post_1 = __importDefault(require("lib/api/post"));
var register_1 = __importDefault(require("../register"));
var api_1 = __importDefault(require("lib/hooks/api"));
var misc_1 = require("@cocalc/util/misc");
var emailDesc = "You can sign in using this email address and use it\nto reset your password.  You\nwill also receive email notifications about chats and other activity.   People\ncan add you as collaborators to projects by searching for your exact\nemail address. (There is no way to do a search for partial email\naddresses, and your email address is never revealed to other users.)";
(0, register_1.default)({
    path: "account/email",
    title: "Email Address",
    icon: "paper-plane",
    desc: "Change your email address.",
    search: emailDesc,
    Component: function () {
        var _a, _b;
        var hasPassword = (0, api_1.default)("auth/has-password");
        var _c = (0, database_1.default)({
            accounts: { email_address: null },
        }), loading = _c.loading, value = _c.value;
        var _d = __read((0, react_1.useState)(""), 2), password = _d[0], setPassword = _d[1];
        var _e = __read((0, react_1.useState)(""), 2), lastSuccess = _e[0], setLastSuccess = _e[1];
        var _f = __read((0, react_1.useState)(undefined), 2), original = _f[0], setOriginal = _f[1];
        var _g = __read((0, react_1.useState)(undefined), 2), edited = _g[0], setEdited = _g[1];
        (0, react_1.useEffect)(function () {
            if (!loading && original === undefined && value.accounts != null) {
                setOriginal(value.accounts);
                setEdited(value.accounts);
            }
        }, [loading]);
        function onChange(field) {
            return function (e) {
                var _a;
                return setEdited(__assign(__assign({}, edited), (_a = {}, _a[field] = e.target.value, _a)));
            };
        }
        if (original == null || edited == null || !hasPassword.result) {
            return (0, jsx_runtime_1.jsx)(loading_1.default, {});
        }
        return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)("form", { children: (0, jsx_runtime_1.jsxs)(antd_1.Space, __assign({ direction: "vertical", style: { width: "100%", maxWidth: "500px" } }, { children: [(0, jsx_runtime_1.jsx)("b", { children: "Your email address" }), " ", emailDesc, (0, jsx_runtime_1.jsx)(antd_1.Input, { addonBefore: "Email address", defaultValue: original.email_address, onChange: onChange("email_address") }), (0, jsx_runtime_1.jsx)(antd_1.Input.Password, { addonBefore: hasPassword.result.hasPassword
                                ? "Current password"
                                : "Choose a password", onChange: function (e) { return setPassword(e.target.value); } }), (0, jsx_runtime_1.jsx)(save_button_1.default, { disabled: password.length < 6 ||
                                !(0, misc_1.is_valid_email_address)((_a = edited.email_address) !== null && _a !== void 0 ? _a : "") ||
                                lastSuccess == password + ((_b = edited.email_address) !== null && _b !== void 0 ? _b : ""), edited: edited, original: original, setOriginal: setOriginal, onSave: function (_a) {
                                var email_address = _a.email_address;
                                return __awaiter(void 0, void 0, void 0, function () {
                                    return __generator(this, function (_b) {
                                        switch (_b.label) {
                                            case 0: return [4 /*yield*/, (0, post_1.default)("/accounts/set-email-address", {
                                                    email_address: email_address,
                                                    password: password,
                                                })];
                                            case 1:
                                                _b.sent();
                                                setLastSuccess(password + email_address);
                                                return [2 /*return*/];
                                        }
                                    });
                                });
                            }, isValid: function () { return password.length >= 6; } }), lastSuccess == password + edited.email_address && ((0, jsx_runtime_1.jsx)(antd_1.Alert, { showIcon: true, type: "success", message: "Email address and password successfully saved." }))] })) }) }));
    },
});
//# sourceMappingURL=email.js.map