Sidebar.js (2534B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { 8 createFactory, 9 PureComponent, 10 } = require("resource://devtools/client/shared/vendor/react.mjs"); 11 const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); 12 13 const SidebarToggle = createFactory( 14 require("resource://devtools/client/shared/components/SidebarToggle.js") 15 ); 16 const Tabs = createFactory( 17 ChromeUtils.importESModule( 18 "resource://devtools/client/shared/components/tabs/Tabs.mjs", 19 { global: "current" } 20 ).Tabs 21 ); 22 23 class Sidebar extends PureComponent { 24 static get propTypes() { 25 return { 26 children: PropTypes.oneOfType([PropTypes.array, PropTypes.element]) 27 .isRequired, 28 onAfterChange: PropTypes.func, 29 onAllTabsMenuClick: PropTypes.func, 30 renderOnlySelected: PropTypes.bool, 31 showAllTabsMenu: PropTypes.bool, 32 allTabsMenuButtonTooltip: PropTypes.string, 33 sidebarToggleButton: PropTypes.shape({ 34 collapsed: PropTypes.bool.isRequired, 35 collapsePaneTitle: PropTypes.string.isRequired, 36 expandPaneTitle: PropTypes.string.isRequired, 37 onClick: PropTypes.func.isRequired, 38 alignRight: PropTypes.bool, 39 canVerticalSplit: PropTypes.bool, 40 }), 41 activeTab: PropTypes.number, 42 }; 43 } 44 45 constructor(props) { 46 super(props); 47 this.renderSidebarToggle = this.renderSidebarToggle.bind(this); 48 } 49 50 renderSidebarToggle() { 51 if (!this.props.sidebarToggleButton) { 52 return null; 53 } 54 55 const { 56 collapsed, 57 collapsePaneTitle, 58 expandPaneTitle, 59 onClick, 60 alignRight, 61 canVerticalSplit, 62 } = this.props.sidebarToggleButton; 63 64 return SidebarToggle({ 65 collapsed, 66 collapsePaneTitle, 67 expandPaneTitle, 68 onClick, 69 alignRight, 70 canVerticalSplit, 71 }); 72 } 73 74 render() { 75 const { renderSidebarToggle } = this; 76 const { 77 children, 78 onAfterChange, 79 onAllTabsMenuClick, 80 renderOnlySelected, 81 showAllTabsMenu, 82 allTabsMenuButtonTooltip, 83 activeTab, 84 } = this.props; 85 86 return Tabs( 87 { 88 onAfterChange, 89 onAllTabsMenuClick, 90 renderOnlySelected, 91 renderSidebarToggle, 92 showAllTabsMenu, 93 allTabsMenuButtonTooltip, 94 activeTab, 95 }, 96 children 97 ); 98 } 99 } 100 101 module.exports = Sidebar;