\r\n {DynamicRender.render(renderEvent,error.sourceCode)}\r\n
\r\n /*\r\n let html = {__html:error.sourceCode};\r\n return \r\n */\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n\r\n\r\nclass ErrorDialogPresenter extends React.Component<{\r\n message:string;\r\n size:'small' | 'large';\r\n onClose?:(result:DialogResult) => void;\r\n layerZIndex?:number;\r\n}> {\r\n\r\n render() {\r\n let icon: any;\r\n \r\n let headerClass = \"Message-Box__header\";\r\n let buttonClass = \"Message-Box__buttons\";\r\n \r\n icon = this.renderErrorIcon();\r\n headerClass += \" Message-Box__header--error\";\r\n buttonClass += \" Message-Box__buttons--error\";\r\n\r\n let title = this.props.message;\r\n var header = (\r\n
\r\n
\r\n {icon}\r\n
\r\n
\r\n );\r\n var content = this.props.children;\r\n var body = (\r\n
\r\n
{title}
\r\n {content}\r\n
\r\n );\r\n\r\n let buttons;\r\n buttons = (
)\r\n\r\n \r\n var footer = (\r\n
\r\n {buttons}\r\n
\r\n );\r\n\r\n return (\r\n
\r\n {header}\r\n {body}\r\n {footer}\r\n \r\n )\r\n \r\n }\r\n\r\n handleClose = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onClose({continue:false});\r\n };\r\n\r\n \r\n\r\n \r\n renderErrorIcon() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n \r\n}\r\n\r\n\r\nclass ServerRenderedErrorPresenter extends React.Component<{\r\n error:ICanvasError,\r\n message:string;\r\n size:'small' | 'large';\r\n onClose?:(result:DialogResult) => void;\r\n layerZIndex?:number;\r\n}> {\r\n\r\n render() {\r\n\r\n let error = this.props.error;\r\n\r\n let buttonClass = \"Message-Box__buttons\";\r\n \r\n let buttons;\r\n buttons = (
);\r\n\r\n let canvas = new Canvas(null);\r\n let event = new RenderEvent(canvas);\r\n let content;\r\n if (error.render.$tag){\r\n content = HtmlRender.renderTag(event,error.render,0,null);\r\n }\r\n else {\r\n content = DynamicRender.render(event,error.render);\r\n }\r\n return (\r\n
\r\n {content}\r\n \r\n {buttons}\r\n
\r\n \r\n )\r\n }\r\n\r\n handleClose = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onClose({continue:false});\r\n };\r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n}\r\n\r\n\r\n\r\nclass ValidationErrorPresenter extends React.Component<{ errors: IValidationError[], title?: string }, any> {\r\n\r\n render() {\r\n var errors = this.props.errors;\r\n if (!errors) return null;\r\n\r\n return (\r\n
\r\n {ValidationErrorPresenter.renderValidationErrors(errors)}\r\n
\r\n );\r\n }\r\n \r\n static renderValidationErrors(errors: IValidationError[]) {\r\n let required: string[] = [];\r\n let generalMessages:string[] = [];\r\n let fieldMessages:string[] = [];\r\n \r\n\r\n\r\n for (let i = 0; i < errors.length; i++) {\r\n let e = errors[i];\r\n if (e.field) {\r\n let label = e.label || e.field;\r\n if (e.message == \"required\") {\r\n required.push(label);\r\n } else {\r\n fieldMessages.push(label + \" \" + e.message);\r\n }\r\n }\r\n else {\r\n generalMessages.push(e.message);\r\n }\r\n }\r\n\r\n if (!generalMessages.length && !fieldMessages.length && !required.length) return;\r\n let requiredFields = required.length ? required.join(\", \") : null;\r\n\r\n let genMessageElems;\r\n if (generalMessages.length){\r\n genMessageElems = generalMessages.map((message, index) =>
{message})\r\n }\r\n\r\n let fieldMessageElems;\r\n if (fieldMessages.length){\r\n fieldMessageElems = fieldMessages.map((message, index) =>
{message})\r\n }\r\n let requiredContent;\r\n if (requiredFields){\r\n let labelColor = \"#707784\";\r\n if (required.length > 1){\r\n requiredContent = <>
These fields must be completed: {requiredFields}>;\r\n }\r\n else {\r\n requiredContent = <>
This field must be completed: {requiredFields}>;\r\n }\r\n }\r\n return (\r\n
\r\n {genMessageElems}\r\n {requiredFields && (\r\n - {requiredContent}
\r\n )}\r\n {fieldMessageElems}\r\n
\r\n );\r\n }\r\n \r\n}","import React from 'react';\r\nimport { DialogResult } from '../../core';\r\nimport { DialogContainer } from './DialogContainer';\r\n\r\nexport type MessageStyle = 'danger' | 'warning' | 'info' | 'success';\r\nexport class MessageBox extends React.Component<{\r\n onClose?:(result:DialogResult)=> void;\r\n message: string;\r\n style?: MessageStyle;\r\n layerZIndex?:number;\r\n}> {\r\n\r\n render() {\r\n let icon: any;\r\n let style = this.props.style;\r\n let title = this.props.message;\r\n \r\n let headerClass = \"Message-Box__header\";\r\n let buttonClass = \"Message-Box__buttons\";\r\n if (style == \"success\") {\r\n icon = this.renderSuccessIcon();\r\n headerClass += \" Message-Box__header--success\";\r\n buttonClass += \" Message-Box__buttons--success\";\r\n } else if (style == \"danger\") {\r\n icon = this.renderErrorIcon();\r\n headerClass += \" Message-Box__header--error\";\r\n buttonClass += \" Message-Box__buttons--error\";\r\n } else {\r\n icon = this.renderInfoIcon();\r\n headerClass += \" Message-Box__header--info\";\r\n buttonClass += \" Message-Box__buttons--info\";\r\n }\r\n\r\n var header = (\r\n
\r\n
\r\n {icon}\r\n
\r\n
\r\n );\r\n let content;\r\n if (this.props.children){\r\n content =
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n }\r\n\r\n \r\n var body = (\r\n
\r\n
{title}
\r\n {content}\r\n
\r\n );\r\n\r\n\r\n let buttons = (
)\r\n\r\n \r\n let helpButton;\r\n /*\r\n let helpTopic = this.props.frame.helpTopic;\r\n if (helpTopic){\r\n helpButton =
\r\n \r\n
\r\n }\r\n */\r\n var footer = (\r\n
\r\n {buttons}\r\n {helpButton}\r\n
\r\n );\r\n\r\n return (\r\n
\r\n {header}\r\n {body}\r\n {footer}\r\n \r\n )\r\n \r\n }\r\n renderCloseButton() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n \r\n\r\n handleClose = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onClose({continue:true});\r\n };\r\n\r\n renderSuccessIcon() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n renderErrorIcon() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n renderInfoIcon() {\r\n return (\r\n
\r\n );\r\n }\r\n\r\n renderConfirmIcon() {\r\n return (\r\n
\r\n );\r\n }\r\n}","import React from 'react';\r\nimport { DialogResult } from '../../core';\r\nimport { DialogContainer } from './DialogContainer';\r\n\r\ntype DialogStyle = null | 'danger';\r\nexport class Confirm extends React.Component<{\r\n onClose?:(result:DialogResult) => any;\r\n layerZIndex?:number;\r\n message:string;\r\n style?:DialogStyle;\r\n continueLabel?:string;\r\n cancelLabel?:string;\r\n}> {\r\n\r\n render() {\r\n let icon: any;\r\n let style = this.props.style;\r\n let headerClass = \"Message-Box__header\";\r\n let buttonContainerClass = \"Message-Box__buttons Message-Box__buttons--right\";\r\n\r\n icon = this.renderConfirmIcon(style);\r\n \r\n let confirmButtonClass:string;\r\n if (style == \"danger\"){\r\n headerClass += \" Message-Box__header--danger\";\r\n buttonContainerClass += \" Message-Box__buttons--danger\";\r\n confirmButtonClass = \"RT-Button--destructive\";\r\n }\r\n else {\r\n headerClass += \" Message-Box__header--warning\";\r\n buttonContainerClass += \" Message-Box__buttons--warning\";\r\n confirmButtonClass = \"RT-Button--warning\";\r\n }\r\n\r\n var header = (\r\n
\r\n
\r\n {icon}\r\n
\r\n
\r\n );\r\n let content;\r\n if (this.props.children){\r\n content =
\r\n
\r\n {this.props.children}\r\n
\r\n
\r\n }\r\n let message = this.props.message;\r\n \r\n var body = (\r\n
\r\n
{message}
\r\n {content}\r\n
\r\n );\r\n\r\n let buttons = (<>\r\n \r\n
\r\n
\r\n >)\r\n \r\n let helpButton;\r\n \r\n var footer = (\r\n
\r\n {buttons}\r\n {helpButton}\r\n
\r\n );\r\n\r\n return (\r\n
\r\n {header}\r\n {body}\r\n {footer}\r\n \r\n )\r\n \r\n }\r\n\r\n\r\n handleContinue = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onClose({continue:true}); \r\n };\r\n\r\n \r\n handleCancel = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.props.onClose({continue:false});\r\n };\r\n\r\n\r\n renderConfirmIcon(style:DialogStyle) {\r\n let styleClass = (style == \"danger\") ? \"Message-Box__icon--danger\" : \"Message-Box__icon--warning\";\r\n return (\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Broadcast } from './Broadcast';\r\nimport { IVisibilityContainer } from './types';\r\n\r\nexport interface ITab extends IVisibilityContainer {\r\n name:string;\r\n hidden:boolean;\r\n contentKey:any;\r\n}\r\n\r\nexport interface IMenuState {\r\n open:boolean\r\n}\r\n\r\nexport class TabSetState {\r\n activeTab:string;\r\n tabs:{[name:string]:ITab};\r\n tabList:ITab[];\r\n stackContent:any;\r\n broadcast:Broadcast;\r\n menuState:IMenuState;\r\n\r\n constructor(){\r\n this.tabs = {}\r\n this.broadcast = new Broadcast();\r\n this.menuState = {open:false}; \r\n }\r\n\r\n \r\n\r\n createTabs(children:any){\r\n this.tabs = {};\r\n this.tabList = [];\r\n let firstTabName:string;\r\n React.Children.forEach(children,(child:any,index:number) => {\r\n let tabName = child.props.$id;\r\n if (tabName){\r\n if (!firstTabName) firstTabName = tabName;\r\n let tab:ITab = {name:tabName,hidden:true,contentKey:0};\r\n this.tabs[tabName] = tab;\r\n this.tabList.push(tab);\r\n }\r\n });\r\n let activeTab = this.activeTab;\r\n if (activeTab && this.tabs[activeTab]){\r\n this.tabs[activeTab].hidden = false;\r\n }\r\n else if (firstTabName){\r\n this.tabs[firstTabName].hidden = false;\r\n }\r\n }\r\n\r\n activateTab(tabName:string, refreshContent?:boolean){\r\n this.activeTab = tabName;\r\n let found = false;\r\n \r\n\r\n for(let key in this.tabs){\r\n let v = this.tabs[key];\r\n if (key == tabName){\r\n v.hidden = false;\r\n if (refreshContent){\r\n v.contentKey++;\r\n }\r\n found = true;\r\n }\r\n else {\r\n v.hidden = true;\r\n }\r\n }\r\n this.broadcast.refresh();\r\n }\r\n\r\n refresh(){\r\n this.broadcast.refresh();\r\n }\r\n\r\n}","import { IMenuState, ITab, TabSetState } from 'core/TabState';\r\nimport { IVisibilityContainer } from 'core/types';\r\nimport React from 'react';\r\nimport { makeComponent, RenderEvent,RecordMeta, ActionRef, Broadcast} from '../core';\r\nimport { AnchorPoint } from './helpers/AnchorPoint';\r\nimport { Icon } from './Icon';\r\nimport { Popup } from './popups/Popup';\r\n\r\n\r\nexport const TabSet = makeComponent(class extends React.Component<{event?:RenderEvent, variant?:string,$id?:string,title?:any,\r\n className?:string,noPullPadding?:boolean},{activeTab:string,stackContent:any}>{\r\n\r\n tabState:TabSetState;\r\n constructor(props){\r\n super(props);\r\n let canvas = this.props.event.canvas;\r\n let stateKey = \"tab:\" + this.props.$id;\r\n let tabState = canvas.blockState[stateKey];\r\n if (!tabState){\r\n this.tabState = new TabSetState();\r\n canvas.blockState[stateKey] = this.tabState;\r\n }\r\n else {\r\n this.tabState = tabState;\r\n }\r\n this.tabState.createTabs(props.children);\r\n \r\n \r\n\r\n }\r\n\r\n render(): React.ReactNode {\r\n let props = this.props;\r\n return
\r\n {props.children}\r\n \r\n }\r\n});\r\n\r\n\r\n\r\nexport class TabSetPresenter extends React.Component<{event?:RenderEvent, variant?:string,$id?:string,title?:any,\r\n className?:string,noPullPadding?:boolean,tabState:TabSetState,hideLabels?:boolean}>{ \r\n \r\n componentDidMount(): void {\r\n this.props.tabState.broadcast.connect(this);\r\n }\r\n\r\n componentWillUnmount(): void {\r\n this.props.tabState.broadcast.disconnect(this);\r\n }\r\n\r\n \r\n render(){\r\n let panels = [];\r\n let tabs = [];\r\n let children = this.props.children;\r\n\r\n let event = this.props.event;\r\n if (!event) return null;\r\n\r\n \r\n let variant = this.props.variant;\r\n let isMenu = variant == \"menu\";\r\n let activeLabel:string;\r\n let pullPadding = true;\r\n if (this.props.noPullPadding || variant == \"vertical\" || variant == \"menu\"){\r\n pullPadding = false;\r\n }\r\n\r\n let tabState = this.props.tabState;\r\n if (children) {\r\n React.Children.forEach(children,(child:any,index:number) => {\r\n let isActive:boolean;\r\n \r\n let tabName = child.props.$id;\r\n\r\n let renderContent = child.props.render_children;\r\n\r\n let tab = tabState.tabs[tabName];\r\n if (tab){\r\n isActive = !tab.hidden;\r\n if (isActive){\r\n activeLabel = child.props.label;\r\n }\r\n }\r\n else {\r\n isActive = false;\r\n }\r\n \r\n if (isMenu){\r\n tabs.push(