import { computed, handler, NAME, pattern, Stream, type TrustedActionWriteWithIntegrity, UI, type VNode, Writable, } from "commonfabric"; export const TRUSTED_DISCLAIMER_ACK_SURFACE = "TrustedDisclaimerAckSurface"; export const TRUSTED_DISCLAIMER_RENDERED_EVIDENCE = "TrustedDisclaimerRenderedEvidence"; const ACKNOWLEDGE_DISCLAIMER_ACTION = "TrustedAcknowledgeDisclaimer"; export const acknowledgeTrustedDisclaimer = handler< void, { disclaimerText: Writable; acknowledgedDisclaimer: Writable; } >((_, { disclaimerText, acknowledgedDisclaimer }) => { const disclaimer = disclaimerText.get().trim(); acknowledgedDisclaimer.set( disclaimer ? `Acknowledged trusted disclaimer: ${disclaimer}` : "", ); }); export interface TrustedDisclaimerAckSurfaceInput { disclaimerText: Writable; acknowledgedDisclaimer: Writable; } export interface TrustedDisclaimerAckSurfaceOutput { [NAME]: string; [UI]: VNode; acknowledgedDisclaimer: TrustedActionWriteWithIntegrity< string, typeof acknowledgeTrustedDisclaimer, typeof ACKNOWLEDGE_DISCLAIMER_ACTION, typeof TRUSTED_DISCLAIMER_ACK_SURFACE, [ typeof TRUSTED_DISCLAIMER_ACK_SURFACE, typeof TRUSTED_DISCLAIMER_RENDERED_EVIDENCE, ] >; acknowledgeDisclaimer: Stream; } export const TrustedDisclaimerAckSurface = pattern< TrustedDisclaimerAckSurfaceInput, TrustedDisclaimerAckSurfaceOutput >(({ disclaimerText, acknowledgedDisclaimer }) => { const acknowledgeDisclaimer = acknowledgeTrustedDisclaimer({ disclaimerText, acknowledgedDisclaimer, }); return { [NAME]: computed(() => "Trusted Disclaimer Ack Surface"), [UI]: ( Trusted disclaimer acknowledgment The trusted disclaimer must be rendered before acknowledgement. {TRUSTED_DISCLAIMER_RENDERED_EVIDENCE} {disclaimerText} Acknowledge disclaimer Acknowledgement result
{acknowledgedDisclaimer}
), acknowledgedDisclaimer, acknowledgeDisclaimer, }; });