catreact
Version:
Catavolt Core React Components
115 lines (114 loc) • 4.95 kB
JavaScript
/**
* 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;
}
}
});