All files / web/bundles/pimui/js/channel/form/properties/general locales.js

96.3% Statements 26/27
75% Branches 3/4
100% Functions 9/9
96.3% Lines 26/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120                  27x                                 27x                       31x 31x   31x   31x             85x       85x 85x 85x               85x   85x     85x                 18x   18x 13x   873x         18x                 18x 18x 18x             17x 17x   17x 16x   16x              
'use strict';
 
/**
 * Module used to display the locales general properties field of a channel
 *
 * @author    Alexandr Jeliuc <alex@jeliuc.com>
 * @copyright 2017 Akeneo SAS (http://www.akeneo.com)
 * @license   http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */
define([
    'jquery',
    'underscore',
    'oro/translator',
    'pim/form',
    'pim/fetcher-registry',
    'pim/template/channel/tab/properties/general/locales',
    'jquery.select2'
],
    function (
        $,
        _,
        __,
        BaseForm,
        FetcherRegistry,
        template
    ) {
        return BaseForm.extend({
            className: 'AknFieldContainer',
            template: _.template(template),
            initialLocales: null,
            locales: null,
 
            /**
             * Configures this extension.
             *
             * @return {Promise}
             */
            configure: function () {
                this.listenTo(this.getRoot(), 'pim_enrich:form:entity:bad_request', this.render.bind(this));
                this.listenTo(this.getRoot(), 'pim_enrich:form:entity:post_save', this.setCurrentLocales.bind(this));
 
                this.initialLocales = this.getFormData().locales;
 
                return BaseForm.prototype.configure.apply(this, arguments);
            },
 
            /**
             * {@inheritdoc}
             */
            render: function () {
                Iif (!this.configured) {
                    return this;
                }
 
                FetcherRegistry.getFetcher('locale').fetchAll().then(function (locales) {
                    this.locales = locales;
                    this.$el.html(this.template({
                        currentLocales: this.getFormData().locales,
                        locales: locales,
                        label: __('pim_enrich.entity.locale.plural_label'),
                        requiredLabel: __('pim_common.required_label'),
                        errors: this.getParent().getValidationErrorsForField('locales')
                    }));
 
                    this.$('.select2').select2().on('change', this.updateState.bind(this));
 
                    this.renderExtensions();
                }.bind(this));
 
                return this;
            },
 
            /**
             * Sets new locales on change.
             *
             * @param {Object} event
             */
            updateState: function (event) {
                var localesToSet = [];
 
                _.each(event.val, function (code) {
                    localesToSet.push(
                        _.find(this.locales, function (locale) {
                            return locale.code === code;
                        })
                    );
                }.bind(this));
 
                this.setLocales(localesToSet);
            },
 
            /**
             * Sets specified locales into root model.
             *
             * @param {Array} locales
             */
            setLocales: function (locales) {
                var data = this.getFormData();
                data.locales = locales;
                this.setData(data);
            },
 
            /**
             * Sets current locales
             */
            setCurrentLocales: function () {
                var oldLocales = this.initialLocales;
                var newLocales = this.getFormData().locales;
 
                if (!_.isEqual(oldLocales, newLocales)) {
                    this.getRoot().trigger('pim_enrich:form:entity:locales_updated');
 
                    this.initialLocales = newLocales;
                }
 
            }
        });
    }
);