mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 10:36:22 +08:00
8ce85f708d
#### PR Dependency Tree * **PR #12948** 👈 * **PR #12980** This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Introduced inline comment functionality, allowing users to add, resolve, and highlight comments directly within text. * Added a new toolbar action for inserting comments when supported. * Inline comments are visually highlighted and can be interacted with in the editor. * **Enhancements** * Integrated a feature flag to enable or disable the comment feature. * Improved inline manager rendering to support wrapper specs for advanced formatting. * **Developer Tools** * Added mock comment provider for testing and development environments. * **Chores** * Updated dependencies and project references to support the new inline comment module. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { getInlineEditorByModel } from '@blocksuite/affine-rich-text';
|
|
import type { CommentId } from '@blocksuite/affine-shared/services';
|
|
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
|
|
import { type BlockStdScope, TextSelection } from '@blocksuite/std';
|
|
import type { InlineEditor } from '@blocksuite/std/inline';
|
|
import type { DeltaInsert } from '@blocksuite/store';
|
|
|
|
export function findCommentedTexts(std: BlockStdScope, commentId: CommentId) {
|
|
const selections: [TextSelection, InlineEditor][] = [];
|
|
std.store.getAllModels().forEach(model => {
|
|
const inlineEditor = getInlineEditorByModel(std, model);
|
|
if (!inlineEditor) return;
|
|
|
|
inlineEditor.mapDeltasInInlineRange(
|
|
{
|
|
index: 0,
|
|
length: inlineEditor.yTextLength,
|
|
},
|
|
(delta, rangeIndex) => {
|
|
if (
|
|
delta.attributes &&
|
|
Object.keys(delta.attributes).some(
|
|
key => key === `comment-${commentId}`
|
|
)
|
|
) {
|
|
selections.push([
|
|
new TextSelection({
|
|
from: {
|
|
blockId: model.id,
|
|
index: rangeIndex,
|
|
length: delta.insert.length,
|
|
},
|
|
to: null,
|
|
}),
|
|
inlineEditor,
|
|
]);
|
|
}
|
|
}
|
|
);
|
|
});
|
|
|
|
return selections;
|
|
}
|
|
|
|
export function extractCommentIdFromDelta(
|
|
delta: DeltaInsert<AffineTextAttributes>
|
|
) {
|
|
if (!delta.attributes) return [];
|
|
|
|
return Object.keys(delta.attributes)
|
|
.filter(key => key.startsWith('comment-'))
|
|
.map(key => key.replace('comment-', ''));
|
|
}
|