diff --git a/packages/server/src/common/features/layout/computed-bounds-action-handler.ts b/packages/server/src/common/features/layout/computed-bounds-action-handler.ts index 5bf5458..c5a5a92 100644 --- a/packages/server/src/common/features/layout/computed-bounds-action-handler.ts +++ b/packages/server/src/common/features/layout/computed-bounds-action-handler.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ import { GModelRoot } from '@eclipse-glsp/graph'; -import { Action, ComputedBoundsAction, MaybePromise } from '@eclipse-glsp/protocol'; +import { Action, ComputedBoundsAction, LayoutOperation, MaybePromise } from '@eclipse-glsp/protocol'; import { inject, injectable } from 'inversify'; import { ActionHandler } from '../../actions/action-handler'; import { applyAlignment, applyElementAndBounds, applyRoute } from '../../utils/layout-util'; @@ -39,7 +39,10 @@ export class ComputedBoundsActionHandler implements ActionHandler { const model = this.modelState.root; if (action.revision === model.revision) { this.applyBounds(model, action); - return this.submissionHandler.submitModelDirectly(); + return this.submissionHandler.submitModelDirectly( + undefined, + LayoutOperation.create([], { canvasBounds: action.canvasBounds, viewport: action.viewport }) + ); } return []; diff --git a/packages/server/src/common/features/model/model-submission-handler.ts b/packages/server/src/common/features/model/model-submission-handler.ts index 78b11c1..997efaa 100644 --- a/packages/server/src/common/features/model/model-submission-handler.ts +++ b/packages/server/src/common/features/model/model-submission-handler.ts @@ -17,6 +17,7 @@ import { Action, DirtyStateChangeReason, GModelRootSchema, + LayoutOperation, MarkersReason, MaybePromise, RequestBoundsAction, @@ -112,9 +113,10 @@ export class ModelSubmissionHandler { * to the `ActionDispatcher`, or simply returned as the result of an `ActionHandler.execute()` method. * * @param reason The optional reason that caused the model update. + * @param layout The optional layout operation that carries the information for auto-layout. * @returns A list of actions to be processed in order to submit the model. */ - submitModel(reason?: DirtyStateChangeReason): MaybePromise { + submitModel(reason?: DirtyStateChangeReason, layout?: LayoutOperation): MaybePromise { this.modelFactory.createModel(); const revision = this.requestModelAction ? 0 : this.modelState.root.revision! + 1; @@ -124,7 +126,7 @@ export class ModelSubmissionHandler { const root = this.serializeGModel(); return [RequestBoundsAction.create(root), SetDirtyStateAction.create(this.commandStack.isDirty, { reason })]; } - return this.submitModelDirectly(reason); + return this.submitModelDirectly(reason, layout); } /** @@ -139,11 +141,12 @@ export class ModelSubmissionHandler { * `ActionHandler.execute()` method. * * @param reason The optional reason that caused the model update. + * @param layout The optional layout operation that carries the information for auto-layout. * @returns A list of actions to be processed in order to submit the model. */ - async submitModelDirectly(reason?: DirtyStateChangeReason): Promise { + async submitModelDirectly(reason?: DirtyStateChangeReason, layout?: LayoutOperation): Promise { if (this.diagramConfiguration.layoutKind === ServerLayoutKind.AUTOMATIC && this.layoutEngine) { - await this.layoutEngine.layout(); + await this.layoutEngine.layout(layout); } const root = this.serializeGModel();