mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-20 15:57:06 +08:00
refactor(editor): remove selection global types (#9532)
Closes: [BS-2217](https://linear.app/affine-design/issue/BS-2217/remove-global-types-in-selection)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { WorkspaceImpl } from '@affine/core/modules/workspace/impls/workspace';
|
||||
import type {
|
||||
EditorHost,
|
||||
TextRangePoint,
|
||||
import {
|
||||
type EditorHost,
|
||||
type TextRangePoint,
|
||||
TextSelection,
|
||||
} from '@blocksuite/affine/block-std';
|
||||
import {
|
||||
@@ -68,7 +68,7 @@ function processSnapshot(
|
||||
*/
|
||||
function processTextInSnapshot(snapshot: SliceSnapshot, host: EditorHost) {
|
||||
const { content } = snapshot;
|
||||
const text = host.selection.find('text');
|
||||
const text = host.selection.find(TextSelection);
|
||||
if (!content.length || !text) return;
|
||||
|
||||
content.forEach(snapshot => processSnapshot(snapshot, text, host));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ChatHistoryOrder } from '@affine/graphql';
|
||||
import type {
|
||||
import {
|
||||
BlockSelection,
|
||||
EditorHost,
|
||||
type EditorHost,
|
||||
TextSelection,
|
||||
} from '@blocksuite/affine/block-std';
|
||||
import type {
|
||||
@@ -198,8 +198,8 @@ const REPLACE_SELECTION = {
|
||||
icon: ReplaceIcon,
|
||||
title: 'Replace selection',
|
||||
showWhen: (host: EditorHost) => {
|
||||
const textSelection = host.selection.find('text');
|
||||
const blockSelections = host.selection.filter('block');
|
||||
const textSelection = host.selection.find(TextSelection);
|
||||
const blockSelections = host.selection.filter(BlockSelection);
|
||||
if (
|
||||
(!textSelection || textSelection.from.length === 0) &&
|
||||
blockSelections?.length === 0
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import type { EditorHost } from '@blocksuite/affine/block-std';
|
||||
import {
|
||||
BlockSelection,
|
||||
type EditorHost,
|
||||
TextSelection,
|
||||
} from '@blocksuite/affine/block-std';
|
||||
import {
|
||||
type AffineAIPanelWidgetConfig,
|
||||
type AIItemGroupConfig,
|
||||
@@ -92,8 +96,8 @@ export class AskAIToolbarButton extends WithDisposable(LitElement) {
|
||||
this._panelRoot.style.visibility = text ? 'hidden' : 'visible';
|
||||
};
|
||||
|
||||
const textSelection = this.host.selection.find('text');
|
||||
const blockSelections = this.host.selection.filter('block');
|
||||
const textSelection = this.host.selection.find(TextSelection);
|
||||
const blockSelections = this.host.selection.filter(BlockSelection);
|
||||
let lastBlockId: string | undefined;
|
||||
if (textSelection) {
|
||||
lastBlockId = textSelection.to?.blockId ?? textSelection.blockId;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { EditorHost } from '@blocksuite/affine/block-std';
|
||||
import { type EditorHost, TextSelection } from '@blocksuite/affine/block-std';
|
||||
import type {
|
||||
AffineAIPanelWidget,
|
||||
AffineAIPanelWidgetConfig,
|
||||
@@ -209,7 +209,7 @@ export function actionToHandler<T extends keyof BlockSuitePresets.AIActions>(
|
||||
|
||||
export function handleInlineAskAIAction(host: EditorHost) {
|
||||
const panel = getAIPanelWidget(host);
|
||||
const selection = host.selection.find('text');
|
||||
const selection = host.selection.find(TextSelection);
|
||||
const lastBlockPath = selection
|
||||
? (selection.to?.blockId ?? selection.blockId)
|
||||
: null;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { EditorHost } from '@blocksuite/affine/block-std';
|
||||
import { type EditorHost, TextSelection } from '@blocksuite/affine/block-std';
|
||||
import {
|
||||
GfxBlockElementModel,
|
||||
type GfxModel,
|
||||
@@ -214,7 +214,7 @@ async function insertMarkdownAbove(host: EditorHost) {
|
||||
}
|
||||
|
||||
function getSelection(host: EditorHost) {
|
||||
const textSelection = host.selection.find('text');
|
||||
const textSelection = host.selection.find(TextSelection);
|
||||
const mode = textSelection ? 'flat' : 'highest';
|
||||
const { selectedBlocks } = getSelections(host, mode);
|
||||
if (!selectedBlocks) return;
|
||||
|
||||
@@ -9,6 +9,8 @@ const buttonOptions: AskAIButtonOptions = {
|
||||
panelWidth: 240,
|
||||
};
|
||||
|
||||
import { BlockSelection } from '@blocksuite/affine/block-std';
|
||||
|
||||
import type { AskAIButtonOptions } from '../../_common/components/ask-ai-button';
|
||||
import { buildAICodeItemGroups } from '../../_common/config';
|
||||
|
||||
@@ -22,7 +24,9 @@ export function setupCodeToolbarAIEntry(codeToolbar: AffineCodeToolbarWidget) {
|
||||
action: () => {
|
||||
const { selection } = host;
|
||||
selection.setGroup('note', [
|
||||
selection.create('block', { blockId: blockComponent.blockId }),
|
||||
selection.create(BlockSelection, {
|
||||
blockId: blockComponent.blockId,
|
||||
}),
|
||||
]);
|
||||
},
|
||||
render: item =>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import '../../_common/components/ask-ai-button';
|
||||
|
||||
import type { AffineImageToolbarWidget } from '@blocksuite/affine/blocks';
|
||||
import {
|
||||
type AffineImageToolbarWidget,
|
||||
ImageSelection,
|
||||
} from '@blocksuite/affine/blocks';
|
||||
import { html } from 'lit';
|
||||
|
||||
import type { AskAIButtonOptions } from '../../_common/components/ask-ai-button';
|
||||
@@ -26,7 +29,9 @@ export function setupImageToolbarAIEntry(
|
||||
action: () => {
|
||||
const { selection } = host;
|
||||
selection.setGroup('note', [
|
||||
selection.create('image', { blockId: blockComponent.blockId }),
|
||||
selection.create(ImageSelection, {
|
||||
blockId: blockComponent.blockId,
|
||||
}),
|
||||
]);
|
||||
},
|
||||
render: item =>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { TextSelection } from '@blocksuite/affine/block-std';
|
||||
import type { AffineAIPanelWidget } from '@blocksuite/affine/blocks';
|
||||
|
||||
import { handleInlineAskAIAction } from '../../actions/doc-handler';
|
||||
@@ -12,7 +13,7 @@ export function setupSpaceAIEntry(panel: AffineAIPanelWidget) {
|
||||
keyboardState.raw.key === ' ' &&
|
||||
!keyboardState.raw.isComposing
|
||||
) {
|
||||
const selection = host.selection.find('text');
|
||||
const selection = host.selection.find(TextSelection);
|
||||
if (selection && selection.isCollapsed() && selection.from.index === 0) {
|
||||
const block = host.view.getBlock(selection.blockId);
|
||||
if (!block?.model?.text || block.model.text?.length > 0) return;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import type {
|
||||
BlockComponent,
|
||||
EditorHost,
|
||||
TextSelection,
|
||||
import {
|
||||
type BlockComponent,
|
||||
BlockSelection,
|
||||
type EditorHost,
|
||||
SurfaceSelection,
|
||||
type TextSelection,
|
||||
} from '@blocksuite/affine/block-std';
|
||||
import type { AffineAIPanelWidget } from '@blocksuite/affine/blocks';
|
||||
import { isInsideEdgelessEditor } from '@blocksuite/affine/blocks';
|
||||
@@ -32,12 +34,12 @@ const setBlockSelection = (
|
||||
) => {
|
||||
const selections = models
|
||||
.map(model => model.id)
|
||||
.map(blockId => host.selection.create('block', { blockId }));
|
||||
.map(blockId => host.selection.create(BlockSelection, { blockId }));
|
||||
|
||||
if (isInsideEdgelessEditor(host)) {
|
||||
const surfaceElementId = getNoteId(parent);
|
||||
const surfaceSelection = host.selection.create(
|
||||
'surface',
|
||||
SurfaceSelection,
|
||||
selections[0].blockId,
|
||||
[surfaceElementId],
|
||||
true
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { EditorHost } from '@blocksuite/affine/block-std';
|
||||
import { type EditorHost, TextSelection } from '@blocksuite/affine/block-std';
|
||||
import {
|
||||
BlocksUtils,
|
||||
type CopilotTool,
|
||||
@@ -174,7 +174,7 @@ export async function selectAboveBlocks(editorHost: EditorHost, num = 10) {
|
||||
|
||||
const { selection } = editorHost;
|
||||
selection.set([
|
||||
selection.create('text', {
|
||||
selection.create(TextSelection, {
|
||||
from: {
|
||||
blockId: startBlock.id,
|
||||
index: 0,
|
||||
@@ -183,7 +183,7 @@ export async function selectAboveBlocks(editorHost: EditorHost, num = 10) {
|
||||
to: {
|
||||
blockId: lastLeafModel.id,
|
||||
index: 0,
|
||||
length: selection.find('text')?.from.index ?? 0,
|
||||
length: selection.find(TextSelection)?.from.index ?? 0,
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user