All files / web/bundles/pimui/js/family/form/properties/general attribute-as-image.js

94.44% Statements 17/18
50% Branches 2/4
100% Functions 8/8
94.44% Lines 17/18

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                  61x                                             61x                   77x             123x       123x 123x                       123x   123x                   2x 2x 2x 2x                       123x 1573x     123x   123x     123x                  
'use strict';
 
/**
 * Attributes used as label field view
 *
 * @author    Pierre Allard <pierre.allard@akeneo.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/i18n',
        'pim/user-context',
        'pim/security-context',
        'pim/template/family/tab/general/attribute-as-image',
        'jquery.select2'
    ],
    function (
        $,
        _,
        __,
        BaseForm,
        FetcherRegistry,
        i18n,
        UserContext,
        SecurityContext,
        template
    ) {
        return BaseForm.extend({
            className: 'AknFieldContainer',
            template: _.template(template),
            errors: [],
            catalogLocale: UserContext.get('catalogLocale'),
 
            /**
             * {@inheritdoc}
             */
            initialize: function (config) {
                this.config = config.config;
            },
 
            /**
             * {@inheritdoc}
             */
            render: function () {
                Iif (!this.configured) {
                    return this;
                }
 
                this.getAvailableAttributes().then(function (attributes) {
                    this.$el.html(this.template({
                        i18n: i18n,
                        catalogLocale: this.catalogLocale,
                        attributes: attributes,
                        currentAttribute: this.getFormData().attribute_as_image,
                        fieldBaseId: this.config.fieldBaseId,
                        errors: this.errors,
                        label: __(this.config.label),
                        emptyLabel: __(this.config.emptyLabel),
                        isReadOnly: !SecurityContext.isGranted('pim_enrich_family_edit_properties')
                    }));
 
                    this.$('.select2').select2().on('change', this.updateState.bind(this));
 
                    this.renderExtensions();
                }.bind(this));
            },
 
            /**
             * Update object state on property change
             *
             * @param event
             */
            updateState: function (event) {
                let data = this.getFormData();
                const value = event.currentTarget.value;
                data.attribute_as_image = ('no_attribute_as_image' === value) ? null : event.currentTarget.value;
                this.setData(data);
            },
 
            /**
             * Returns the list of available attributes for this extension:
             * - Should belong to the family
             * - Should be a valid attribute type
             * - Should not be neither localizable nor scopable
             *
             * @returns {Promise}
             */
            getAvailableAttributes: function () {
                const imageAttributes = this.getFormData().attributes.filter((attribute) => {
                    return this.config.validAttributeTypes.includes(attribute.type);
                });
 
                const imageAttributeCodes = _.pluck(imageAttributes, 'code');
 
                return FetcherRegistry.getFetcher('attribute')
                    .fetchByIdentifiers(imageAttributeCodes)
                    .then(function (attributes) {
                        return _.where(
                            attributes,
                            { scopable: false, localizable: false }
                        );
                    });
            }
        });
    }
);