refactor(editor): move database selection into the corresponding view (#9752)

This commit is contained in:
zzj3720
2025-01-17 09:03:13 +00:00
parent 338ccb427b
commit aa21ac6d64
34 changed files with 375 additions and 394 deletions

View File

@@ -0,0 +1,76 @@
import type { DataViewSelection } from '@blocksuite/data-view';
import {
KanbanViewSelectionWithTypeSchema,
TableViewSelectionWithTypeSchema,
} from '@blocksuite/data-view/view-presets';
import { BaseSelection, SelectionExtension } from '@blocksuite/store';
import { z } from 'zod';
const ViewSelectionSchema = z.union([
TableViewSelectionWithTypeSchema,
KanbanViewSelectionWithTypeSchema,
]);
const DatabaseSelectionSchema = z.object({
blockId: z.string(),
viewSelection: ViewSelectionSchema,
});
export class DatabaseSelection extends BaseSelection {
static override group = 'note';
static override type = 'database';
readonly viewSelection: DataViewSelection;
get viewId() {
return this.viewSelection.viewId;
}
constructor({
blockId,
viewSelection,
}: {
blockId: string;
viewSelection: DataViewSelection;
}) {
super({
blockId,
});
this.viewSelection = viewSelection;
}
static override fromJSON(json: Record<string, unknown>): DatabaseSelection {
const { blockId, viewSelection } = DatabaseSelectionSchema.parse(json);
return new DatabaseSelection({
blockId,
viewSelection: viewSelection,
});
}
override equals(other: BaseSelection): boolean {
if (!(other instanceof DatabaseSelection)) {
return false;
}
return this.blockId === other.blockId;
}
override toJSON(): Record<string, unknown> {
return {
type: 'database',
blockId: this.blockId,
viewSelection: this.viewSelection,
};
}
}
declare global {
namespace BlockSuite {
interface Selection {
database: typeof DatabaseSelection;
}
}
}
export const DatabaseSelectionExtension = SelectionExtension(DatabaseSelection);