UNPKG

9.01 kBJavaScriptView Raw
1/*(c) Copyright 2015 Pivotal Software, Inc. All Rights Reserved.*/
2'use strict';
3
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports.DropdownItem = exports.Dropdown = undefined;
8
9var _extends2 = require('babel-runtime/helpers/extends');
10
11var _extends3 = _interopRequireDefault(_extends2);
12
13var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
14
15var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
16
17var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
18
19var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
20
21var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
22
23var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
24
25var _createClass2 = require('babel-runtime/helpers/createClass');
26
27var _createClass3 = _interopRequireDefault(_createClass2);
28
29var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
30
31var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
32
33var _inherits2 = require('babel-runtime/helpers/inherits');
34
35var _inherits3 = _interopRequireDefault(_inherits2);
36
37var _react = require('react');
38
39var _react2 = _interopRequireDefault(_react);
40
41var _classnames = require('classnames');
42
43var _classnames2 = _interopRequireDefault(_classnames);
44
45var _puiReactMixins = require('pui-react-mixins');
46
47var _puiReactMixins2 = _interopRequireDefault(_puiReactMixins);
48
49var _scrim_mixin = require('pui-react-mixins/mixins/scrim_mixin');
50
51var _scrim_mixin2 = _interopRequireDefault(_scrim_mixin);
52
53var _transition_mixin = require('pui-react-mixins/mixins/transition_mixin');
54
55var _transition_mixin2 = _interopRequireDefault(_transition_mixin);
56
57var _puiReactIconography = require('pui-react-iconography');
58
59require('pui-css-dropdowns');
60
61function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
62
63var types = _react2.default.PropTypes;
64
65var defaultToggleNode = function defaultToggleNode(dropCaret) {
66 if (dropCaret) return _react2.default.createElement(_puiReactIconography.Icon, { src: 'chevron_down' });
67};
68
69var Dropdown = exports.Dropdown = function (_mixin$with) {
70 (0, _inherits3.default)(Dropdown, _mixin$with);
71
72 function Dropdown(props, context) {
73 (0, _classCallCheck3.default)(this, Dropdown);
74
75 var _this = (0, _possibleConstructorReturn3.default)(this, (Dropdown.__proto__ || (0, _getPrototypeOf2.default)(Dropdown)).call(this, props, context));
76
77 _this.click = function (event) {
78 _this.setState({ open: !_this.state.open });
79 _this.props.onClick && _this.props.onClick(event);
80 };
81
82 _this.scrimClick = function () {
83 return _this.setState({ open: false });
84 };
85
86 _this.menuClick = function () {
87 if (!_this.props.closeOnMenuClick) return;
88 _this.setState({ open: false });
89 };
90
91 _this.state = {
92 open: false
93 };
94 return _this;
95 }
96
97 (0, _createClass3.default)(Dropdown, [{
98 key: 'render',
99 value: function render() {
100 var _props = this.props,
101 border = _props.border,
102 buttonClassName = _props.buttonClassName,
103 children = _props.children,
104 className = _props.className,
105 closeOnMenuClick = _props.closeOnMenuClick,
106 disableScrim = _props.disableScrim,
107 dropCaret = _props.dropCaret,
108 flat = _props.flat,
109 link = _props.link,
110 pullRight = _props.pullRight,
111 onClick = _props.onClick,
112 onEntered = _props.onEntered,
113 onExited = _props.onExited,
114 split = _props.split,
115 title = _props.title,
116 toggle = _props.toggle,
117 menuCaret = _props.menuCaret,
118 props = (0, _objectWithoutProperties3.default)(_props, ['border', 'buttonClassName', 'children', 'className', 'closeOnMenuClick', 'disableScrim', 'dropCaret', 'flat', 'link', 'pullRight', 'onClick', 'onEntered', 'onExited', 'split', 'title', 'toggle', 'menuCaret']);
119 var open = this.state.open;
120
121 var toggleNode = toggle ? toggle : defaultToggleNode(dropCaret);
122 var buttonStyleClasses = (0, _classnames2.default)('btn-default', buttonClassName);
123 var dropdownLabel = split ? _react2.default.createElement(
124 'div',
125 { className: (0, _classnames2.default)('dropdown-label', buttonStyleClasses) },
126 title
127 ) : null;
128 var dropdownToggle = _react2.default.createElement(
129 'button',
130 { type: 'button', onClick: this.click, className: (0, _classnames2.default)('dropdown-toggle', buttonStyleClasses) },
131 !split ? title : null,
132 toggleNode
133 );
134
135 var dropdownClasses = (0, _classnames2.default)('dropdown', {
136 'dropdown-flat': flat, open: open, split: split, 'dropdown-link': link
137 }, className);
138 var dropdownMenuClasses = (0, _classnames2.default)('dropdown-menu', {
139 'dropdown-border': border,
140 'dropdown-menu-right': pullRight,
141 'dropdown-menu-float': split || flat || menuCaret,
142 'dropdown-menu-caret': menuCaret
143 });
144 return _react2.default.createElement(
145 'div',
146 (0, _extends3.default)({ className: dropdownClasses }, props),
147 dropdownLabel,
148 dropdownToggle,
149 _react2.default.createElement(
150 'div',
151 { className: dropdownMenuClasses },
152 _react2.default.createElement(
153 'ul',
154 { onClick: this.menuClick },
155 children
156 )
157 )
158 );
159 }
160 }]);
161 return Dropdown;
162}((0, _puiReactMixins2.default)(_react2.default.Component).with(_scrim_mixin2.default, _transition_mixin2.default));
163
164Dropdown.propTypes = {
165 border: types.bool,
166 buttonClassName: types.string,
167 closeOnMenuClick: types.bool,
168 disableScrim: types.bool,
169 dropCaret: types.bool,
170 flat: types.bool,
171 link: types.bool,
172 pullRight: types.bool,
173 split: types.bool,
174 menuCaret: types.bool,
175 title: types.node,
176 toggle: types.node,
177 onClick: types.func,
178 onEntered: types.func,
179 onExited: types.func
180};
181Dropdown.defaultProps = {
182 closeOnMenuClick: true,
183 disableScrim: false,
184 dropCaret: true
185};
186
187var DropdownItem = exports.DropdownItem = function (_React$Component) {
188 (0, _inherits3.default)(DropdownItem, _React$Component);
189
190 function DropdownItem() {
191 var _ref;
192
193 var _temp, _this2, _ret;
194
195 (0, _classCallCheck3.default)(this, DropdownItem);
196
197 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
198 args[_key] = arguments[_key];
199 }
200
201 return _ret = (_temp = (_this2 = (0, _possibleConstructorReturn3.default)(this, (_ref = DropdownItem.__proto__ || (0, _getPrototypeOf2.default)(DropdownItem)).call.apply(_ref, [this].concat(args))), _this2), _this2.handleClick = function (event) {
202 var _this2$props = _this2.props,
203 href = _this2$props.href,
204 disabled = _this2$props.disabled,
205 onSelect = _this2$props.onSelect,
206 eventKey = _this2$props.eventKey;
207
208
209 if (!href || disabled) {
210 event.preventDefault();
211 }
212
213 if (disabled) return;
214
215 if (onSelect) {
216 onSelect(event, eventKey);
217 }
218 }, _temp), (0, _possibleConstructorReturn3.default)(_this2, _ret);
219 }
220
221 (0, _createClass3.default)(DropdownItem, [{
222 key: 'render',
223 value: function render() {
224 var _props2 = this.props,
225 children = _props2.children,
226 className = _props2.className,
227 eventKey = _props2.eventKey,
228 style = _props2.style,
229 href = _props2.href,
230 header = _props2.header,
231 divider = _props2.divider,
232 disabled = _props2.disabled,
233 anchorProps = (0, _objectWithoutProperties3.default)(_props2, ['children', 'className', 'eventKey', 'style', 'href', 'header', 'divider', 'disabled']);
234
235
236 if (header) return _react2.default.createElement(
237 'li',
238 { role: 'heading', className: 'dropdown-header' },
239 children
240 );
241 if (divider) return _react2.default.createElement('li', { role: 'separator', className: 'divider' });
242
243 var anchor = href ? _react2.default.createElement(
244 'a',
245 (0, _extends3.default)({}, (0, _extends3.default)({ href: href, disabled: disabled }, anchorProps), { onClick: this.handleClick }),
246 children
247 ) : children;
248 var disabledClass = disabled ? 'disabled' : '';
249 var dropdownItemClass = (0, _classnames2.default)(className, disabledClass);
250
251 return _react2.default.createElement(
252 'li',
253 (0, _extends3.default)({ style: style }, { className: dropdownItemClass, onClick: href ? '' : this.handleClick }),
254 anchor
255 );
256 }
257 }]);
258 return DropdownItem;
259}(_react2.default.Component);
260
261DropdownItem.propTypes = {
262 className: types.string,
263 style: types.object,
264 href: types.string,
265 header: types.bool,
266 divider: types.bool,
267 disabled: types.bool,
268 eventKey: types.string,
269 onSelect: types.func
270};
\No newline at end of file