From 4b1a601d14876da9a9fbb77aee24ce692838a65d Mon Sep 17 00:00:00 2001 From: Sokolov Andrey Date: Tue, 11 Feb 2020 10:38:21 +0500 Subject: [PATCH] Fix rollback new class on diagrams --- addon/components/fd-sheets/fd-class-sheet.js | 2 - .../fd-sheets/fd-edit-diagram-object-sheet.js | 103 +++++++++++------- addon/components/fd-sheets/fd-view-sheet.js | 1 - addon/components/fd-uml-diagram.js | 24 +++- addon/services/fd-sheet-service.js | 6 + .../fd-edit-diagram-object-sheet.hbs | 3 +- 6 files changed, 93 insertions(+), 46 deletions(-) diff --git a/addon/components/fd-sheets/fd-class-sheet.js b/addon/components/fd-sheets/fd-class-sheet.js index 32b321011..f352682d9 100644 --- a/addon/components/fd-sheets/fd-class-sheet.js +++ b/addon/components/fd-sheets/fd-class-sheet.js @@ -126,8 +126,6 @@ export default FdBaseSheet.extend({ deactivateListItem() { let selectedValue = this.get('selectedValue'); if (!isNone(selectedValue)) { - let model = get(selectedValue, 'data'); - model.rollbackAll(); set(selectedValue, 'active', false); } }, diff --git a/addon/components/fd-sheets/fd-edit-diagram-object-sheet.js b/addon/components/fd-sheets/fd-edit-diagram-object-sheet.js index 03f484e56..3ea0e32fa 100644 --- a/addon/components/fd-sheets/fd-edit-diagram-object-sheet.js +++ b/addon/components/fd-sheets/fd-edit-diagram-object-sheet.js @@ -153,41 +153,32 @@ export default FdBaseSheet.extend({ @param {Object} currentItem Current list item. */ openSheet(sheetName, currentItem) { - let store = this.get('store'); - let objectId = currentItem.get('repositoryObject').slice(1, -1); - - let selectedValue, stereotype; - let modelName = 'fd-dev-association'; - let isLink = false; - - switch (currentItem.get('primitive.$type')) { - case 'STORMCASE.UML.cad.Composition, UMLCAD': - modelName = 'fd-dev-aggregation'; - // eslint-disable-next-line no-fallthrough - case 'STORMCASE.UML.cad.Association, UMLCAD': - isLink = true; - stereotype = currentItem.get('primitive.$type').slice(18, -8).toLocaleLowerCase(); - selectedValue = store.peekRecord(`${modelName}`, objectId); - - updateLinkByStr(selectedValue); - this.set('_endRoleStr', selectedValue.get('endRoleStr')); - this.set('_startRoleStr', selectedValue.get('startRoleStr')); - this.set('_endMultiplicity', selectedValue.get('endMultiplicity')); - this.set('_startMultiplicity', selectedValue.get('startMultiplicity')); - break; - default: - stereotype = currentItem.getWithDefault('stereotype', '').trim().slice(1, -1) || 'implementation'; - selectedValue = store.peekRecord('fd-dev-class', objectId); - - updateObjectByStr(selectedValue, store); - this.set('_attributesStr', selectedValue.get('attributesStr')); - this.set('_methodsStr', selectedValue.get('methodsStr')); + this.rollbackSelectedValue(); + + let stereotype; + let isLink = currentItem.isLink; + let selectedValue = currentItem.data; + let selectedValueModel = currentItem.selectedValueModel; + if (isLink) { + stereotype = selectedValueModel.get('primitive.$type').slice(18, -8).toLocaleLowerCase(); + + updateLinkByStr(selectedValue); + this.set('_endRoleStr', selectedValue.get('endRoleStr')); + this.set('_startRoleStr', selectedValue.get('startRoleStr')); + this.set('_endMultiplicity', selectedValue.get('endMultiplicity')); + this.set('_startMultiplicity', selectedValue.get('startMultiplicity')); + } else { + stereotype = selectedValueModel.getWithDefault('stereotype', '').trim().slice(1, -1) || 'implementation'; + + updateObjectByStr(selectedValue, this.get('store')); + this.set('_attributesStr', selectedValue.get('attributesStr')); + this.set('_methodsStr', selectedValue.get('methodsStr')); } this.set('isLink', isLink); this.set('selectedValue', selectedValue); this.set('objectEditFormNamePart', stereotype); - this.set('selectedValueModel', currentItem); + this.set('selectedValueModel', selectedValueModel); }, /** @@ -196,23 +187,13 @@ export default FdBaseSheet.extend({ @method closeSheet */ closeSheet() { - let selectedValue = this.get('selectedValue'); - if (!selectedValue.get('isNew')) { - selectedValue.rollbackAll(); - } - + this.rollbackSelectedValue(); if (this.get('isLink')) { - selectedValue.set('endRoleStr', this.get('_endRoleStr')); - selectedValue.set('startRoleStr', this.get('_startRoleStr')); - selectedValue.set('endMultiplicity', this.get('_endMultiplicity')); - selectedValue.set('startMultiplicity', this.get('_startMultiplicity')); this.set('_endRoleStr', undefined); this.set('_startRoleStr', undefined); this.set('_endMultiplicity', undefined); this.set('_startMultiplicity', undefined); } else { - selectedValue.set('attributesStr', this.get('_attributesStr')); - selectedValue.set('methodsStr', this.get('_methodsStr')); this.set('_attributesStr', undefined); this.set('_methodsStr', undefined); } @@ -225,6 +206,46 @@ export default FdBaseSheet.extend({ this.set('readonlyMode', true); }, + /** + Rollback 'selectedValue'. + + @method rollbackSelectedValue + */ + rollbackSelectedValue() { + let selectedValue = this.get('selectedValue'); + if (!isNone(selectedValue)) { + let isLink = this.get('isLink'); + if (!selectedValue.get('isNew')) { + //selectedValue.rollbackAll(); + if (isLink) { + selectedValue.set('endRoleStr', this.get('_endRoleStr')); + selectedValue.set('startRoleStr', this.get('_startRoleStr')); + selectedValue.set('endMultiplicity', this.get('_endMultiplicity')); + selectedValue.set('startMultiplicity', this.get('_startMultiplicity')); + } else { + selectedValue.set('attributesStr', this.get('_attributesStr')); + selectedValue.set('methodsStr', this.get('_methodsStr')); + } + } else { + let objectModel = this.get('selectedValueModel'); + if (isLink) { + updateStrByLink(selectedValue); + objectModel.set('endRoleTxt', selectedValue.get('endRoleStr')); + objectModel.set('startRoleTxt', selectedValue.get('startRoleStr')); + objectModel.set('endMultiplicity', selectedValue.get('endMultiplicity')); + objectModel.set('startMultiplicity', selectedValue.get('startMultiplicity')); + } else { + updateStrByObjects(selectedValue); + objectModel.set('name', selectedValue.get('nameStr')); + objectModel.set('attributes', selectedValue.get('attributesStr').split('\n')); + objectModel.set('methods', selectedValue.get('methodsStr').split('\n')); + } + + this.get('fdDiagramService').updateJointObjectOnDiagram(objectModel.get('id')); + } + } + }, + /** Check data for correctness. diff --git a/addon/components/fd-sheets/fd-view-sheet.js b/addon/components/fd-sheets/fd-view-sheet.js index 4a4908e9a..48c5f6cd6 100644 --- a/addon/components/fd-sheets/fd-view-sheet.js +++ b/addon/components/fd-sheets/fd-view-sheet.js @@ -53,7 +53,6 @@ export default FdBaseSheet.extend({ closeSheet() { let selectedValue = this.get('selectedValue'); if (!isNone(selectedValue)) { - selectedValue.rollbackAll(); this.set('readonlyMode', true); this.set('selectedValue', undefined); } diff --git a/addon/components/fd-uml-diagram.js b/addon/components/fd-uml-diagram.js index 25d09841e..f66968c0f 100644 --- a/addon/components/fd-uml-diagram.js +++ b/addon/components/fd-uml-diagram.js @@ -458,7 +458,29 @@ export default Component.extend({ @param {joint.dia.Element} cellView.model */ _elementOpenEditForm({ model }) { - this.get('openEditFormAction')(model.get('objectModel')); + let object = { + data: undefined, + selectedValueModel: model.get('objectModel'), + isLink: false + }; + + let store = this.get('store'); + let modelName = 'fd-dev-association'; + let objectId = object.selectedValueModel.get('repositoryObject').slice(1, -1); + + switch (object.selectedValueModel.get('primitive.$type')) { + case 'STORMCASE.UML.cad.Composition, UMLCAD': + modelName = 'fd-dev-aggregation'; + // eslint-disable-next-line no-fallthrough + case 'STORMCASE.UML.cad.Association, UMLCAD': + object.isLink = true; + object.data = store.peekRecord(`${modelName}`, objectId); + break; + default: + object.data = store.peekRecord('fd-dev-class', objectId); + } + + this.get('openEditFormAction')(object); }, /** diff --git a/addon/services/fd-sheet-service.js b/addon/services/fd-sheet-service.js index c0ba1833f..6a884292a 100644 --- a/addon/services/fd-sheet-service.js +++ b/addon/services/fd-sheet-service.js @@ -81,6 +81,7 @@ export default Service.extend(Evented, { this.trigger('closeSheetTriggered', sheetName); this.set(`sheetSettings.visibility.${sheetName}`, false); this.set(`sheetSettings.expanded.${sheetName}`, false); + this.set(`sheetSettings.currentItem.${sheetName}`, undefined); let currentSheet = $(`.fd-sheet.${sheetName}`); if ($('.fd-sheet.visible').length < 2) { @@ -218,6 +219,11 @@ export default Service.extend(Evented, { if (!isNone(currentItemModel)) { isDirty = hasChanges(currentItemModel) && !currentItemModel.get('isDeleted'); + + // TODO: в будущем можно сделать для каждого листа свой rollbackAll и в нем проверять на isNew. + if (currentItemModel.get('isNew') && sheetName === 'edit-diagram-object-sheet') { + isDirty = false; + } } return isDirty; diff --git a/addon/templates/components/fd-sheets/fd-edit-diagram-object-sheet.hbs b/addon/templates/components/fd-sheets/fd-edit-diagram-object-sheet.hbs index f897ef711..278555863 100644 --- a/addon/templates/components/fd-sheets/fd-edit-diagram-object-sheet.hbs +++ b/addon/templates/components/fd-sheets/fd-edit-diagram-object-sheet.hbs @@ -6,6 +6,7 @@ {{fd-sheets/fd-sheets-tool-bar sheetComponentName=sheetComponentName readonlyMode=readonlyMode + isNewModel=selectedValue.isNew sheetButtons=(array 'save' 'share') shareSheetValue=selectedValue saveSheet=(action 'save') @@ -13,7 +14,7 @@ {{flexberry-textbox value=computedTitle placeholder=(t "components.fd-sheets-tool-bar.placeholder-caption") - readonly=readonlyMode + readonly=(and (not selectedValue.isNew) readonlyMode) class='form-header fluid' maxlength=maxlength }}