From 71daa4ce2fbbf72e1affefbe09988d3529f0d8b3 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 21 Feb 2025 16:06:36 +0200 Subject: [PATCH] ref --- client/src/helpers/record-modal.js | 12 +++--- client/src/views/modals/detail.js | 63 ++++++++++++------------------ 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/client/src/helpers/record-modal.js b/client/src/helpers/record-modal.js index 1fe1e5af7b..be95e8e29a 100644 --- a/client/src/helpers/record-modal.js +++ b/client/src/helpers/record-modal.js @@ -71,7 +71,7 @@ class RecordModalHelper { * rootUrl?: string, * fullFormUrl?: string, * layoutName?: string, - * afterSave?: function(import('model').default, {bypassClose: boolean}), + * afterSave?: function(import('model').default, {bypassClose: boolean} & Record), * afterDestroy?: function(import('model').default), * beforeRender?: function(import('views/modals/detail').default), * onClose?: function(), @@ -122,7 +122,7 @@ class RecordModalHelper { if (params.afterSave) { modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { - params.afterSave(model, {bypassClose: !!o.bypassClose}); + params.afterSave(model, {...o}); }); } @@ -158,7 +158,7 @@ class RecordModalHelper { * fullFormUrl?: string, * returnUrl?: string, * layoutName?: string, - * afterSave?: function(import('model').default, {bypassClose: boolean}), + * afterSave?: function(import('model').default, {bypassClose: boolean} & Record), * beforeRender?: function(import('views/modals/edit').default), * onClose?: function(), * returnDispatchParams?: { @@ -204,7 +204,7 @@ class RecordModalHelper { if (params.afterSave) { modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { - params.afterSave(model, {bypassClose: !!o.bypassClose}); + params.afterSave(model, {...o}); }); } @@ -235,7 +235,7 @@ class RecordModalHelper { * returnUrl?: string, * relate?: model:model~setRelateItem | model:model~setRelateItem[], * attributes?: Record., - * afterSave?: function(import('model').default, {bypassClose: boolean}), + * afterSave?: function(import('model').default, {bypassClose: boolean} & Record), * beforeRender?: function(import('views/modals/edit').default), * onClose?: function(), * focusForCreate?: boolean, @@ -282,7 +282,7 @@ class RecordModalHelper { if (params.afterSave) { modalView.listenTo(modalView, 'after:save', (model, /** Record */o) => { - params.afterSave(model, {bypassClose: !!o.bypassClose}); + params.afterSave(model, {...o}); }); } diff --git a/client/src/views/modals/detail.js b/client/src/views/modals/detail.js index 2832ec0119..b7da7e2704 100644 --- a/client/src/views/modals/detail.js +++ b/client/src/views/modals/detail.js @@ -31,6 +31,7 @@ import ModalView from 'views/modal'; import ActionItemSetup from 'helpers/action-item-setup'; import Backbone from 'backbone'; +import RecordModal from 'helpers/record-modal'; /** * A quick view modal. @@ -616,9 +617,9 @@ class DetailModalView extends ModalView { } /** - * @return {Promise} + * @return {Promise} */ - actionEdit() { + async actionEdit() { if (this.options.quickEditDisabled) { const options = { id: this.id, @@ -630,53 +631,39 @@ class DetailModalView extends ModalView { options.rootUrl = this.options.rootUrl; } - this.getRouter().navigate('#' + this.scope + '/edit/' + this.id, {trigger: false}); + this.getRouter().navigate(`#${this.scope}/edit/${this.id}`, {trigger: false}); this.getRouter().dispatch(this.scope, 'edit', options); return Promise.reject(); } - const viewName = this.getMetadata().get(['clientDefs', this.scope, 'modalViews', 'edit']) || - 'views/modals/edit'; + const helper = new RecordModal(); - Espo.Ui.notifyWait(); + const modalView = await helper.showEdit(this, { + entityType: this.entityType, + id: this.id, + fullFormDisabled: this.fullFormDisabled, + afterSave: (model, o) => { + this.model.set(model.getClonedAttributes()); - return new Promise(resolve => { - this.createView('quickEdit', viewName, { - scope: this.scope, - entityType: this.model.entityType, - id: this.id, - fullFormDisabled: this.fullFormDisabled - }, view => { - this.listenToOnce(view, 'remove', () => { - this.dialog.show(); - }); + this.trigger('after:save', model, o); - this.listenToOnce(view, 'leave', () => { - this.remove(); - }); + this.controlRecordButtonsVisibility(); - this.listenTo(view, 'after:save', (model, o) => { - this.model.set(model.getClonedAttributes()); + this.trigger('model-sync'); - this.trigger('after:save', model, o); - this.controlRecordButtonsVisibility(); - - this.trigger('model-sync'); - - // Triggers stream panel update. - this.model.trigger('sync'); - }); - - view.render() - .then(() => { - Espo.Ui.notify(false); - this.dialog.hide(); - - resolve(view); - }); - }); + // Triggers stream panel update. + this.model.trigger('sync'); + }, + beforeRender: view => { + this.listenToOnce(view, 'remove', () => this.dialog.show()); + this.listenToOnce(view, 'leave', () => this.remove()); + }, }); + + this.dialog.hide(); + + return modalView; } // noinspection JSUnusedGlobalSymbols