fix(calendar): Impossible to create a new event after creating a new one. Closes #5718

This commit is contained in:
smizrahi
2023-03-28 21:26:21 +02:00
parent 5a825881d9
commit f813b78c3c
3 changed files with 52 additions and 32 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -205,36 +205,49 @@
component = Calendar.$get(component.pid).$getComponent(component.id, component.occurrenceId); component = Calendar.$get(component.pid).$getComponent(component.id, component.occurrenceId);
promise = component.$futureComponentData; promise = component.$futureComponentData;
} }
var originalDataHash = eventHash(component);
if (vm.isComponentOpened) { // Prevent opening a new modal if there is already one opened (multiple clicks)
return;
}
if ('appointment' === type) {
// TODO: Improve Angular implementation
var originalCancel = $mdDialog.cancel;
var originalDataHash = eventHash(component);
vm.isComponentOpened = true;
$mdDialog.cancel = () => {
var newDataHash = eventHash(component);
if (originalDataHash === newDataHash) {
originalCancel();
$mdDialog.cancel = originalCancel;
vm.isComponentOpened = false;
} else if (confirm(l('You have modified data unsaved. Do you want to close popup and loose data ?'))) {
originalCancel();
$mdDialog.cancel = originalCancel;
vm.isComponentOpened = false;
}
};
}
promise.then(function() { promise.then(function() {
// UI/Templates/SchedulerUI/UIxAppointmentViewTemplate.wox or // UI/Templates/SchedulerUI/UIxAppointmentViewTemplate.wox or
// UI/Templates/SchedulerUI/UIxTaskViewTemplate.wox // UI/Templates/SchedulerUI/UIxTaskViewTemplate.wox
var templateUrl = 'UIx' + type.capitalize() + 'ViewTemplate'; var templateUrl = 'UIx' + type.capitalize() + 'ViewTemplate';
if (vm.isComponentOpened) { // Prevent opening a new modal if there is already one opened (multiple clicks)
return;
}
// TODO: Improve Angular implementation
var originalCancel = $mdDialog.cancel;
var originalDestroy = $mdDialog.destroy;
var originalShow = $mdDialog.show;
$mdDialog.show = function(p) {
vm.isComponentOpened = true;
$mdDialog.cancel = function () {
var newDataHash = eventHash(component);
vm.isComponentOpened = false;
if (originalDataHash === newDataHash) {
$mdDialog.cancel = originalCancel;
return originalCancel();
} else if (confirm(l('You have modified data unsaved. Do you want to close popup and loose data ?'))) {
$mdDialog.cancel = originalCancel;
return originalCancel();
}
};
$mdDialog.destroy = function () {
vm.isComponentOpened = false;
$mdDialog.cancel = originalCancel;
$mdDialog.destroy = originalDestroy;
return originalDestroy();
};
return originalShow(p);
};
$mdDialog.show({ $mdDialog.show({
parent: angular.element(document.body), parent: angular.element(document.body),
targetEvent: $event, targetEvent: $event,
@@ -273,23 +286,30 @@
// TODO: Improve Angular implementation // TODO: Improve Angular implementation
var originalCancel = $mdDialog.cancel; var originalCancel = $mdDialog.cancel;
var originalDestroy = $mdDialog.destroy;
var originalDataHash = eventHash(component); var originalDataHash = eventHash(component);
vm.isComponentOpened = true; vm.isComponentOpened = true;
$mdDialog.cancel = () => { $mdDialog.cancel = function() {
var newDataHash = eventHash(component); var newDataHash = eventHash(component);
vm.isComponentOpened = false;
if (originalDataHash === newDataHash) { if (originalDataHash === newDataHash) {
originalCancel();
$mdDialog.cancel = originalCancel; $mdDialog.cancel = originalCancel;
vm.isComponentOpened = false; return originalCancel();
} else if (confirm(l('You have modified data unsaved. Do you want to close popup and loose data ?'))) { } else if (confirm(l('You have modified data unsaved. Do you want to close popup and loose data ?'))) {
originalCancel();
$mdDialog.cancel = originalCancel; $mdDialog.cancel = originalCancel;
vm.isComponentOpened = false; return originalCancel();
} }
}; };
$mdDialog.destroy = function () {
vm.isComponentOpened = false;
$mdDialog.cancel = originalCancel;
$mdDialog.destroy = originalDestroy;
return originalDestroy();
};
return $mdDialog.show({ return $mdDialog.show({
parent: angular.element(document.body), parent: angular.element(document.body),
targetEvent: $event, targetEvent: $event,