From f503a08813ea99aca551b3cf9bf7be179a2a8cd2 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 16 Aug 2023 14:46:38 +0300 Subject: [PATCH] selectMandatoryAttributeList --- client/src/views/detail.js | 1 + client/src/views/fields/link-multiple.js | 32 +++++++++++++-------- client/src/views/fields/link.js | 36 +++++++++++++++--------- schema/metadata/clientDefs.json | 7 +++++ 4 files changed, 52 insertions(+), 24 deletions(-) diff --git a/client/src/views/detail.js b/client/src/views/detail.js index 5c887a4df5..2b672f06e4 100644 --- a/client/src/views/detail.js +++ b/client/src/views/detail.js @@ -633,6 +633,7 @@ class DetailView extends MainView { massRelateEnabled: massRelateEnabled, primaryFilterName: primaryFilterName, boolFilterList: boolFilterList, + mandatorySelectAttributeList: panelDefs.selectMandatoryAttributeList, }, dialog => { dialog.render(); diff --git a/client/src/views/fields/link-multiple.js b/client/src/views/fields/link-multiple.js index 2f58919955..edf2404eb7 100644 --- a/client/src/views/fields/link-multiple.js +++ b/client/src/views/fields/link-multiple.js @@ -383,9 +383,16 @@ class LinkMultipleFieldView extends BaseFieldView { let url = this.foreignScope + '?&maxSize=' + this.getAutocompleteMaxCount(); if (!this.forceSelectAllAttributes) { + /** @var {Object.} */ + const panelDefs = this.getMetadata() + .get(['clientDefs', this.entityType, 'relationshipPanels', this.name]) || {}; + + const mandatorySelectAttributeList = this.mandatorySelectAttributeList || + panelDefs.selectMandatoryAttributeList; + let select = ['id', 'name']; - if (this.mandatorySelectAttributeList) { + if (mandatorySelectAttributeList) { select = select.concat(this.mandatorySelectAttributeList); } @@ -393,10 +400,10 @@ class LinkMultipleFieldView extends BaseFieldView { } /** @var {Object.} */ - let panelDefs = this.getMetadata() + const panelDefs = this.getMetadata() .get(['clientDefs', this.entityType, 'relationshipPanels', this.name]) || {}; - let boolList = [ + const boolList = [ ...(this.getSelectBoolFilterList() || []), ...(panelDefs.selectBoolFilterList || []), ]; @@ -405,7 +412,7 @@ class LinkMultipleFieldView extends BaseFieldView { url += '&' + $.param({'boolFilterList': boolList}); } - let primary = this.getSelectPrimaryFilterName() || panelDefs.selectPrimaryFilter; + const primary = this.getSelectPrimaryFilterName() || panelDefs.selectPrimaryFilter; if (primary) { url += '&' + $.param({'primaryFilter': primary}); @@ -860,14 +867,17 @@ class LinkMultipleFieldView extends BaseFieldView { Espo.Ui.notify(' ... '); /** @var {Object.} */ - let panelDefs = this.getMetadata() + const panelDefs = this.getMetadata() .get(['clientDefs', this.entityType, 'relationshipPanels', this.name]) || {}; - let viewName = panelDefs.selectModalView || + const viewName = panelDefs.selectModalView || this.getMetadata().get(`clientDefs.${this.foreignScope}.modalViews.select`) || this.selectRecordsView; - let handler = panelDefs.selectHandler || null; + const mandatorySelectAttributeList = this.mandatorySelectAttributeList || + panelDefs.selectMandatoryAttributeList; + + const handler = panelDefs.selectHandler || null; let createButton = this.isEditMode() && (!this.createDisabled && !panelDefs.createDisabled || this.forceCreateButton); @@ -912,13 +922,13 @@ class LinkMultipleFieldView extends BaseFieldView { .then(filters => resolve(filters)); }); }).then(filters => { - let advanced = {...(this.getSelectFilters() || {}), ...(filters.advanced || {})}; - let boolFilterList = [ + const advanced = {...(this.getSelectFilters() || {}), ...(filters.advanced || {})}; + const boolFilterList = [ ...(this.getSelectBoolFilterList() || []), ...(filters.bool || []), ...(panelDefs.selectBoolFilterList || []), ]; - let primaryFilter = this.getSelectPrimaryFilterName() || + const primaryFilter = this.getSelectPrimaryFilterName() || filters.primary || panelDefs.selectPrimaryFilter; this.createView('dialog', viewName, { @@ -929,7 +939,7 @@ class LinkMultipleFieldView extends BaseFieldView { primaryFilterName: primaryFilter, filterList: this.getSelectFilterList(), multiple: true, - mandatorySelectAttributeList: this.mandatorySelectAttributeList, + mandatorySelectAttributeList: mandatorySelectAttributeList, forceSelectAllAttributes: this.forceSelectAllAttributes, createAttributesProvider: createAttributesProvider, }, dialog => { diff --git a/client/src/views/fields/link.js b/client/src/views/fields/link.js index 5e6932b60d..378c4b1182 100644 --- a/client/src/views/fields/link.js +++ b/client/src/views/fields/link.js @@ -416,25 +416,32 @@ class LinkFieldView extends BaseFieldView { * @return {string} */ getAutocompleteUrl() { - var url = this.foreignScope + '?maxSize=' + this.getAutocompleteMaxCount(); + let url = this.foreignScope + '?maxSize=' + this.getAutocompleteMaxCount(); if (!this.forceSelectAllAttributes) { - var select = ['id', 'name']; + /** @var {Object.} */ + const panelDefs = this.getMetadata() + .get(['clientDefs', this.entityType, 'relationshipPanels', this.name]) || {}; - if (this.mandatorySelectAttributeList) { + const mandatorySelectAttributeList = this.mandatorySelectAttributeList || + panelDefs.selectMandatoryAttributeList; + + let select = ['id', 'name']; + + if (mandatorySelectAttributeList) { select = select.concat(this.mandatorySelectAttributeList); } url += '&select=' + select.join(','); } - var boolList = this.getSelectBoolFilterList(); + const boolList = this.getSelectBoolFilterList(); if (boolList) { url += '&' + $.param({'boolFilterList': boolList}); } - var primary = this.getSelectPrimaryFilterName(); + const primary = this.getSelectPrimaryFilterName(); if (primary) { url += '&' + $.param({'primaryFilter': primary}); @@ -919,16 +926,19 @@ class LinkFieldView extends BaseFieldView { Espo.Ui.notify(' ... '); /** @var {Object.} */ - let panelDefs = this.getMetadata() + const panelDefs = this.getMetadata() .get(['clientDefs', this.entityType, 'relationshipPanels', this.name]) || {}; - let viewName = panelDefs.selectModalView || + const viewName = panelDefs.selectModalView || this.getMetadata().get(['clientDefs', this.foreignScope, 'modalViews', 'select']) || this.selectRecordsView; - let handler = panelDefs.selectHandler || null; + const mandatorySelectAttributeList = this.mandatorySelectAttributeList || + panelDefs.selectMandatoryAttributeList; - let createButton = this.isEditMode() && + const handler = panelDefs.selectHandler || null; + + const createButton = this.isEditMode() && (!this.createDisabled && !panelDefs.createDisabled || this.forceCreateButton); let createAttributesProvider = null; @@ -971,13 +981,13 @@ class LinkFieldView extends BaseFieldView { .then(filters => resolve(filters)); }); }).then(filters => { - let advanced = {...(this.getSelectFilters() || {}), ...(filters.advanced || {})}; - let boolFilterList = [ + const advanced = {...(this.getSelectFilters() || {}), ...(filters.advanced || {})}; + const boolFilterList = [ ...(this.getSelectBoolFilterList() || []), ...(filters.bool || []), ...(panelDefs.selectBoolFilterList || []), ]; - let primaryFilter = this.getSelectPrimaryFilterName() || + const primaryFilter = this.getSelectPrimaryFilterName() || filters.primary || panelDefs.selectPrimaryFilter; this.createView('dialog', viewName, { @@ -986,7 +996,7 @@ class LinkFieldView extends BaseFieldView { filters: advanced, boolFilterList: boolFilterList, primaryFilterName: primaryFilter, - mandatorySelectAttributeList: this.mandatorySelectAttributeList, + mandatorySelectAttributeList: mandatorySelectAttributeList, forceSelectAllAttributes: this.forceSelectAllAttributes, filterList: this.getSelectFilterList(), createAttributesProvider: createAttributesProvider, diff --git a/schema/metadata/clientDefs.json b/schema/metadata/clientDefs.json index c538db17a4..f60e09328f 100644 --- a/schema/metadata/clientDefs.json +++ b/schema/metadata/clientDefs.json @@ -400,6 +400,13 @@ "layout": { "type": "string", "description": "A list layout name." + }, + "selectMandatoryAttributeList": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Attributes to be selected when selecting records." } } }