| /*
 * Pim
 * Free Extension
 * Copyright (c) TreoLabs GmbH
 * Copyright (c) Kenner Soft Service GmbH
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
Espo.define('pim:views/product-attribute-value/record/list-in-product', 'views/record/list',
    Dep => Dep.extend({
        pipelines: {
            actionShowRevisionAttribute: ['clientDefs', 'ProductAttributeValue', 'actionShowRevisionAttribute']
        },
        hiddenInEditColumns: ['isRequired'],
        setup() {
            Dep.prototype.setup.call(this);
            this.listenTo(this, 'after:save', model => {
                let panelView = this.getParentView();
                if (panelView && panelView.model) {
                    panelView.model.trigger('after:attributesSave');
                }
            });
            this.runPipeline('actionShowRevisionAttribute');
        },
        afterRender() {
            Dep.prototype.afterRender.call(this);
            if (this.mode === 'edit') {
                this.setEditMode();
            }
        },
        prepareInternalLayout(internalLayout, model) {
            Dep.prototype.prepareInternalLayout.call(this, internalLayout, model);
            internalLayout.forEach(item => item.options.mode = this.options.mode || item.options.mode);
        },
        setListMode() {
            this.mode = 'list';
            this.updateModeInFields(this.mode);
        },
        setEditMode() {
            this.mode = 'edit';
            this.updateModeInFields(this.mode);
        },
        updateModeInFields(mode) {
            Object.keys(this.nestedViews).forEach(row => {
                let rowView = this.nestedViews[row];
                if (rowView) {
                    let fieldView = rowView.getView('valueField');
                    if (fieldView && fieldView.model && !fieldView.model.getFieldParam(fieldView.name, 'readOnly')
                        && typeof fieldView.setMode === 'function') {
                        fieldView.setMode(mode);
                        fieldView.reRender();
                    }
                }
            });
        }
    })
);
 |