semantic-ui-react
Version:
The official Semantic-UI-React integration.
254 lines (180 loc) • 9.12 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _map2 = require('lodash/map');
var _map3 = _interopRequireDefault(_map2);
var _invoke2 = require('lodash/invoke');
var _invoke3 = _interopRequireDefault(_invoke2);
var _without2 = require('lodash/without');
var _without3 = _interopRequireDefault(_without2);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _lib = require('../../lib');
var _MenuHeader = require('./MenuHeader');
var _MenuHeader2 = _interopRequireDefault(_MenuHeader);
var _MenuItem = require('./MenuItem');
var _MenuItem2 = _interopRequireDefault(_MenuItem);
var _MenuMenu = require('./MenuMenu');
var _MenuMenu2 = _interopRequireDefault(_MenuMenu);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* A menu displays grouped navigation actions.
* @see Dropdown
*/
var Menu = function (_Component) {
(0, _inherits3.default)(Menu, _Component);
function Menu() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3.default)(this, Menu);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Menu.__proto__ || Object.getPrototypeOf(Menu)).call.apply(_ref, [this].concat(args))), _this), _this.handleItemOverrides = function (predefinedProps) {
return {
onClick: function onClick(e, itemProps) {
var index = itemProps.index;
_this.trySetState({ activeIndex: index });
(0, _invoke3.default)(predefinedProps, 'onClick', e, itemProps);
(0, _invoke3.default)(_this.props, 'onItemClick', e, itemProps);
}
};
}, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret);
}
(0, _createClass3.default)(Menu, [{
key: 'renderItems',
value: function renderItems() {
var _this2 = this;
var items = this.props.items;
var activeIndex = this.state.activeIndex;
return (0, _map3.default)(items, function (item, index) {
return _MenuItem2.default.create(item, {
defaultProps: {
active: parseInt(activeIndex, 10) === index,
index: index
},
overrideProps: _this2.handleItemOverrides
});
});
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
attached = _props.attached,
borderless = _props.borderless,
children = _props.children,
className = _props.className,
color = _props.color,
compact = _props.compact,
fixed = _props.fixed,
floated = _props.floated,
fluid = _props.fluid,
icon = _props.icon,
inverted = _props.inverted,
pagination = _props.pagination,
pointing = _props.pointing,
secondary = _props.secondary,
size = _props.size,
stackable = _props.stackable,
tabular = _props.tabular,
text = _props.text,
vertical = _props.vertical,
widths = _props.widths;
var classes = (0, _classnames2.default)('ui', color, size, (0, _lib.useKeyOnly)(borderless, 'borderless'), (0, _lib.useKeyOnly)(compact, 'compact'), (0, _lib.useKeyOnly)(fluid, 'fluid'), (0, _lib.useKeyOnly)(inverted, 'inverted'), (0, _lib.useKeyOnly)(pagination, 'pagination'), (0, _lib.useKeyOnly)(pointing, 'pointing'), (0, _lib.useKeyOnly)(secondary, 'secondary'), (0, _lib.useKeyOnly)(stackable, 'stackable'), (0, _lib.useKeyOnly)(text, 'text'), (0, _lib.useKeyOnly)(vertical, 'vertical'), (0, _lib.useKeyOrValueAndKey)(attached, 'attached'), (0, _lib.useKeyOrValueAndKey)(floated, 'floated'), (0, _lib.useKeyOrValueAndKey)(icon, 'icon'), (0, _lib.useKeyOrValueAndKey)(tabular, 'tabular'), (0, _lib.useValueAndKey)(fixed, 'fixed'), (0, _lib.useWidthProp)(widths, 'item'), className, 'menu');
var rest = (0, _lib.getUnhandledProps)(Menu, this.props);
var ElementType = (0, _lib.getElementType)(Menu, this.props);
return _react2.default.createElement(
ElementType,
(0, _extends3.default)({}, rest, { className: classes }),
_lib.childrenUtils.isNil(children) ? this.renderItems() : children
);
}
}]);
return Menu;
}(_lib.AutoControlledComponent);
Menu._meta = {
name: 'Menu',
type: _lib.META.TYPES.COLLECTION
};
Menu.autoControlledProps = ['activeIndex'];
Menu.Header = _MenuHeader2.default;
Menu.Item = _MenuItem2.default;
Menu.Menu = _MenuMenu2.default;
Menu.handledProps = ['activeIndex', 'as', 'attached', 'borderless', 'children', 'className', 'color', 'compact', 'defaultActiveIndex', 'fixed', 'floated', 'fluid', 'icon', 'inverted', 'items', 'onItemClick', 'pagination', 'pointing', 'secondary', 'size', 'stackable', 'tabular', 'text', 'vertical', 'widths'];
process.env.NODE_ENV !== "production" ? Menu.propTypes = {
/** An element type to render as (string or function). */
as: _lib.customPropTypes.as,
/** Index of the currently active item. */
activeIndex: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),
/** A menu may be attached to other content segments. */
attached: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['top', 'bottom'])]),
/** A menu item or menu can have no borders. */
borderless: _propTypes2.default.bool,
/** Primary content. */
children: _propTypes2.default.node,
/** Additional classes. */
className: _propTypes2.default.string,
/** Additional colors can be specified. */
color: _propTypes2.default.oneOf(_lib.SUI.COLORS),
/** A menu can take up only the space necessary to fit its content. */
compact: _propTypes2.default.bool,
/** Initial activeIndex value. */
defaultActiveIndex: _propTypes2.default.oneOfType([_propTypes2.default.number, _propTypes2.default.string]),
/** A menu can be fixed to a side of its context. */
fixed: _propTypes2.default.oneOf(['left', 'right', 'bottom', 'top']),
/** A menu can be floated. */
floated: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['right'])]),
/** A vertical menu may take the size of its container. */
fluid: _propTypes2.default.bool,
/** A menu may have just icons (bool) or labeled icons. */
icon: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['labeled'])]),
/** A menu may have its colors inverted to show greater contrast. */
inverted: _propTypes2.default.bool,
/** Shorthand array of props for Menu. */
items: _lib.customPropTypes.collectionShorthand,
/**
* onClick handler for MenuItem. Mutually exclusive with children.
*
* @param {SyntheticEvent} event - React's original SyntheticEvent.
* @param {object} data - All item props.
*/
onItemClick: _lib.customPropTypes.every([_lib.customPropTypes.disallow(['children']), _propTypes2.default.func]),
/** A pagination menu is specially formatted to present links to pages of content. */
pagination: _propTypes2.default.bool,
/** A menu can point to show its relationship to nearby content. */
pointing: _propTypes2.default.bool,
/** A menu can adjust its appearance to de-emphasize its contents. */
secondary: _propTypes2.default.bool,
/** A menu can vary in size. */
size: _propTypes2.default.oneOf((0, _without3.default)(_lib.SUI.SIZES, 'medium', 'big')),
/** A menu can stack at mobile resolutions. */
stackable: _propTypes2.default.bool,
/** A menu can be formatted to show tabs of information. */
tabular: _propTypes2.default.oneOfType([_propTypes2.default.bool, _propTypes2.default.oneOf(['right'])]),
/** A menu can be formatted for text content. */
text: _propTypes2.default.bool,
/** A vertical menu displays elements vertically. */
vertical: _propTypes2.default.bool,
/** A menu can have its items divided evenly. */
widths: _propTypes2.default.oneOf(_lib.SUI.WIDTHS)
} : void 0;
Menu.create = (0, _lib.createShorthandFactory)(Menu, function (items) {
return { items: items };
});
exports.default = Menu;