/** * Prompt with some text and some actions buttons. */ import * as React from 'react' import { CvState, CvProps, CvValueAdapter, CvValueListener, ColorUtil, ImageUtil, CvImagePackageUrl } from 'catreact' import { Log, Color, SignatureCapture } from 'catavolt-sdk' interface PromptBundle { title:string, message:string, buttonTexts:string[], actions:(()=>void)[] } let EMPTY_STATE = { popupActive: false, title: "", message: "", buttonTexts: [], actions: [] }; /** * Value to be assigned when CvPromptPopup is mounted. */ let openPopupPromptListener:CvValueListener; export function promptOpenUrl(url:string) { let cont = ()=>{ window.open(url, '_blank');}; let cancel = ()=>{ /* do nothing */ }; openPopupPrompt("URL", "Press continue to process this URL: " + url, ["Continue", "Cancel"], [cont, cancel]); } export function openPopupPrompt(title:string, message:string, buttonTexts:string[], actions:(()=>void)[], containerClass?:string, buttonClass?:string):void { if (openPopupPromptListener != null) { // This is the mechanism that gets us inside the component's instance openPopupPromptListener({title:title, message: message, buttonTexts: buttonTexts, actions: actions}); } } export interface CvPopupPromptState extends CvState { popupActive:boolean, title: string, message: string, buttonTexts: string[], actions: string[] } export interface CvPopupPromptProps extends CvProps { title?:string, message?:string, buttonTexts?:string[], actions?:(()=>void)[] } /** Component that overlays a signature popup. */ export const CvPopupPrompt = React.createClass({ componentWillMount: function() { let promptProvider = new CvValueAdapter(); promptProvider.subscribe(this._handleOpenPrompt); openPopupPromptListener = promptProvider.createValueListener(); }, getInitialState: function() { return EMPTY_STATE; }, render: function () { return (
{ let visible:boolean = (this.state != null) && (this.state.popupActive); if(visible) { let m:any = $(d); if(m && m.modal){ m.modal({show:true, keyboard: false, backdrop: 'static'} ) } } else { let m:any = $(d); if(m && m.modal){ m.modal('hide') } } }}>

{this.state.title}

{this.state.message}

{(()=>{ const elems = []; this.state.buttonTexts.map((text:string, index:number)=>{ elems.push(); }); return elems; })()}
); }, _handleOpenPrompt: function(promptBundle:PromptBundle) { promptBundle["popupActive"] = true; this.setState(promptBundle); }, });