refactor: redesign element transform manager interface (#11679)

### Change
- Rename `ElementTransformManager` -> `InteractivityManager`
- Now you can `event.on` and `action.onXXX` method to extend interactivity behaviour. The old approach of overriding methods directly is deprecated.
This commit is contained in:
doouding
2025-04-22 08:18:22 +00:00
parent e457e2f8a8
commit 52953ce8e3
22 changed files with 507 additions and 389 deletions

View File

@@ -1,39 +1,42 @@
import { ConnectorElementModel } from '@blocksuite/affine-model';
import {
type DragExtensionInitializeContext,
TransformExtension,
InteractivityExtension,
} from '@blocksuite/std/gfx';
export class ConnectorFilter extends TransformExtension {
export class ConnectorFilter extends InteractivityExtension {
static override key = 'connector-filter';
override onDragInitialize(context: DragExtensionInitializeContext) {
let hasConnectorFlag = false;
const elementSet = new Set(context.elements.map(elem => elem.id));
const elements = context.elements.filter(elem => {
if (elem instanceof ConnectorElementModel) {
const sourceElemNotFound =
elem.source.id && !elementSet.has(elem.source.id);
const targetElemNotFound =
elem.target.id && !elementSet.has(elem.target.id);
override mounted() {
this.action.onDragInitialize((context: DragExtensionInitializeContext) => {
let hasConnectorFlag = false;
// If either source or target element is not found, then remove the connector
if (sourceElemNotFound || targetElemNotFound) {
return false;
const elementSet = new Set(context.elements.map(elem => elem.id));
const elements = context.elements.filter(elem => {
if (elem instanceof ConnectorElementModel) {
const sourceElemNotFound =
elem.source.id && !elementSet.has(elem.source.id);
const targetElemNotFound =
elem.target.id && !elementSet.has(elem.target.id);
// If either source or target element is not found, then remove the connector
if (sourceElemNotFound || targetElemNotFound) {
return false;
}
hasConnectorFlag = true;
return true;
}
hasConnectorFlag = true;
return true;
});
if (hasConnectorFlag) {
// connector needs to be updated first
elements.sort((a, _) => (a instanceof ConnectorElementModel ? -1 : 1));
}
return true;
return {};
});
if (hasConnectorFlag) {
// connector needs to be updated first
elements.sort((a, _) => (a instanceof ConnectorElementModel ? -1 : 1));
}
return {};
}
}