diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 4ca5ae19a..c871ae18c 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -15,8 +15,6 @@ jobs: run: pnpm lint - name: Format Check run: pnpm format:check - - name: Build - run: pnpm build - name: Test run: pnpm test - name: Docs diff --git a/packages/core/src/commands/view/SelectComponent.ts b/packages/core/src/commands/view/SelectComponent.ts index 5df5fb535..69f37e73b 100644 --- a/packages/core/src/commands/view/SelectComponent.ts +++ b/packages/core/src/commands/view/SelectComponent.ts @@ -326,8 +326,10 @@ export default { */ select(model: Component, event = {}) { if (!model) return; - this.editor.select(model, { event, useValid: true }); - this.initResize(model); + const { em } = this; + em.setSelected(model, { event, useValid: true }); + // Ensure we're passing the proper selected component #6096 + this.initResize(em.getSelected()); }, /** diff --git a/packages/core/src/dom_components/types.ts b/packages/core/src/dom_components/types.ts index e62ce1514..aa81abcfb 100644 --- a/packages/core/src/dom_components/types.ts +++ b/packages/core/src/dom_components/types.ts @@ -52,6 +52,14 @@ export enum ComponentsEvents { update = 'component:update', updateInside = 'component:update-inside', + /** + * @event `component:select` Component selected. + * @example + * editor.on('component:select', (component) => { ... }); + */ + select = 'component:select', + selectBefore = 'component:select:before', + /** * @event `symbol:main:add` Added new main symbol. * @example diff --git a/packages/core/src/editor/model/Editor.ts b/packages/core/src/editor/model/Editor.ts index 9627b5873..8f06c25ed 100644 --- a/packages/core/src/editor/model/Editor.ts +++ b/packages/core/src/editor/model/Editor.ts @@ -43,6 +43,7 @@ import { AddComponentsOption, ComponentAdd, DragMode } from '../../dom_component import ComponentWrapper from '../../dom_components/model/ComponentWrapper'; import { CanvasSpotBuiltInTypes } from '../../canvas/model/CanvasSpot'; import DataSourceManager from '../../data_sources'; +import { ComponentsEvents } from '../../dom_components/types'; Backbone.$ = $; @@ -507,7 +508,7 @@ export default class EditorModel extends Model { models.forEach((model) => { if (model) { - this.trigger('component:select:before', model, opts); + this.trigger(ComponentsEvents.selectBefore, model, opts); // Check for valid selectable if (!model.get('selectable') || opts.abort) { @@ -592,7 +593,7 @@ export default class EditorModel extends Model { toDeselect.forEach((cmp) => this.removeSelected(cmp, opts)); selected.addComponent(model, opts); - this.trigger('component:select', model, opts); + this.trigger(ComponentsEvents.select, model, opts); this.Canvas.addSpot({ type: CanvasSpotBuiltInTypes.Select, component: model, diff --git a/packages/core/src/utils/Sorter.ts b/packages/core/src/utils/Sorter.ts index e8d92e88a..bf261efee 100644 --- a/packages/core/src/utils/Sorter.ts +++ b/packages/core/src/utils/Sorter.ts @@ -697,7 +697,14 @@ export default class Sorter extends View { return result; } - const index = pos ? (pos.method === 'after' ? pos.indexEl + 1 : pos.indexEl) : trgModel.components().length; + let length = -1; + const isCollection = trgModel instanceof Collection; + if (isFunction(trgModel.components)) { + length = trgModel.components().length; + } else if (isCollection) { + length = trgModel.models.length; + } + const index = pos ? (pos.method === 'after' ? pos.indexEl + 1 : pos.indexEl) : length; // Check if the source is draggable in target let draggable = srcModel.get('draggable');