refactor(editor): remove global types in edgeless (#10092)

Closes: [BS-2553](https://linear.app/affine-design/issue/BS-2553/remove-global-types-in-edgeless)
This commit is contained in:
Saul-Mirone
2025-02-11 12:09:44 +00:00
parent 3062bd0771
commit dbf0f9dc20
45 changed files with 126 additions and 329 deletions

View File

@@ -6,7 +6,7 @@ import {
SurfaceGroupLikeModel,
TextUtils,
} from '@blocksuite/affine-block-surface';
import type { Connection } from '@blocksuite/affine-model';
import type { Connection, ShapeElementModel } from '@blocksuite/affine-model';
import {
BookmarkStyles,
DEFAULT_NOTE_HEIGHT,
@@ -40,8 +40,10 @@ import type {
} from '@blocksuite/block-std';
import {
compareLayer,
type GfxBlockElementModel,
type GfxCompatibleProps,
type GfxModel,
type GfxPrimitiveElementModel,
type SerializedElement,
SortOrder,
} from '@blocksuite/block-std/gfx';
@@ -313,7 +315,7 @@ export class EdgelessClipboardController extends PageClipboard {
.get(EmbedOptionProvider)
.getEmbedBlockOptions(url);
if (embedOptions) {
flavour = embedOptions.flavour as BlockSuite.EdgelessModelKeys;
flavour = embedOptions.flavour;
style = embedOptions.styles[0];
}
}
@@ -605,7 +607,7 @@ export class EdgelessClipboardController extends PageClipboard {
segment: 'toolbar',
type: clipboardData.type as string,
});
const element = this.crud.getElementById(id) as BlockSuite.SurfaceModel;
const element = this.crud.getElementById(id) as GfxPrimitiveElementModel;
assertExists(element);
return element;
}
@@ -882,8 +884,8 @@ export class EdgelessClipboardController extends PageClipboard {
private async _edgelessToCanvas(
edgeless: EdgelessRootBlockComponent,
bound: IBound,
nodes?: BlockSuite.EdgelessBlockModelType[],
canvasElements: BlockSuite.SurfaceModel[] = [],
nodes?: GfxBlockElementModel[],
canvasElements: GfxPrimitiveElementModel[] = [],
{
background,
padding = IMAGE_PADDING,
@@ -961,7 +963,7 @@ export class EdgelessClipboardController extends PageClipboard {
};
const _drawTopLevelBlock = async (
block: BlockSuite.EdgelessBlockModelType,
block: GfxBlockElementModel,
isInFrame = false
) => {
const blockComponent = this.std.view.getBlock(block.id);
@@ -992,19 +994,19 @@ export class EdgelessClipboardController extends PageClipboard {
nodes ??
(edgeless.service.gfx.getElementsByBound(bound, {
type: 'block',
}) as BlockSuite.EdgelessBlockModelType[]);
}) as GfxBlockElementModel[]);
for (const nodeElement of nodeElements) {
await _drawTopLevelBlock(nodeElement);
if (matchModels(nodeElement, [FrameBlockModel])) {
const blocksInsideFrame: BlockSuite.EdgelessBlockModelType[] = [];
const blocksInsideFrame: GfxBlockElementModel[] = [];
this.edgeless.service.frame
.getElementsInFrameBound(nodeElement, false)
.forEach(ele => {
if (isTopLevelBlock(ele)) {
blocksInsideFrame.push(ele as BlockSuite.EdgelessBlockModelType);
blocksInsideFrame.push(ele as GfxBlockElementModel);
} else {
canvasElements.push(ele as BlockSuite.SurfaceModel);
canvasElements.push(ele as GfxPrimitiveElementModel);
}
});
@@ -1245,8 +1247,8 @@ export class EdgelessClipboardController extends PageClipboard {
),
};
const blockModels: BlockSuite.EdgelessBlockModelType[] = [];
const canvasElements: BlockSuite.SurfaceModel[] = [];
const blockModels: GfxBlockElementModel[] = [];
const canvasElements: GfxPrimitiveElementModel[] = [];
const allElements: GfxModel[] = [];
for (const data of elementsRawData) {
@@ -1283,7 +1285,7 @@ export class EdgelessClipboardController extends PageClipboard {
const block = this.doc.getBlock(newId);
if (!block) continue;
assertType<BlockSuite.EdgelessBlockModelType>(block.model);
assertType<GfxBlockElementModel>(block.model);
blockModels.push(block.model);
allElements.push(block.model);
context.oldToNewIdMap.set(oldId, newId);
@@ -1343,8 +1345,8 @@ export class EdgelessClipboardController extends PageClipboard {
}
async toCanvas(
blocks: BlockSuite.EdgelessBlockModelType[],
shapes: BlockSuite.SurfaceModel[],
blocks: GfxBlockElementModel[],
shapes: ShapeElementModel[],
options?: CanvasExportOptions
) {
blocks.sort(compareLayer);

View File

@@ -43,6 +43,7 @@ import {
GfxControllerIdentifier,
GfxExtensionIdentifier,
type GfxModel,
type GfxPrimitiveElementModel,
} from '@blocksuite/block-std/gfx';
import type {
Disposable,
@@ -891,7 +892,7 @@ export class EdgelessSelectedRectWidget extends WidgetComponent<
areAllConnectors = false;
areAllShapes = false;
} else {
assertType<BlockSuite.SurfaceElementModel>(element);
assertType<GfxPrimitiveElementModel>(element);
if (element.type === CanvasElementType.CONNECTOR) {
const connector = element as ConnectorElementModel;
areAllIndependentConnectors &&= !(

View File

@@ -23,6 +23,7 @@ import { matchModels } from '@blocksuite/affine-shared/utils';
import { SurfaceSelection, TextSelection } from '@blocksuite/block-std';
import {
GfxBlockElementModel,
type GfxPrimitiveElementModel,
type GfxToolsMap,
type GfxToolsOption,
isGfxGroupCompatibleModel,
@@ -573,7 +574,7 @@ export class EdgelessPageKeyboardManager extends PageKeyboardManager {
const node = mindmapNodes[0];
const mindmap = node.group as MindmapElementModel;
const nodeDirection = mindmap.getLayoutDir(node.id);
let targetNode: BlockSuite.SurfaceElementModel | null = null;
let targetNode: GfxPrimitiveElementModel | null = null;
switch (key) {
case 'ArrowUp':

View File

@@ -491,11 +491,7 @@ export function getBlocksInFrameBound(
if (!surface) return [];
return (
getNotesInFrameBound(
doc,
model,
fullyContained
) as BlockSuite.EdgelessBlockModelType[]
getNotesInFrameBound(doc, model, fullyContained) as GfxBlockElementModel[]
).concat(
surface.children.filter(ele => {
if (ele.id === model.id) return false;
@@ -507,6 +503,6 @@ export function getBlocksInFrameBound(
}
return false;
}) as BlockSuite.EdgelessBlockModelType[]
}) as GfxBlockElementModel[]
);
}

View File

@@ -14,6 +14,7 @@ import {
import type { PointerEventState } from '@blocksuite/block-std';
import {
type GfxModel,
type GfxPrimitiveElementModel,
isGfxGroupCompatibleModel,
} from '@blocksuite/block-std/gfx';
import type { Bound, IVec } from '@blocksuite/global/utils';
@@ -352,7 +353,7 @@ export class MindMapExt extends DefaultToolExt {
) {
const OPACITY = 0.3;
const updatedNodes = new Set<
BlockSuite.SurfaceElementModel | LocalConnectorElementModel
GfxPrimitiveElementModel | LocalConnectorElementModel
>();
const traverse = (node: MindmapNode, parent: MindmapNode | null) => {
node.element.opacity = OPACITY;

View File

@@ -11,7 +11,7 @@ export class EditPropsMiddlewareBuilder extends SurfaceMiddlewareBuilder {
middleware: SurfaceMiddleware = ctx => {
if (ctx.type === 'beforeAdd') {
const { type, props } = ctx.payload;
const key = getLastPropsKey(type as BlockSuite.EdgelessModelKeys, props);
const key = getLastPropsKey(type, props);
const nProps = key
? this.std.get(EditPropsStore).applyLastProps(key, ctx.payload.props)
: null;

View File

@@ -6,6 +6,7 @@ import type {
FrameBlockProps,
ImageBlockModel,
NoteBlockModel,
ShapeElementModel,
} from '@blocksuite/affine-model';
import { getElementsWithoutGroup } from '@blocksuite/affine-shared/utils';
import {
@@ -72,7 +73,7 @@ export const splitElements = (elements: GfxModel[]) => {
return 'shapes';
}) as {
notes: NoteBlockModel[];
shapes: BlockSuite.SurfaceModel[];
shapes: ShapeElementModel[];
frames: FrameBlockModel[];
images: ImageBlockModel[];
edgelessTexts: EdgelessTextBlockModel[];

View File

@@ -15,6 +15,7 @@ import {
getTopElements,
GfxBlockElementModel,
type GfxModel,
type GfxPrimitiveElementModel,
isGfxGroupCompatibleModel,
type SerializedElement,
} from '@blocksuite/block-std/gfx';
@@ -225,7 +226,7 @@ export function mapMindmapIds(
}
export function getElementProps(
element: BlockSuite.SurfaceModel,
element: GfxPrimitiveElementModel,
ids: Map<string, string>
) {
if (element instanceof ConnectorElementModel) {