mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
Closes: [BS-2216](https://linear.app/affine-design/issue/BS-2216/remove-global-types-in-command)
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { RootBlockSchema } from '@blocksuite/affine-model';
|
|
import {
|
|
getBlockSelectionsCommand,
|
|
getImageSelectionsCommand,
|
|
getSelectedBlocksCommand,
|
|
getTextSelectionCommand,
|
|
} from '@blocksuite/affine-shared/commands';
|
|
import type { BlockComponent } from '@blocksuite/block-std';
|
|
import { BlockService } from '@blocksuite/block-std';
|
|
|
|
import {
|
|
HtmlTransformer,
|
|
MarkdownTransformer,
|
|
ZipTransformer,
|
|
} from '../_common/transformers/index.js';
|
|
import type { RootBlockComponent } from './types.js';
|
|
|
|
export abstract class RootService extends BlockService {
|
|
static override readonly flavour = RootBlockSchema.model.flavour;
|
|
|
|
transformers = {
|
|
markdown: MarkdownTransformer,
|
|
html: HtmlTransformer,
|
|
zip: ZipTransformer,
|
|
};
|
|
|
|
get selectedBlocks() {
|
|
let result: BlockComponent[] = [];
|
|
this.std.command
|
|
.chain()
|
|
.tryAll(chain => [
|
|
chain.pipe(getTextSelectionCommand),
|
|
chain.pipe(getImageSelectionsCommand),
|
|
chain.pipe(getBlockSelectionsCommand),
|
|
])
|
|
.pipe(getSelectedBlocksCommand)
|
|
.pipe(({ selectedBlocks }) => {
|
|
if (!selectedBlocks) return;
|
|
result = selectedBlocks;
|
|
})
|
|
.run();
|
|
return result;
|
|
}
|
|
|
|
get selectedModels() {
|
|
return this.selectedBlocks.map(block => block.model);
|
|
}
|
|
|
|
get viewportElement() {
|
|
const rootId = this.std.store.root?.id;
|
|
if (!rootId) return null;
|
|
const rootComponent = this.std.view.getBlock(
|
|
rootId
|
|
) as RootBlockComponent | null;
|
|
if (!rootComponent) return null;
|
|
const viewportElement = rootComponent.viewportElement;
|
|
return viewportElement;
|
|
}
|
|
}
|