From cbbde8af9b2070397a57ffcd08ff064301fce57e Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 21 Feb 2025 12:29:14 +0200 Subject: [PATCH] ref --- .../crm/src/views/calendar/calendar.js | 32 ++++++++----------- client/src/helpers/record-modal.js | 25 ++++++++++----- client/src/views/modals/detail.js | 2 +- .../src/views/record/panels/relationship.js | 22 ++++--------- 4 files changed, 37 insertions(+), 44 deletions(-) diff --git a/client/modules/crm/src/views/calendar/calendar.js b/client/modules/crm/src/views/calendar/calendar.js index 1ba73876a4..af8821ba4c 100644 --- a/client/modules/crm/src/views/calendar/calendar.js +++ b/client/modules/crm/src/views/calendar/calendar.js @@ -31,6 +31,7 @@ import View from 'view'; import moment from 'moment'; import * as FullCalendar from 'fullcalendar'; +import RecordModal from 'helpers/record-modal'; /** * @typedef {import('@fullcalendar/core/internal-common.js').EventImpl} EventImpl @@ -901,38 +902,31 @@ class CalendarView extends View { this.calendar.unselect(); }, - eventClick: info => { + eventClick: async info => { const event = info.event; const scope = event.extendedProps.scope; const recordId = event.extendedProps.recordId; - const viewName = this.getMetadata().get(['clientDefs', scope, 'modalViews', 'detail']) || - 'views/modals/detail'; + const helper = new RecordModal(); - Espo.Ui.notifyWait(); + /** @type {import('views/modals/detail').default} */ + let modalView; - this.createView('quickView', viewName, { - scope: scope, + modalView = await helper.showDetail(this, { + entityType: scope, id: recordId, removeDisabled: false, - }, view => { - view.render(); - view.notify(false); - - this.listenToOnce(view, 'after:destroy', model => { - this.removeModel(model); - }); - - this.listenTo(view, 'after:save', (model, o) => { - o = o || {}; - + afterSave: (model, o) => { if (!o.bypassClose) { - view.close(); + modalView.close(); } this.updateModel(model); - }); + }, + afterDestroy: model => { + this.removeModel(model); + }, }); }, datesSet: () => { diff --git a/client/src/helpers/record-modal.js b/client/src/helpers/record-modal.js index 4f01f35a03..ef03725f67 100644 --- a/client/src/helpers/record-modal.js +++ b/client/src/helpers/record-modal.js @@ -66,8 +66,9 @@ class RecordModalHelper { * entityType: string, * model?: import('model').default, * editDisabled?: boolean, + * removeDisabled?: boolean, * rootUrl?: string, - * afterSave?: function(import('model').default), + * afterSave?: function(import('model').default, {bypassClose: boolean}), * afterDestroy?: function(import('model').default), * }} params * @return {Promise} @@ -91,14 +92,16 @@ class RecordModalHelper { const viewName = this.metadata.get(`clientDefs.${entityType}.modalViews.detail`) || 'views/modals/detail'; - Espo.Ui.notifyWait() + Espo.Ui.notifyWait(); + /** @type {module:views/modals/detail~options} */ const options = { entityType: entityType, model: model, id: id, quickEditDisabled: params.editDisabled, rootUrl: params.rootUrl, + removeDisabled: params.removeDisabled, }; Espo.Ui.notifyWait(); @@ -110,7 +113,9 @@ class RecordModalHelper { view.listenToOnce(modalView, 'remove', () => view.clearView('modal')); if (params.afterSave) { - modalView.listenTo(modalView, 'after:save', model => params.afterSave(model)); + modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { + params.afterSave(model, {bypassClose: !!o.bypassClose}); + }); } if (params.afterDestroy) { @@ -135,7 +140,7 @@ class RecordModalHelper { * rootUrl?: string, * noFullForm?: boolean, * returnUrl?: string, - * afterSave?: function(import('model').default), + * afterSave?: function(import('model').default, {bypassClose: boolean}), * returnDispatchParams?: { * controller: string, * action: string|null, @@ -153,7 +158,7 @@ class RecordModalHelper { const viewName = this.metadata.get(`clientDefs.${entityType}.modalViews.edit`) || 'views/modals/edit'; - /** @type {module:views/modals/detail~options} */ + /** @type {module:views/modals/edit~options} */ const options = { entityType: entityType, id: id, @@ -176,7 +181,9 @@ class RecordModalHelper { modalView.listenToOnce(modalView, 'remove', () => view.clearView('modal')); if (params.afterSave) { - modalView.listenTo(modalView, 'after:save', model => params.afterSave(model)); + modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { + params.afterSave(model, {bypassClose: !!o.bypassClose}); + }); } await modalView.render(); @@ -197,7 +204,7 @@ class RecordModalHelper { * returnUrl?: string, * relate?: model:model~setRelateItem | model:model~setRelateItem[], * attributes?: Record., - * afterSave?: function(import('model').default), + * afterSave?: function(import('model').default, {bypassClose: boolean}), * returnDispatchParams?: { * controller: string, * action: string|null, @@ -237,7 +244,9 @@ class RecordModalHelper { modalView.listenToOnce(modalView, 'remove', () => view.clearView('modal')); if (params.afterSave) { - modalView.listenTo(modalView, 'after:save', model => params.afterSave(model)); + modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { + params.afterSave(model, {bypassClose: !!o.bypassClose}); + }); } await modalView.render(); diff --git a/client/src/views/modals/detail.js b/client/src/views/modals/detail.js index cf1ff03838..2832ec0119 100644 --- a/client/src/views/modals/detail.js +++ b/client/src/views/modals/detail.js @@ -132,7 +132,7 @@ class DetailModalView extends ModalView { this.editDisabled = this.options.editDisabled; } - if ('removeDisabled' in this.options) { + if (this.options.removeDisabled !== undefined) { this.removeDisabled = this.options.removeDisabled; } diff --git a/client/src/views/record/panels/relationship.js b/client/src/views/record/panels/relationship.js index d7e2e177e5..c72ddb2a94 100644 --- a/client/src/views/record/panels/relationship.js +++ b/client/src/views/record/panels/relationship.js @@ -763,26 +763,16 @@ class RelationshipPanelView extends BottomPanelView { */ actionEditRelated(data) { const id = data.id; - const scope = this.collection.get(id).name; + const entityType = this.collection.get(id).entityType; - const viewName = this.getMetadata().get('clientDefs.' + scope + '.modalViews.edit') || - 'views/modals/edit'; + const helper = new RecordModal(); - Espo.Ui.notifyWait(); - - this.createView('quickEdit', viewName, { - scope: scope, + helper.showEdit(this, { + entityType: entityType, id: id, - }, (view) => { - view.once('after:render', () => { - Espo.Ui.notify(false); - }); - - view.render(); - - view.once('after:save', () => { + afterSave: () => { this.collection.fetch(); - }); + }, }); }