/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at . */ import React, { Component } from "react"; import PropTypes from "prop-types"; import classnames from "classnames"; import { Tab, Tabs, TabList, TabPanels } from "react-aria-components/src/tabs"; import actions from "../../actions"; import { getProjectDirectoryRootName, getSelectedPrimaryPaneTab, getContext, } from "../../selectors"; import { features, prefs } from "../../utils/prefs"; import { connect } from "../../utils/connect"; import { formatKeyShortcut } from "../../utils/text"; import Outline from "./Outline"; import SourcesTree from "./SourcesTree"; import AccessibleImage from "../shared/AccessibleImage"; import "./Sources.css"; class PrimaryPanes extends Component { constructor(props) { super(props); this.state = { alphabetizeOutline: prefs.alphabetizeOutline, }; } static get propTypes() { return { clearProjectDirectoryRoot: PropTypes.func.isRequired, cx: PropTypes.object.isRequired, projectRootName: PropTypes.string.isRequired, selectedTab: PropTypes.oneOf(["sources", "outline"]).isRequired, setPrimaryPaneTab: PropTypes.func.isRequired, }; } showPane = selectedPane => { this.props.setPrimaryPaneTab(selectedPane); }; onAlphabetizeClick = () => { const alphabetizeOutline = !prefs.alphabetizeOutline; prefs.alphabetizeOutline = alphabetizeOutline; this.setState({ alphabetizeOutline }); }; onActivateTab = index => { if (index === 0) { this.showPane("sources"); } else { this.showPane("outline"); } }; renderOutlineTabs() { if (!features.outline) { return null; } const sources = formatKeyShortcut(L10N.getStr("sources.header")); const outline = formatKeyShortcut(L10N.getStr("outline.header")); const isSources = this.props.selectedTab === "sources"; const isOutline = this.props.selectedTab === "outline"; return [ {sources} , {outline} , ]; } renderProjectRootHeader() { const { cx, projectRootName } = this.props; if (!projectRootName) { return null; } return (
); } renderThreadSources() { return ; } render() { const { selectedTab, projectRootName } = this.props; const activeIndex = selectedTab === "sources" ? 0 : 1; return ( {this.renderOutlineTabs()}
{this.renderProjectRootHeader()} {this.renderThreadSources()}
); } } const mapStateToProps = state => { return { cx: getContext(state), selectedTab: getSelectedPrimaryPaneTab(state), projectRootName: getProjectDirectoryRootName(state), }; }; const connector = connect(mapStateToProps, { setPrimaryPaneTab: actions.setPrimaryPaneTab, setActiveSearch: actions.setActiveSearch, closeActiveSearch: actions.closeActiveSearch, clearProjectDirectoryRoot: actions.clearProjectDirectoryRoot, }); export default connector(PrimaryPanes);