Skip to main content

Function: useCreateReview()

useCreateReview(): UseMutationResult<{ author: { avatar: string; did: string; displayName: string; handle: string; }; body: { facets: object[]; text: string; }; cid: string; content: string; createdAt: string; indexedAt: string; motivation: "commenting" | "highlighting" | "questioning" | "replying" | "assessing" | "bookmarking" | "classifying" | "describing" | "editing" | "linking" | "moderating" | "tagging"; parentReviewUri: string; preprintUri: string; replyCount: number; target: { page: number; refinedBy: { boundingRect: { height: number; width: number; x1: number; x2: number; y1: number; y2: number; }; end: number; pageNumber: number; start: number; type: "TextPositionSelector"; }; selector: { exact: string; prefix: string; suffix: string; type: "TextQuoteSelector"; }; source: string; }; uri: string; }, Error, CreateReviewInput, unknown>

Defined in: web/lib/hooks/use-review.ts:327

Mutation hook for creating a new review.

Returns

UseMutationResult<{ author: { avatar: string; did: string; displayName: string; handle: string; }; body: { facets: object[]; text: string; }; cid: string; content: string; createdAt: string; indexedAt: string; motivation: "commenting" | "highlighting" | "questioning" | "replying" | "assessing" | "bookmarking" | "classifying" | "describing" | "editing" | "linking" | "moderating" | "tagging"; parentReviewUri: string; preprintUri: string; replyCount: number; target: { page: number; refinedBy: { boundingRect: { height: number; width: number; x1: number; x2: number; y1: number; y2: number; }; end: number; pageNumber: number; start: number; type: "TextPositionSelector"; }; selector: { exact: string; prefix: string; suffix: string; type: "TextQuoteSelector"; }; source: string; }; uri: string; }, Error, CreateReviewInput, unknown>

Mutation object for creating reviews

Remarks

Creates a review in the user's PDS. Supports:

  • General reviews (no target)
  • Inline annotations (with target span)
  • Threaded replies (with parentReviewUri)
  • Rich text bodies with embedded references

Automatically invalidates relevant queries on success.

Example

const createReview = useCreateReview();

const handleSubmit = async (content: string) => {
await createReview.mutateAsync({
preprintUri,
content,
motivation: 'commenting',
});
};

return (
<ReviewForm
onSubmit={handleSubmit}
isSubmitting={createReview.isPending}
/>
);