import { computed, handler, NAME, pattern, Stream, type TrustedActionUiContract, type TrustedActionWrite, UI, type VNode, Writable, } from "commonfabric"; export const TRUSTED_SAVE_DRAFT_SURFACE = "TrustedSaveDraftSurface"; export const SAVE_DRAFT_ACTION = "TrustedSaveDraft"; export type TrustedSavedDraftTitleUiContract = TrustedActionUiContract< string, typeof SAVE_DRAFT_ACTION, typeof TRUSTED_SAVE_DRAFT_SURFACE >; export type TrustedSavedDraftBodyUiContract = TrustedActionUiContract< string, typeof SAVE_DRAFT_ACTION, typeof TRUSTED_SAVE_DRAFT_SURFACE >; export const saveTrustedDraftSnapshot = handler< void, { draftTitle: Writable; draftBody: Writable; savedTitle: Writable; savedBody: Writable; } >((_, { draftTitle, draftBody, savedTitle, savedBody }) => { savedTitle.set(draftTitle.get().trim()); savedBody.set(draftBody.get().trim()); }); export type TrustedSavedDraftTitleWrite = TrustedActionWrite< string, typeof saveTrustedDraftSnapshot, typeof SAVE_DRAFT_ACTION, typeof TRUSTED_SAVE_DRAFT_SURFACE >; export type TrustedSavedDraftBodyWrite = TrustedActionWrite< string, typeof saveTrustedDraftSnapshot, typeof SAVE_DRAFT_ACTION, typeof TRUSTED_SAVE_DRAFT_SURFACE >; export interface TrustedSaveDraftSurfaceInput { draftTitle: Writable; draftBody: Writable; savedTitle: Writable; savedBody: Writable; } export interface TrustedSaveDraftSurfaceOutput { [NAME]: string; [UI]: VNode; savedTitle: TrustedSavedDraftTitleUiContract; savedBody: TrustedSavedDraftBodyUiContract; saveDraft: Stream; } export const TrustedSaveDraftSurface = pattern< TrustedSaveDraftSurfaceInput, TrustedSaveDraftSurfaceOutput >(({ draftTitle, draftBody, savedTitle, savedBody }) => { const saveDraft = saveTrustedDraftSnapshot({ draftTitle, draftBody, savedTitle, savedBody, }); return { [NAME]: computed(() => "Trusted Save Draft Surface"), [UI]: ( Trusted save draft This reviewed surface snapshots the current draft title and body into the protected saved copy. Draft title Draft body Save draft ), savedTitle, savedBody, saveDraft, }; });