All files / web/bundles/pimui/js/common breadcrumbs.js

85% Statements 17/20
100% Branches 6/6
71.43% Functions 5/7
85% Lines 17/20

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                  1160x                                       1160x                             3616x   3616x                     3569x 3569x   3569x             3681x       3679x 3679x 3679x 2329x   3679x     383x   383x     3679x         3679x                                          
'use strict';
 
/**
 * Extension to display breadcrumbItems on every page
 *
 * @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/template/common/breadcrumbs',
        'oro/mediator',
        'pim/form-registry',
        'pim/common/property'
    ],
    function (
        $,
        _,
        __,
        BaseForm,
        template,
        mediator,
        FormRegistry,
        propertyAccessor
    ) {
        return BaseForm.extend({
            className: 'AknBreadcrumb',
            template: _.template(template),
            events: {
                'click .breadcrumb-tab': 'redirectTab',
                'click .breadcrumb-item': 'redirectItem'
            },
 
            /**
             * {@inheritdoc}
             *
             * @param {string} config.tab The main tab to highlight
             * @param {string} [config.item] The sub item to highlight (optional)
             */
            initialize: function (config) {
                this.config = config.config;
 
                return BaseForm.prototype.initialize.apply(this, arguments);
            },
 
            /**
             * This method will configure the breadcrumb. The configuration of this module contains backbone extension
             * codes related to the menu. To avoid duplication of the labels, we load the configuration of these modules
             * to bring back the labels into this module.
             *
             * {@inheritdoc}
             */
            configure: function () {
                mediator.trigger('pim_menu:highlight:tab', { extension: this.config.tab });
                mediator.trigger('pim_menu:highlight:item', { extension: this.config.item });
 
                return BaseForm.prototype.configure.apply(this, arguments);
            },
 
            /**
             * {@inheritdoc}
             */
            render: function () {
                return $.when(
                    FormRegistry.getFormMeta(this.config.tab),
                    FormRegistry.getFormMeta(this.config.item)
                ).then(function (metaTab, metaItem) {
                    var breadcrumbTab = { code: this.config.tab, label: __(metaTab.config.title) };
                    var breadcrumbItem = null;
                    if (undefined !== metaItem) {
                        breadcrumbItem = { code: this.config.item, label: __(metaItem.config.title), active: true };
                    }
                    if (undefined !== this.config.itemPath &&
                        null !== propertyAccessor.accessProperty(this.getFormData(), this.config.itemPath)
                    ) {
                        const item = propertyAccessor.accessProperty(this.getFormData(), this.config.itemPath);
 
                        breadcrumbItem = { code: item, label: item, active: false };
                    }
 
                    this.$el.empty().append(this.template({
                        breadcrumbTab: breadcrumbTab,
                        breadcrumbItem: breadcrumbItem
                    }));
 
                    this.delegateEvents();
                }.bind(this));
 
                return this;
            },
 
            /**
             * Redirects to the linked tab
             */
            redirectTab: function () {
                mediator.trigger('pim_menu:redirect:tab', { extension: this.config.tab });
            },
 
            /**
             * Redirects to the linked item
             */
            redirectItem: function () {
                mediator.trigger('pim_menu:redirect:item', { extension: this.config.item });
            }
        });
    });