/* 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);