This commit is contained in:
Yuri Kuznetsov
2025-02-21 12:29:14 +02:00
parent 2c4779a98c
commit cbbde8af9b
4 changed files with 37 additions and 44 deletions
@@ -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: () => {
+17 -8
View File
@@ -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<import('views/modals/detail').default>}
@@ -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.<string, *>,
* 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();
+1 -1
View File
@@ -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;
}
+6 -16
View File
@@ -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();
});
},
});
}