import { computed, handler, NAME, pattern, Stream, type TrustedActionUiContract, type TrustedActionWrite, UI, type VNode, Writable, } from "commonfabric"; export const TRUSTED_REVIEW_SURFACE = "TrustedReviewSurface"; export const REVIEW_SNAPSHOT_ACTION = "TrustedReviewSnapshot"; export type TrustedReviewedTitleUiContract = TrustedActionUiContract< string, typeof REVIEW_SNAPSHOT_ACTION, typeof TRUSTED_REVIEW_SURFACE >; export type TrustedReviewedBodyUiContract = TrustedActionUiContract< string, typeof REVIEW_SNAPSHOT_ACTION, typeof TRUSTED_REVIEW_SURFACE >; export const reviewTrustedSnapshot = handler< void, { savedTitle: Writable; savedBody: Writable; reviewedTitle: Writable; reviewedBody: Writable; } >((_, { savedTitle, savedBody, reviewedTitle, reviewedBody }) => { reviewedTitle.set(savedTitle.get()); reviewedBody.set(savedBody.get()); }); export type TrustedReviewedTitleWrite = TrustedActionWrite< string, typeof reviewTrustedSnapshot, typeof REVIEW_SNAPSHOT_ACTION, typeof TRUSTED_REVIEW_SURFACE >; export type TrustedReviewedBodyWrite = TrustedActionWrite< string, typeof reviewTrustedSnapshot, typeof REVIEW_SNAPSHOT_ACTION, typeof TRUSTED_REVIEW_SURFACE >; export interface TrustedReviewSurfaceInput { savedTitle: Writable; savedBody: Writable; reviewedTitle: Writable; reviewedBody: Writable; } export interface TrustedReviewSurfaceOutput { [NAME]: string; [UI]: VNode; reviewedTitle: TrustedReviewedTitleUiContract; reviewedBody: TrustedReviewedBodyUiContract; reviewSaved: Stream; } export const TrustedReviewSurface = pattern< TrustedReviewSurfaceInput, TrustedReviewSurfaceOutput >(({ savedTitle, savedBody, reviewedTitle, reviewedBody }) => { const reviewSaved = reviewTrustedSnapshot({ savedTitle, savedBody, reviewedTitle, reviewedBody, }); return { [NAME]: computed(() => "Trusted Review Surface"), [UI]: ( Trusted review This reviewed button means “promote the current saved snapshot into the protected reviewed copy.”
{savedTitle}
{savedBody}
Mark reviewed
), reviewedTitle, reviewedBody, reviewSaved, }; });