superdesk/superdesk-client-core

View on GitHub
scripts/apps/users/controllers/ChangeAvatarController.ts

Summary

Maintainability
B
5 hrs
Test Coverage
import {gettext} from 'core/utils';

ChangeAvatarController.$inject = ['$scope', 'upload', 'session', 'urls', 'betaService', 'notify', 'lodash'];
export function ChangeAvatarController($scope, upload, session, urls, beta, notify, _) {
    $scope.methods = [
        {id: 'upload', label: gettext('Upload from computer')},
        {id: 'photo', label: gettext('Take a picture')},
        {id: 'globe', label: gettext('Use a Web URL')},
    ];

    beta.isBeta().then((isBeta) => {
        if (!isBeta) {
            $scope.methods = _.reject($scope.methods, {beta: true});
        }
    });

    $scope.activate = function(method) {
        $scope.active = method;
        $scope.preview = {};
        $scope.progress = {width: 0};
    };

    $scope.activate($scope.methods[0]);

    $scope.removeImage = function() {
        return $scope.resolve(null);
    };

    $scope.upload = function(config) {
        var form: any = {};

        form.CropLeft = Math.round(Math.min(config.cords.x, config.cords.x2));
        form.CropRight = Math.round(Math.max(config.cords.x, config.cords.x2));
        form.CropTop = Math.round(Math.min(config.cords.y, config.cords.y2));
        form.CropBottom = Math.round(Math.max(config.cords.y, config.cords.y2));

        if (config.img) {
            form.media = config.img;
        } else if (config.url) {
            form.URL = config.url;
        } else {
            return;
        }

        return urls.resource('upload').then((uploadUrl) => upload.start({
            url: uploadUrl,
            method: 'POST',
            data: form,
        }).then((response) => {
            if (response.data._status === 'ERR') {
                notify.error(gettext('There was a problem with your upload'));
                return;
            }

            var pictureUrl = response.data.renditions.viewImage.href;

            $scope.locals.data.avatar = response.data._id;

            return $scope.resolve(pictureUrl);
        }, (error) => {
            notify.error(error.statusText !== '' ?
                error.statusText :
                gettext('There was a problem with your upload'));
        }, (update) => {
            $scope.progress.width = Math.round(update.loaded / update.total * 100.0);
        }));
    };
}