This commit is contained in:
Yuri Kuznetsov
2025-02-21 16:06:36 +02:00
parent a13710e9d2
commit 71daa4ce2f
2 changed files with 31 additions and 44 deletions
+6 -6
View File
@@ -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.<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(),
* 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});
});
}
+25 -38
View File
@@ -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<import('views/modals/edit').default>}
*/
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