All files / web/bundles/pimui/js/product/form/attributes read-only-parent-attributes.js

100% Statements 32/32
100% Branches 12/12
100% Functions 6/6
100% Lines 32/32

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                302x                                 302x         383x   383x             5652x 5652x 3959x     1693x 1693x   1693x 760x 760x     1693x                 760x 760x     760x 760x   760x 475x 475x 475x   475x 81x   81x       81x       760x   760x 2x     760x       2x 2x   2x          
'use strict';
/**
 * This module sets parent attributes as read only and add a message in the footer of the field
 *
 * @author    Adrien Pétremann <adrien.petremann@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/user-context',
        'pim/router',
        'pim/form'
    ],
    function (
        $,
        _,
        __,
        UserContext,
        router,
        BaseForm
    ) {
        return BaseForm.extend({
            /**
             * {@inheritdoc}
             */
            configure: function () {
                this.listenTo(this.getRoot(), 'pim_enrich:form:field:extension:add', this.addFieldExtension);
 
                return BaseForm.prototype.configure.apply(this, arguments);
            },
 
            /**
             * {@inheritdoc}
             */
            addFieldExtension: function (event) {
                const entity = this.getFormData();
                if (undefined === entity.meta || null === entity.meta.family_variant) {
                    return;
                }
 
                const levelAttributeCodes = entity.meta.attributes_for_this_level;
                const field = event.field;
 
                if (!levelAttributeCodes.includes(field.attribute.code)) {
                    field.setEditable(false);
                    this.updateFieldElements(field);
                }
 
                return this;
            },
 
            /**
             * Update the given field by adding element to it
             *
             * @param {Object} field
             */
            updateFieldElements: function (field) {
                const entity = this.getFormData();
                const isProduct = ('product' === entity.meta.model_type);
 
                let message =
                    __('pim_enrich.entity.product_model.module.attribute.read_only_parent_attribute_from_common');
                let modelId = entity.meta.variant_navigation[0].selected.id;
 
                if (isProduct) {
                    const uiLocale = UserContext.get('uiLocale');
                    const comesFromParent = entity.meta.parent_attributes.includes(field.attribute.code);
                    const hasTwoLevelsOfVariation = (3 === entity.meta.variant_navigation.length);
 
                    if (comesFromParent && hasTwoLevelsOfVariation) {
                        const parentAxesLabels = entity.meta.variant_navigation[1].axes[uiLocale];
 
                        message = __(
                            'pim_enrich.entity.product_model.module.attribute.read_only_parent_attribute_from_model',
                            {axes: parentAxesLabels}
                        );
                        modelId = entity.meta.variant_navigation[1].selected.id;
                    }
                }
 
                const $element = $('<span class="AknFieldContainer-clickable">' + message + '</span>');
 
                $element.on('click', () => {
                    this.redirectToModel(modelId);
                });
 
                field.addElement('footer', 'read_only_parent_attribute', $element);
            },
 
            redirectToModel: function(modelId) {
                const params = {id: modelId};
                const route = 'pim_enrich_product_model_edit';
 
                router.redirectToRoute(route, params);
            }
        });
    }
);