UNPKG

catreact

Version:

Catavolt Core React Components

115 lines (114 loc) 4.95 kB
/** * Created by rburson on 3/18/16. */ "use strict"; var __assign = (this && this.__assign) || Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; var React = require('react'); var catreact_1 = require('./../catreact'); var catavolt_sdk_1 = require('catavolt-sdk'); /** * Render a NavRequest */ exports.CvNavigator = React.createClass({ propTypes: { /** * navigationResult?:CvNavigationResult; */ navigationResult: React.PropTypes.object, /** * alternative to navigationResult - the id will be used to find the navigationResult in the cache */ navigationId: React.PropTypes.string, /** * navigationListeners?:Array<(event:CvEvent<CvNavigationResult>)=>void>; */ navigationListeners: React.PropTypes.arrayOf(React.PropTypes.func), /** * actionListeners?:Array<(event:CvEvent<CvActionFiredResult>)=>void>; */ actionListeners: React.PropTypes.arrayOf(React.PropTypes.func), /** * stateChangeListeners?:Array<(event:CvEvent<CvStateChangeResult>)=>void>; */ stateChangeListeners: React.PropTypes.arrayOf(React.PropTypes.func), layoutOverrideElement: React.PropTypes.element, /** * formComponentProvider?:CvFormComponentProvider; */ formComponentProvider: React.PropTypes.object, targetId: React.PropTypes.string, catavolt: React.PropTypes.instanceOf(catavolt_sdk_1.AppContext), eventRegistry: React.PropTypes.instanceOf(catreact_1.CvEventRegistry), /** * renderer signature: (cvContext:CvContext, callbackObj?:any)=>{} * ctx.cvContext.scopeCtx.scopeObj will be of type NavRequest */ renderer: React.PropTypes.func }, mixins: [catreact_1.CvBaseMixin], shouldComponentUpdate: function (nextProps, nextState) { return ((nextProps.navigationId && nextProps.navigationId !== this.props.navigationId) || (nextProps.navigationResult && nextProps.navigationResult !== this.props.navigationResult)); }, getChildContext: function () { var ctx = this.getDefaultChildContext(); ctx.cvContext.scopeCtx.scopeObj = this.navRequest(); return ctx; }, getDefaultProps: function () { return { navigationResult: null, navigationId: null, navigationListeners: [], actionListeners: [], stateChangeListeners: [], layoutOverrideElem: null, formComponentProvider: null, persistent: false, targetId: null }; }, navRequest: function () { if (this.props.navigationResult && this.props.navigationResult.navRequest) { return this.props.navigationResult.navRequest; } else if (this.props.navigationId) { return this.eventRegistry().getEventByKey(this.props.navigationId).eventObj.navRequest; } else { return null; } }, render: function () { var navRequest = this.navRequest(); if (navRequest) { if (this.props.renderer) { return this.props.renderer(this.getChildContext().cvContext); } else { if (navRequest instanceof catavolt_sdk_1.FormContext) { return React.createElement(catreact_1.CvNavigation, {navigationResult: this.props.navigationResult, navigationId: this.props.navigationId, persistent: this.props.persistent, targetId: this.props.targetId}, React.createElement(catreact_1.CvFormPanel, {formContext: navRequest, navigationListeners: this.props.navigationListeners, stateChangeListeners: this.props.stateChangeListeners, actionListeners: this.props.actionListeners, layoutOverrideElem: this.props.layoutOverrideElem, formComponentProvider: this.props.formComponentProvider})); } else if (navRequest instanceof catavolt_sdk_1.WebRedirection) { return React.createElement(catreact_1.CvNavigation, __assign({}, this.props), React.createElement(catreact_1.CvWebNavigator, {url: navRequest.webURL})); } else { var event_1 = { type: catreact_1.CvEventType.MESSAGE, eventObj: { message: 'Unsupported type of NavRequest: ' + navRequest.constructor['name'], messageObj: 'Unsupported type of NavRequest: ' + navRequest.constructor['name'], type: catreact_1.CvMessageType.ERROR } }; this.eventRegistry().publish(event_1, false); } } } else { return null; } } });