UNPKG

10.1 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
5exports.__esModule = true;
6exports.default = void 0;
7
8var _extends3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends"));
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutPropertiesLoose"));
11
12var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inheritsLoose"));
13
14var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
15
16var _classnames = _interopRequireDefault(require("classnames"));
17
18var _react = _interopRequireDefault(require("react"));
19
20var _propTypes = _interopRequireDefault(require("prop-types"));
21
22var _elementType = _interopRequireDefault(require("prop-types-extra/lib/elementType"));
23
24var _uncontrollable = _interopRequireDefault(require("uncontrollable"));
25
26var _Grid = _interopRequireDefault(require("./Grid"));
27
28var _NavbarBrand = _interopRequireDefault(require("./NavbarBrand"));
29
30var _NavbarCollapse = _interopRequireDefault(require("./NavbarCollapse"));
31
32var _NavbarHeader = _interopRequireDefault(require("./NavbarHeader"));
33
34var _NavbarToggle = _interopRequireDefault(require("./NavbarToggle"));
35
36var _bootstrapUtils = require("./utils/bootstrapUtils");
37
38var _StyleConfig = require("./utils/StyleConfig");
39
40var _createChainedFunction = _interopRequireDefault(require("./utils/createChainedFunction"));
41
42// TODO: Remove this pragma once we upgrade eslint-config-airbnb.
43
44/* eslint-disable react/no-multi-comp */
45var propTypes = {
46 /**
47 * Create a fixed navbar along the top of the screen, that scrolls with the
48 * page
49 */
50 fixedTop: _propTypes.default.bool,
51
52 /**
53 * Create a fixed navbar along the bottom of the screen, that scrolls with
54 * the page
55 */
56 fixedBottom: _propTypes.default.bool,
57
58 /**
59 * Create a full-width navbar that scrolls away with the page
60 */
61 staticTop: _propTypes.default.bool,
62
63 /**
64 * An alternative dark visual style for the Navbar
65 */
66 inverse: _propTypes.default.bool,
67
68 /**
69 * Allow the Navbar to fluidly adjust to the page or container width, instead
70 * of at the predefined screen breakpoints
71 */
72 fluid: _propTypes.default.bool,
73
74 /**
75 * Set a custom element for this component.
76 */
77 componentClass: _elementType.default,
78
79 /**
80 * A callback fired when the `<Navbar>` body collapses or expands. Fired when
81 * a `<Navbar.Toggle>` is clicked and called with the new `expanded`
82 * boolean value.
83 *
84 * @controllable expanded
85 */
86 onToggle: _propTypes.default.func,
87
88 /**
89 * A callback fired when a descendant of a child `<Nav>` is selected. Should
90 * be used to execute complex closing or other miscellaneous actions desired
91 * after selecting a descendant of `<Nav>`. Does nothing if no `<Nav>` or `<Nav>`
92 * descendants exist. The callback is called with an eventKey, which is a
93 * prop from the selected `<Nav>` descendant, and an event.
94 *
95 * ```js
96 * function (
97 * Any eventKey,
98 * SyntheticEvent event?
99 * )
100 * ```
101 *
102 * For basic closing behavior after all `<Nav>` descendant onSelect events in
103 * mobile viewports, try using collapseOnSelect.
104 *
105 * Note: If you are manually closing the navbar using this `OnSelect` prop,
106 * ensure that you are setting `expanded` to false and not *toggling* between
107 * true and false.
108 */
109 onSelect: _propTypes.default.func,
110
111 /**
112 * Sets `expanded` to `false` after the onSelect event of a descendant of a
113 * child `<Nav>`. Does nothing if no `<Nav>` or `<Nav>` descendants exist.
114 *
115 * The onSelect callback should be used instead for more complex operations
116 * that need to be executed after the `select` event of `<Nav>` descendants.
117 */
118 collapseOnSelect: _propTypes.default.bool,
119
120 /**
121 * Explicitly set the visiblity of the navbar body
122 *
123 * @controllable onToggle
124 */
125 expanded: _propTypes.default.bool,
126 role: _propTypes.default.string
127};
128var defaultProps = {
129 componentClass: 'nav',
130 fixedTop: false,
131 fixedBottom: false,
132 staticTop: false,
133 inverse: false,
134 fluid: false,
135 collapseOnSelect: false
136};
137var childContextTypes = {
138 $bs_navbar: _propTypes.default.shape({
139 bsClass: _propTypes.default.string,
140 expanded: _propTypes.default.bool,
141 onToggle: _propTypes.default.func.isRequired,
142 onSelect: _propTypes.default.func
143 })
144};
145
146var Navbar =
147/*#__PURE__*/
148function (_React$Component) {
149 (0, _inheritsLoose2.default)(Navbar, _React$Component);
150
151 function Navbar(props, context) {
152 var _this;
153
154 _this = _React$Component.call(this, props, context) || this;
155 _this.handleToggle = _this.handleToggle.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
156 _this.handleCollapse = _this.handleCollapse.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)));
157 return _this;
158 }
159
160 var _proto = Navbar.prototype;
161
162 _proto.getChildContext = function getChildContext() {
163 var _this$props = this.props,
164 bsClass = _this$props.bsClass,
165 expanded = _this$props.expanded,
166 onSelect = _this$props.onSelect,
167 collapseOnSelect = _this$props.collapseOnSelect;
168 return {
169 $bs_navbar: {
170 bsClass: bsClass,
171 expanded: expanded,
172 onToggle: this.handleToggle,
173 onSelect: (0, _createChainedFunction.default)(onSelect, collapseOnSelect ? this.handleCollapse : null)
174 }
175 };
176 };
177
178 _proto.handleCollapse = function handleCollapse() {
179 var _this$props2 = this.props,
180 onToggle = _this$props2.onToggle,
181 expanded = _this$props2.expanded;
182
183 if (expanded) {
184 onToggle(false);
185 }
186 };
187
188 _proto.handleToggle = function handleToggle() {
189 var _this$props3 = this.props,
190 onToggle = _this$props3.onToggle,
191 expanded = _this$props3.expanded;
192 onToggle(!expanded);
193 };
194
195 _proto.render = function render() {
196 var _extends2;
197
198 var _this$props4 = this.props,
199 Component = _this$props4.componentClass,
200 fixedTop = _this$props4.fixedTop,
201 fixedBottom = _this$props4.fixedBottom,
202 staticTop = _this$props4.staticTop,
203 inverse = _this$props4.inverse,
204 fluid = _this$props4.fluid,
205 className = _this$props4.className,
206 children = _this$props4.children,
207 props = (0, _objectWithoutPropertiesLoose2.default)(_this$props4, ["componentClass", "fixedTop", "fixedBottom", "staticTop", "inverse", "fluid", "className", "children"]);
208
209 var _splitBsPropsAndOmit = (0, _bootstrapUtils.splitBsPropsAndOmit)(props, ['expanded', 'onToggle', 'onSelect', 'collapseOnSelect']),
210 bsProps = _splitBsPropsAndOmit[0],
211 elementProps = _splitBsPropsAndOmit[1]; // will result in some false positives but that seems better
212 // than false negatives. strict `undefined` check allows explicit
213 // "nulling" of the role if the user really doesn't want one
214
215
216 if (elementProps.role === undefined && Component !== 'nav') {
217 elementProps.role = 'navigation';
218 }
219
220 if (inverse) {
221 bsProps.bsStyle = _StyleConfig.Style.INVERSE;
222 }
223
224 var classes = (0, _extends3.default)({}, (0, _bootstrapUtils.getClassSet)(bsProps), (_extends2 = {}, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'fixed-top')] = fixedTop, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'fixed-bottom')] = fixedBottom, _extends2[(0, _bootstrapUtils.prefix)(bsProps, 'static-top')] = staticTop, _extends2));
225 return _react.default.createElement(Component, (0, _extends3.default)({}, elementProps, {
226 className: (0, _classnames.default)(className, classes)
227 }), _react.default.createElement(_Grid.default, {
228 fluid: fluid
229 }, children));
230 };
231
232 return Navbar;
233}(_react.default.Component);
234
235Navbar.propTypes = propTypes;
236Navbar.defaultProps = defaultProps;
237Navbar.childContextTypes = childContextTypes;
238(0, _bootstrapUtils.bsClass)('navbar', Navbar);
239var UncontrollableNavbar = (0, _uncontrollable.default)(Navbar, {
240 expanded: 'onToggle'
241});
242
243function createSimpleWrapper(tag, suffix, displayName) {
244 var Wrapper = function Wrapper(_ref, _ref2) {
245 var Component = _ref.componentClass,
246 className = _ref.className,
247 pullRight = _ref.pullRight,
248 pullLeft = _ref.pullLeft,
249 props = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["componentClass", "className", "pullRight", "pullLeft"]);
250 var _ref2$$bs_navbar = _ref2.$bs_navbar,
251 navbarProps = _ref2$$bs_navbar === void 0 ? {
252 bsClass: 'navbar'
253 } : _ref2$$bs_navbar;
254 return _react.default.createElement(Component, (0, _extends3.default)({}, props, {
255 className: (0, _classnames.default)(className, (0, _bootstrapUtils.prefix)(navbarProps, suffix), pullRight && (0, _bootstrapUtils.prefix)(navbarProps, 'right'), pullLeft && (0, _bootstrapUtils.prefix)(navbarProps, 'left'))
256 }));
257 };
258
259 Wrapper.displayName = displayName;
260 Wrapper.propTypes = {
261 componentClass: _elementType.default,
262 pullRight: _propTypes.default.bool,
263 pullLeft: _propTypes.default.bool
264 };
265 Wrapper.defaultProps = {
266 componentClass: tag,
267 pullRight: false,
268 pullLeft: false
269 };
270 Wrapper.contextTypes = {
271 $bs_navbar: _propTypes.default.shape({
272 bsClass: _propTypes.default.string
273 })
274 };
275 return Wrapper;
276}
277
278UncontrollableNavbar.Brand = _NavbarBrand.default;
279UncontrollableNavbar.Header = _NavbarHeader.default;
280UncontrollableNavbar.Toggle = _NavbarToggle.default;
281UncontrollableNavbar.Collapse = _NavbarCollapse.default;
282UncontrollableNavbar.Form = createSimpleWrapper('div', 'form', 'NavbarForm');
283UncontrollableNavbar.Text = createSimpleWrapper('p', 'text', 'NavbarText');
284UncontrollableNavbar.Link = createSimpleWrapper('a', 'link', 'NavbarLink'); // Set bsStyles here so they can be overridden.
285
286var _default = (0, _bootstrapUtils.bsStyles)([_StyleConfig.Style.DEFAULT, _StyleConfig.Style.INVERSE], _StyleConfig.Style.DEFAULT, UncontrollableNavbar);
287
288exports.default = _default;
289module.exports = exports["default"];
\No newline at end of file