NodeBB/NodeBB

View on GitHub
public/src/client/account/edit/username.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

define('forum/account/edit/username', [
    'forum/account/header', 'api', 'slugify', 'alerts',
], function (header, api, slugify, alerts) {
    const AccountEditUsername = {};

    AccountEditUsername.init = function () {
        header.init();

        $('#submitBtn').on('click', function updateUsername() {
            const userData = {
                uid: $('#inputUID').val(),
                username: $('#inputNewUsername').val(),
                password: $('#inputCurrentPassword').val(),
            };

            if (!userData.username) {
                return;
            }

            if (userData.username === userData.password) {
                return alerts.error('[[user:username-same-as-password]]');
            }

            const btn = $(this);
            btn.addClass('disabled').find('i').removeClass('hide');

            api.put('/users/' + userData.uid, userData).then((response) => {
                const userslug = slugify(userData.username);
                if (userData.username && userslug && parseInt(userData.uid, 10) === parseInt(app.user.uid, 10)) {
                    $('[component="header/profilelink"]').attr('href', config.relative_path + '/user/' + userslug);
                    $('[component="header/profilelink/edit"]').attr('href', config.relative_path + '/user/' + userslug + '/edit');
                    $('[component="header/profilelink/settings"]').attr('href', config.relative_path + '/user/' + userslug + '/settings');
                    $('[component="header/username"]').text(userData.username);
                    $('[component="header/usericon"]').css('background-color', response['icon:bgColor']).text(response['icon:text']);
                    $('[component="avatar/icon"]').css('background-color', response['icon:bgColor']).text(response['icon:text']);
                }

                ajaxify.go('user/' + userslug + '/edit');
            }).catch(alerts.error)
                .finally(() => {
                    btn.removeClass('disabled').find('i').addClass('hide');
                });

            return false;
        });
    };

    return AccountEditUsername;
});