2022-12-26 14:08:12 +08:00

66 lines
1.8 KiB
TypeScript

import {
IPublicApiCanvas,
IPublicModelDropLocation,
IPublicModelScrollTarget,
IPublicModelScrollable,
IPublicModelScroller,
IDesigner,
IPublicTypeLocationData,
IPublicModelEditor,
IPublicModelDragon,
IPublicModelActiveTracker,
} from '@alilc/lowcode-types';
import {
ScrollTarget as InnerScrollTarget,
} from '@alilc/lowcode-designer';
import { editorSymbol, designerSymbol, nodeSymbol } from '../symbols';
import { Dragon } from '../model';
import { DropLocation } from '../model/drop-location';
import { ActiveTracker } from '../model/active-tracker';
export class Canvas implements IPublicApiCanvas {
private readonly [editorSymbol]: IPublicModelEditor;
private get [designerSymbol](): IDesigner {
return this[editorSymbol].get('designer') as IDesigner;
}
constructor(editor: IPublicModelEditor) {
this[editorSymbol] = editor;
}
createScrollTarget(shell: HTMLDivElement): IPublicModelScrollTarget {
return new InnerScrollTarget(shell);
}
createScroller(scrollable: IPublicModelScrollable): IPublicModelScroller {
return this[designerSymbol].createScroller(scrollable);
}
/**
* 创建插入位置,考虑放到 dragon 中
*/
createLocation(locationData: IPublicTypeLocationData): IPublicModelDropLocation {
return this[designerSymbol].createLocation({
...locationData,
target: (locationData.target as any)[nodeSymbol],
});
}
get dragon(): IPublicModelDragon | null {
return Dragon.create(this[designerSymbol].dragon);
}
get activeTracker(): IPublicModelActiveTracker | null {
const activeTracker = new ActiveTracker(this[designerSymbol].activeTracker);
return activeTracker;
}
/**
* @deprecated
*/
get dropLocation() {
return DropLocation.create((this[designerSymbol] as any).dropLocation || null);
}
}