feat(editor): unify block props api (#10888)

Closes: [BS-2707](https://linear.app/affine-design/issue/BS-2707/统一使用props获取和更新block-prop)
This commit is contained in:
Saul-Mirone
2025-03-16 05:48:34 +00:00
parent 8f9e5bf0aa
commit 26285f7dcb
193 changed files with 1019 additions and 891 deletions
@@ -24,7 +24,7 @@ export class AttachmentBlockTransformer extends BaseBlockTransformer<AttachmentB
snapshot: ToSnapshotPayload<AttachmentBlockProps>
): BlockSnapshotLeaf {
const snapshotRet = super.toSnapshot(snapshot);
const sourceId = snapshot.model.sourceId;
const sourceId = snapshot.model.props.sourceId;
if (sourceId) {
const pathBlobIdMap = snapshot.assets.getPathBlobIdMap();
pathBlobIdMap.set(snapshot.model.id, sourceId);
@@ -31,9 +31,7 @@ export type CalloutProps = {
text: Text;
};
export class CalloutBlockModel extends BlockModel<CalloutProps> {
override text!: Text;
}
export class CalloutBlockModel extends BlockModel<CalloutProps> {}
export const CalloutBlockSchemaExtension =
BlockSchemaExtension(CalloutBlockSchema);
@@ -37,6 +37,4 @@ export const CodeBlockSchema = defineBlockSchema({
export const CodeBlockSchemaExtension = BlockSchemaExtension(CodeBlockSchema);
export class CodeBlockModel extends BlockModel<CodeBlockProps> {
override text!: Text;
}
export class CodeBlockModel extends BlockModel<CodeBlockProps> {}
@@ -86,4 +86,13 @@ export const EdgelessTextBlockSchemaExtension = BlockSchemaExtension(
export class EdgelessTextBlockModel
extends GfxCompatible<EdgelessTextProps>(BlockModel)
implements GfxElementGeometry {}
implements GfxElementGeometry
{
get color() {
return this.props.color;
}
set color(color: EdgelessTextProps['color']) {
this.props.color = color;
}
}
@@ -87,7 +87,9 @@ export class FrameBlockModel
}
get childIds() {
return this.childElementIds ? Object.keys(this.childElementIds) : [];
return this.props.childElementIds
? Object.keys(this.props.childElementIds)
: [];
}
get descendantElements(): GfxModel[] {
@@ -98,7 +100,10 @@ export class FrameBlockModel
if (!canSafeAddToContainer(this, element)) return;
this.doc.transact(() => {
this.childElementIds = { ...this.childElementIds, [element.id]: true };
this.props.childElementIds = {
...this.props.childElementIds,
[element.id]: true,
};
});
}
@@ -114,8 +119,8 @@ export class FrameBlockModel
}
this.doc.transact(() => {
this.childElementIds = {
...this.childElementIds,
this.props.childElementIds = {
...this.props.childElementIds,
...newChildren,
};
});
@@ -126,7 +131,9 @@ export class FrameBlockModel
}
hasChild(element: GfxModel): boolean {
return this.childElementIds ? element.id in this.childElementIds : false;
return this.props.childElementIds
? element.id in this.props.childElementIds
: false;
}
hasDescendant(element: GfxModel): boolean {
@@ -147,7 +154,8 @@ export class FrameBlockModel
removeChild(element: GfxModel): void {
this.doc.transact(() => {
this.childElementIds && delete this.childElementIds[element.id];
this.props.childElementIds &&
delete this.props.childElementIds[element.id];
});
}
}
@@ -24,7 +24,7 @@ export class ImageBlockTransformer extends BaseBlockTransformer<ImageBlockProps>
snapshot: ToSnapshotPayload<ImageBlockProps>
): BlockSnapshotLeaf {
const snapshotRet = super.toSnapshot(snapshot);
const sourceId = snapshot.model.sourceId;
const sourceId = snapshot.model.props.sourceId;
if (sourceId) {
const pathBlobIdMap = snapshot.assets.getPathBlobIdMap();
pathBlobIdMap.set(snapshot.model.id, sourceId);
@@ -44,6 +44,4 @@ export const ListBlockSchema = defineBlockSchema({
export const ListBlockSchemaExtension = BlockSchemaExtension(ListBlockSchema);
export class ListBlockModel extends BlockModel<ListProps> {
override text!: Text;
}
export class ListBlockModel extends BlockModel<ListProps> {}
@@ -130,7 +130,7 @@ export class NoteBlockModel
implements GfxElementGeometry
{
private _isSelectable(): boolean {
return this.displayMode !== NoteDisplayMode.DocOnly;
return this.props.displayMode !== NoteDisplayMode.DocOnly;
}
override containsBound(bounds: Bound): boolean {
@@ -169,7 +169,7 @@ export class NoteBlockModel
this.parent?.children.find(
child =>
child instanceof NoteBlockModel &&
child.displayMode !== NoteDisplayMode.EdgelessOnly
child.props.displayMode !== NoteDisplayMode.EdgelessOnly
) === this
);
}
@@ -53,9 +53,7 @@ export const ParagraphBlockSchemaExtension =
BlockSchemaExtension(ParagraphBlockSchema);
export class ParagraphBlockModel extends BlockModel<ParagraphProps> {
override text!: Text;
override isEmpty(): boolean {
return this.text$.value.length === 0 && this.children.length === 0;
return this.props.text$.value.length === 0 && this.children.length === 0;
}
}
@@ -18,9 +18,12 @@ export class RootBlockModel extends BlockModel<RootBlockProps> {
const model = this.doc.getBlockById(id);
if (model instanceof RootBlockModel) {
const newDocMeta = this.doc.workspace.meta.getDocMeta(model.doc.id);
if (!newDocMeta || newDocMeta.title !== model.title.toString()) {
if (
!newDocMeta ||
newDocMeta.title !== model.props.title.toString()
) {
this.doc.workspace.meta.setDocMeta(model.doc.id, {
title: model.title.toString(),
title: model.props.title.toString(),
});
}
}