mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-15 09:06:19 +08:00
init: the first public commit for AFFiNE
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import { useState, useCallback } from 'react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
import { services } from '@toeverything/datasource/db-service';
|
||||
import { WithEditorSelectionType } from '../menu/inline-menu/types';
|
||||
|
||||
export const useAddComment = ({
|
||||
editor,
|
||||
selectionInfo,
|
||||
setShow,
|
||||
}: WithEditorSelectionType) => {
|
||||
const { workspace_id: workspaceId, page_id: pageId } = useParams();
|
||||
const [currentComment, setCurrentComment] = useState('');
|
||||
|
||||
const createComment = useCallback(async (): Promise<{
|
||||
commentsId: string;
|
||||
}> => {
|
||||
const selectedBlockId = selectionInfo?.anchorNode?.id;
|
||||
if (!currentComment || !currentComment.trim()) {
|
||||
throw new Error(
|
||||
'Comment content must not be empty before creating in db. '
|
||||
);
|
||||
}
|
||||
if (!selectedBlockId) {
|
||||
throw new Error(
|
||||
'Commented block id must not be empty before creating in db. '
|
||||
);
|
||||
}
|
||||
|
||||
const created = await services.api.commentService.createComment({
|
||||
workspace: workspaceId,
|
||||
pageId: pageId,
|
||||
attachedToBlocksIds: [selectionInfo.anchorNode.id],
|
||||
quote: {
|
||||
value: [
|
||||
{
|
||||
text: editor.blockHelper.getBlockTextBetweenSelection(
|
||||
selectedBlockId
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
content: {
|
||||
value: [{ text: currentComment }],
|
||||
},
|
||||
});
|
||||
|
||||
return created;
|
||||
}, [
|
||||
currentComment,
|
||||
editor.blockHelper,
|
||||
pageId,
|
||||
selectionInfo?.anchorNode?.id,
|
||||
workspaceId,
|
||||
]);
|
||||
|
||||
const handleSubmitCurrentComment = useCallback(async () => {
|
||||
const textBlockId = selectionInfo.anchorNode.id;
|
||||
if (!textBlockId) return;
|
||||
const created = await createComment();
|
||||
const commentId = created?.commentsId;
|
||||
|
||||
if (commentId) {
|
||||
editor.blockHelper.addComment(textBlockId, commentId);
|
||||
setShow(false);
|
||||
}
|
||||
}, [
|
||||
createComment,
|
||||
editor.blockHelper,
|
||||
selectionInfo.anchorNode.id,
|
||||
setShow,
|
||||
]);
|
||||
return {
|
||||
currentComment,
|
||||
setCurrentComment,
|
||||
createComment,
|
||||
handleSubmitCurrentComment,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user