catreact
Version:
Catavolt Core React Components
83 lines (82 loc) • 4.01 kB
JavaScript
/**
* Created by rburson on 3/30/16.
*/
;
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_core_1 = require('./../core/catreact-core');
exports.CvMenuBase = {};
/*
***************************************************
* Render a Menu
***************************************************
*/
exports.CvDropdownMenu = React.createClass({
mixins: [catreact_core_1.CvBaseMixin, exports.CvMenuBase],
getDefaultProps: function () {
return {
paneContext: null,
navTarget: null,
menuDef: null,
title: null,
actionListeners: [],
navigationListeners: [],
stateChangeListeners: [],
selectionProvider: null,
actionHandler: null,
initOpen: false,
launchMenuElement: null,
openLeft: false
};
},
render: function () {
var _this = this;
var itemProps = {
paneContext: this.props.paneContext,
navTarget: this.props.navTarget,
actionListeners: this.props.actionListeners,
navigationListeners: this.props.navigationListeners,
stateChangeListeners: this.props.stateChangeListeners,
selectionProvider: this.props.selectionProvider,
actionHandler: this.props.actionHandler,
catavolt: this.props.catavolt,
eventRegistry: this.props.eventRegistry
};
var menuItemClassName = 'dropdown-menu cv-dropdown-menu';
if (this.props.openLeft)
menuItemClassName += ' dropdown-menu-right';
var itemRenderer = function (cvContext, callback) {
var menuDef = cvContext.scopeCtx.scopeObj;
if (menuDef.isSeparator) {
return React.createElement("li", null, React.createElement("div", {className: "cv-menu-sep"}));
}
else if (menuDef.menuDefs && menuDef.menuDefs.length > 0) {
return React.createElement("li", {className: "cv-dropdown-submenu"}, React.createElement("a", null, menuDef.label), React.createElement(catreact_core_1.CvMenuItem, __assign({}, itemProps, {wrapperElemName: 'ul', wrapperElemProps: { className: menuItemClassName }, menuDef: menuDef, subMenuItemRenderer: function (cvContext, menuItem) {
return React.createElement(catreact_core_1.CvMenuItem, __assign({}, itemProps, {menuDef: menuItem, renderer: itemRenderer}));
}})));
}
else {
return React.createElement("li", {onClick: callback.fireAction}, React.createElement("a", {className: "cv-target"}, menuDef.label));
}
};
return (React.createElement("span", {className: "dropdown"}, React.createElement("a", {className: "cv-menu-button", "data-toggle": "dropdown", "aria-haspopup": "true", "aria-expanded": "true", ref: function (d) { if (_this.props.initOpen) {
$(d).dropdown('toggle');
} }}, (function () {
if (_this.props.launchMenuElement) {
return _this.props.launchMenuElement;
}
else {
return React.createElement("div", null, _this.props.title, React.createElement("span", {className: "glyphicon glyphicon-menu-hamburger", "aria-hidden": "true"}));
}
})()), React.createElement(catreact_core_1.CvMenuItem, __assign({}, itemProps, {wrapperElemName: 'ul', wrapperElemProps: { className: menuItemClassName }, menuDef: this.props.menuDef, subMenuItemRenderer: function (cvContext, menuItem) {
return React.createElement(catreact_core_1.CvMenuItem, __assign({}, itemProps, {menuDef: menuItem, renderer: itemRenderer}));
}}))));
}
});