From e13f79134ee1a5dc2c08fce9fb5d91e945bb3336 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 21 Feb 2025 17:50:23 +0200 Subject: [PATCH] ref --- .../email/fields/from-address-varchar.js | 119 +++++++++--------- client/src/views/fields/link-multiple.js | 6 +- 2 files changed, 62 insertions(+), 63 deletions(-) diff --git a/client/src/views/email/fields/from-address-varchar.js b/client/src/views/email/fields/from-address-varchar.js index 20a9301607..b886d6b792 100644 --- a/client/src/views/email/fields/from-address-varchar.js +++ b/client/src/views/email/fields/from-address-varchar.js @@ -439,7 +439,7 @@ class EmailFromAddressVarchar extends BaseFieldView { * @param {string} scope * @param {string} address */ - addToPerson(scope, address) { + async addToPerson(scope, address) { const fromString = this.model.get('fromString') || this.model.get('fromName'); let name = this.nameHash[address] || null; @@ -467,11 +467,6 @@ class EmailFromAddressVarchar extends BaseFieldView { attributes.accountName = this.model.get('accountName'); } - const viewName = this.getMetadata().get(`clientDefs.${scope}.modalViews.select`) || - 'views/modals/select-records'; - - Espo.Ui.notifyWait(); - const filters = {}; if (name) { @@ -482,67 +477,75 @@ class EmailFromAddressVarchar extends BaseFieldView { }; } - this.createView('dialog', viewName, { - scope: scope, + const afterSave = /** import('model').default */model => { + const nameHash = Espo.Utils.clone(this.model.get('nameHash') || {}); + const typeHash = Espo.Utils.clone(this.model.get('typeHash') || {}); + const idHash = Espo.Utils.clone(this.model.get('idHash') || {}); + + idHash[address] = model.id; + nameHash[address] = model.attributes.name; + typeHash[address] = scope; + + this.idHash = idHash; + this.nameHash = nameHash; + this.typeHash = typeHash; + + const attributes = { + nameHash: nameHash, + idHash: idHash, + typeHash: typeHash, + }; + + setTimeout(() => { + this.model.set(attributes); + + if (this.model.attributes.icsContents) { + this.model.fetch(); + } + }, 50); + }; + + const viewName = this.getMetadata().get(`clientDefs.${scope}.modalViews.select`) || + 'views/modals/select-records'; + + /** @type {module:views/modals/select-records~Options} */ + const options = { + entityType: scope, createButton: false, filters: filters, - }, (view) => { - view.render(); + onSelect: async models => { + const model = models[0]; - Espo.Ui.notify(false); + if (!model.attributes.emailAddress) { + await model.save({emailAddress: address}, {patch: true}); - this.listenToOnce(view, 'select', (model) => { - const afterSave = () => { - const nameHash = Espo.Utils.clone(this.model.get('nameHash') || {}); - const typeHash = Espo.Utils.clone(this.model.get('typeHash') || {}); - const idHash = Espo.Utils.clone(this.model.get('idHash') || {}); + afterSave(model); - idHash[address] = model.id; - nameHash[address] = model.get('name'); - typeHash[address] = scope; - - this.idHash = idHash; - this.nameHash = nameHash; - this.typeHash = typeHash; - - const attributes = { - nameHash: nameHash, - idHash: idHash, - typeHash: typeHash - }; - - setTimeout(() => { - this.model.set(attributes); - - if (this.model.get('icsContents')) { - this.model.fetch(); - } - }, 50); - }; - - if (!model.get('emailAddress')) { - model.save({ - 'emailAddress': address - }, {patch: true}).then(afterSave); + return; } - else { - model.fetch().then(() => { - const emailAddressData = model.get('emailAddressData') || []; - const item = { - emailAddress: address, - primary: emailAddressData.length === 0 - }; + await model.fetch(); - emailAddressData.push(item); + const emailAddressData = [...(model.attributes.emailAddressData || [])]; - model.save({ - 'emailAddressData': emailAddressData - }, {patch: true}).then(afterSave); - }); - } - }); - }); + emailAddressData.push({ + emailAddress: address, + primary: emailAddressData.length === 0 + }); + + await model.save({emailAddressData: emailAddressData}, {patch: true}); + + afterSave(model); + } + }; + + Espo.Ui.notifyWait(); + + const view = await this.createView('modal', viewName, options); + + await view.render(); + + Espo.Ui.notify(); } fetchSearch() { diff --git a/client/src/views/fields/link-multiple.js b/client/src/views/fields/link-multiple.js index ccd5329242..9a6ed3c178 100644 --- a/client/src/views/fields/link-multiple.js +++ b/client/src/views/fields/link-multiple.js @@ -1089,9 +1089,6 @@ class LinkMultipleFieldView extends BaseFieldView { const orderBy = filters.orderBy || this.panelDefs.selectOrderBy; const orderDirection = filters.orderBy ? filters.order : this.panelDefs.selectOrderDirection; - /** @type {import('views/modal').default} */ - let view; - /** @type {module:views/modals/select-records~Options} */ const options = { entityType: this.foreignScope, @@ -1112,8 +1109,7 @@ class LinkMultipleFieldView extends BaseFieldView { }, }; - view = /** @type {import('views/modal').default} */ - await this.createView('modal', viewName, options); + const view = await this.createView('modal', viewName, options); await view.render();