frPollEditorModal.js 2.76 KB
import '../common/directives/imageUploader';

angular.module('footyroom')

.directive('frPollEditorModal', function () {
    return {
        templateUrl: '/views/ng/poll/pollEditorModal.html?2',

        scope: {
            pollId: '@',
            dismiss: '=',
            close: '=',
        },

        controllerAs: 'ctrl',
        bindToController: true,

        controller: ['$http', '$uibModal', function ($http, $uibModal) {
            var ctrl = this;
            var isSaving;

            ctrl.$onInit = $onInit;
            ctrl.submit = submit;
            ctrl.addChoice = addChoice;
            ctrl.removeChoice = removeChoice;
            ctrl.chooseImage = chooseImage;

            function $onInit() {
                if (ctrl.pollId) {
                    fetchPoll();
                } else {
                    ctrl.poll = {
                        choices: [{}, {}],
                    };
                }
            }

            function submit() {
                if (isSaving) {
                    return;
                }
                isSaving = true;


                save()

                .then(function (response) {
                    if (response.data.id) {
                        ctrl.poll.id = response.data.id;
                    }

                    ctrl.close(ctrl.poll);
                })

                .catch(function (response) {
                    ctrl.errors = response.data.errors;
                })

                .finally(function () {
                    isSaving = false;
                });
            }

            function fetchPoll() {
                $http.get('/polls/' + ctrl.pollId)

                .then(function (response) {
                    ctrl.poll = response.data;
                });
            }

            function save() {
                if (ctrl.pollId) {
                    return update();
                }
                return create();
            }

            function create() {
                return $http.post('/polls', {
                    choices: ctrl.poll.choices,
                });
            }

            function update() {
                return $http.put('/polls/' + ctrl.pollId, {
                    choices: ctrl.poll.choices,
                });
            }

            function addChoice() {
                ctrl.poll.choices.push({});
            }

            function removeChoice(index) {
                ctrl.poll.choices.splice(index, 1);
            }

            function chooseImage(choice) {
                $uibModal.open({
                    template: '<image-uploader></image-uploader>',
                })

                .result.then(function (imageUrl) {
                    choice.image = imageUrl;
                });
            }
        }],
    };
});