Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Add setting to use project from active panel #2393

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/containers/git-tab-container.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const DEFAULT_REPO_DATA = {

export default class GitTabContainer extends React.Component {
static propTypes = {
config: PropTypes.object.isRequired,
repository: PropTypes.object.isRequired,
}

Expand Down
1 change: 1 addition & 0 deletions lib/containers/github-tab-container.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export default class GitHubTabContainer extends React.Component {
repository: PropTypes.object,
loginModel: GithubLoginModelPropType.isRequired,
rootHolder: RefHolderPropType.isRequired,
config: PropTypes.object.isRequired,

changeWorkingDirectory: PropTypes.func.isRequired,
onDidChangeWorkDirs: PropTypes.func.isRequired,
Expand Down
4 changes: 4 additions & 0 deletions lib/containers/github-tab-header-container.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import GithubTabHeaderController from '../controllers/github-tab-header-controll

export default class GithubTabHeaderContainer extends React.Component {
static propTypes = {
config: PropTypes.object.isRequired,

// Connection
loginModel: PropTypes.object.isRequired,
endpoint: EndpointPropType.isRequired,
Expand Down Expand Up @@ -74,6 +76,7 @@ export default class GithubTabHeaderContainer extends React.Component {

return (
<GithubTabHeaderController
config={this.props.config}
user={new Author(email, name, login, false, avatarUrl)}

// Workspace
Expand All @@ -90,6 +93,7 @@ export default class GithubTabHeaderContainer extends React.Component {
renderNoResult() {
return (
<GithubTabHeaderController
config={this.props.config}
user={nullAuthor}

// Workspace
Expand Down
26 changes: 21 additions & 5 deletions lib/controllers/git-tab-header-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import GitTabHeaderView from '../views/git-tab-header-view';

export default class GitTabHeaderController extends React.Component {
static propTypes = {
config: PropTypes.object.isRequired,
getCommitter: PropTypes.func.isRequired,

// Workspace
Expand All @@ -21,7 +22,11 @@ export default class GitTabHeaderController extends React.Component {
constructor(props) {
super(props);
this._isMounted = false;
this.state = {currentWorkDirs: [], committer: nullAuthor};
this.state = {
currentWorkDirs: [],
committer: nullAuthor,
disableProjectSelection: this.props.config.get('github.useProjectFromActivePanel'),
};
this.disposable = new CompositeDisposable();
}

Expand All @@ -33,8 +38,11 @@ export default class GitTabHeaderController extends React.Component {

componentDidMount() {
this._isMounted = true;
this.disposable.add(this.props.onDidChangeWorkDirs(this.resetWorkDirs));
this.disposable.add(this.props.onDidUpdateRepo(this.updateCommitter));
this.disposable.add(
this.props.onDidChangeWorkDirs(this.resetWorkDirs),
this.props.onDidUpdateRepo(this.updateCommitter),
this.props.config.onDidChange('github.useProjectFromActivePanel', this.handleUseProjectFromActivePanelChange),
);
this.updateCommitter();
}

Expand All @@ -45,8 +53,11 @@ export default class GitTabHeaderController extends React.Component {
) {
this.disposable.dispose();
this.disposable = new CompositeDisposable();
this.disposable.add(this.props.onDidChangeWorkDirs(this.resetWorkDirs));
this.disposable.add(this.props.onDidUpdateRepo(this.updateCommitter));
this.disposable.add(
this.props.onDidChangeWorkDirs(this.resetWorkDirs),
this.props.onDidUpdateRepo(this.updateCommitter),
this.props.config.onDidChange('github.useProjectFromActivePanel', this.handleUseProjectFromActivePanelChange),
);
}
if (prevProps.getCommitter !== this.props.getCommitter) {
this.updateCommitter();
Expand All @@ -56,6 +67,7 @@ export default class GitTabHeaderController extends React.Component {
render() {
return (
<GitTabHeaderView
disableProjectSelection={this.state.disableProjectSelection}
committer={this.state.committer}

// Workspace
Expand All @@ -74,6 +86,10 @@ export default class GitTabHeaderController extends React.Component {
}));
}

handleUseProjectFromActivePanelChange = ({newValue}) => {
this.setState({disableProjectSelection: newValue});
}

updateCommitter = async () => {
const committer = await this.props.getCommitter() || nullAuthor;
if (this._isMounted) {
Expand Down
2 changes: 2 additions & 0 deletions lib/controllers/github-tab-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export default class GitHubTabController extends React.Component {
refresher: RefresherPropType.isRequired,
loginModel: GithubLoginModelPropType.isRequired,
rootHolder: RefHolderPropType.isRequired,
config: PropTypes.object.isRequired,

workingDirectory: PropTypes.string,
repository: PropTypes.object.isRequired,
Expand Down Expand Up @@ -52,6 +53,7 @@ export default class GitHubTabController extends React.Component {
workspace={this.props.workspace}
refresher={this.props.refresher}
rootHolder={this.props.rootHolder}
config={this.props.config}

workingDirectory={this.props.workingDirectory || this.props.currentWorkDir}
repository={this.props.repository}
Expand Down
28 changes: 22 additions & 6 deletions lib/controllers/github-tab-header-controller.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import React from 'react';
import PropTypes from 'prop-types';
import {AuthorPropType} from '../prop-types';
import {CompositeDisposable} from 'atom';
import GithubTabHeaderView from '../views/github-tab-header-view';

export default class GithubTabHeaderController extends React.Component {
static propTypes = {
config: PropTypes.object.isRequired,
user: AuthorPropType.isRequired,

// Workspace
Expand All @@ -18,7 +20,11 @@ export default class GithubTabHeaderController extends React.Component {

constructor(props) {
super(props);
this.state = {currentWorkDirs: []};
this.state = {
currentWorkDirs: [],
disableProjectSelection: this.props.config.get('github.useProjectFromActivePanel'),
};
this.disposable = new CompositeDisposable();
}

static getDerivedStateFromProps(props, state) {
Expand All @@ -28,21 +34,27 @@ export default class GithubTabHeaderController extends React.Component {
}

componentDidMount() {
this.disposable = this.props.onDidChangeWorkDirs(this.resetWorkDirs);
this.disposable.add(
this.props.onDidChangeWorkDirs(this.resetWorkDirs),
this.props.config.onDidChange('github.useProjectFromActivePanel', this.handleUseProjectFromActivePanelChange),
);
}

componentDidUpdate(prevProps) {
if (prevProps.onDidChangeWorkDirs !== this.props.onDidChangeWorkDirs) {
if (this.disposable) {
this.disposable.dispose();
}
this.disposable = this.props.onDidChangeWorkDirs(this.resetWorkDirs);
this.disposable.dispose();
this.disposeable = new CompositeDisposable();
this.disposable.add(
this.props.onDidChangeWorkDirs(this.resetWorkDirs),
this.props.config.onDidChange('github.useProjectFromActivePanel', this.handleUseProjectFromActivePanelChange),
);
}
}

render() {
return (
<GithubTabHeaderView
disableProjectSelection={this.state.disableProjectSelection}
user={this.props.user}

// Workspace
Expand All @@ -55,6 +67,10 @@ export default class GithubTabHeaderController extends React.Component {
);
}

handleUseProjectFromActivePanelChange = ({newValue}) => {
this.setState({disableProjectSelection: newValue});
}

resetWorkDirs = () => {
this.setState((state, props) => ({
currentWorkDirs: [],
Expand Down
1 change: 1 addition & 0 deletions lib/controllers/root-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,7 @@ export default class RootController extends React.Component {
repository={this.props.repository}
loginModel={this.props.loginModel}
workspace={this.props.workspace}
config={this.props.config}
currentWorkDir={this.props.currentWorkDir}
getCurrentWorkDirs={getCurrentWorkDirs}
onDidChangeWorkDirs={onDidChangeWorkDirs}
Expand Down
26 changes: 26 additions & 0 deletions lib/github-package.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export default class GithubPackage {
this.confirm = confirm;
this.startOpen = false;
this.activated = false;
this.projectFromActivePanel = false;

const criteria = {
projectPathCount: this.project.getPaths().length,
Expand Down Expand Up @@ -181,8 +182,33 @@ export default class GithubPackage {
this.scheduleActiveContextUpdate({activeRepositoryPath});
};

const handleActivePaneChange = item => {
if (!this.projectFromActivePanel || !item || !this.workspace.isTextEditor(item)
|| !item.getBuffer() || !item.getBuffer().getPath()) {
return;
}

const activeDirectory = this.project.getDirectories().find(directory => {
return directory.contains(item.getBuffer().getPath());
});

if (activeDirectory) {
this.workdirCache.find(activeDirectory.getPath()).then(activeRepositoryPath => {
this.scheduleActiveContextUpdate({activeRepositoryPath}, {item});
}).catch(e => {
throw e;
});
}
};

const handleUseProjectFromActivePanelChange = newValue => {
this.projectFromActivePanel = newValue;
};

this.subscriptions.add(
this.project.onDidChangePaths(handleProjectPathsChange),
this.workspace.getCenter().onDidStopChangingActivePaneItem(handleActivePaneChange),
this.config.observe('github.useProjectFromActivePanel', handleUseProjectFromActivePanelChange),
this.styleCalculator.startWatching(
'github-package-styles',
['editor.fontSize', 'editor.fontFamily', 'editor.lineHeight', 'editor.tabLength'],
Expand Down
1 change: 1 addition & 0 deletions lib/items/git-tab-item.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import GitTabContainer from '../containers/git-tab-container';

export default class GitTabItem extends React.Component {
static propTypes = {
config: PropTypes.object.isRequired,
repository: PropTypes.object.isRequired,
}

Expand Down
1 change: 1 addition & 0 deletions lib/items/github-tab-item.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export default class GitHubTabItem extends React.Component {
workspace: PropTypes.object.isRequired,
repository: PropTypes.object,
loginModel: GithubLoginModelPropType.isRequired,
config: PropTypes.object.isRequired,

documentActiveElement: PropTypes.func,

Expand Down
4 changes: 3 additions & 1 deletion lib/views/git-tab-header-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {AuthorPropType} from '../prop-types';

export default class GitTabHeaderView extends React.Component {
static propTypes = {
disableProjectSelection: PropTypes.bool,
committer: AuthorPropType.isRequired,

// Workspace
Expand All @@ -21,7 +22,8 @@ export default class GitTabHeaderView extends React.Component {
{this.renderCommitter()}
<select className="github-Project-path input-select"
value={this.props.workdir ? path.normalize(this.props.workdir) : undefined}
onChange={this.props.handleWorkDirSelect ? this.props.handleWorkDirSelect : () => {}}>
onChange={this.props.handleWorkDirSelect ? this.props.handleWorkDirSelect : () => {}}
disabled={this.props.disableProjectSelection}>
{this.renderWorkDirs()}
</select>
</header>
Expand Down
1 change: 1 addition & 0 deletions lib/views/git-tab-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ export default class GitTabView extends React.Component {
const {repository} = this.props;
return (
<GitTabHeaderController
config={this.props.config}
getCommitter={repository.getCommitter.bind(repository)}

// Workspace
Expand Down
4 changes: 3 additions & 1 deletion lib/views/github-tab-header-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {AuthorPropType} from '../prop-types';

export default class GithubTabHeaderView extends React.Component {
static propTypes = {
disableProjectSelection: PropTypes.bool,
user: AuthorPropType.isRequired,

// Workspace
Expand All @@ -21,7 +22,8 @@ export default class GithubTabHeaderView extends React.Component {
{this.renderUser()}
<select className="github-Project-path input-select"
value={this.props.workdir ? path.normalize(this.props.workdir) : undefined}
onChange={this.props.handleWorkDirSelect ? this.props.handleWorkDirSelect : () => {}}>
onChange={this.props.handleWorkDirSelect ? this.props.handleWorkDirSelect : () => {}}
disabled={this.props.disableProjectSelection}>
{this.renderWorkDirs()}
</select>
</header>
Expand Down
6 changes: 5 additions & 1 deletion lib/views/github-tab-view.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export default class GitHubTabView extends React.Component {
static propTypes = {
refresher: RefresherPropType.isRequired,
rootHolder: RefHolderPropType.isRequired,
config: PropTypes.object.isRequired,

// Connection
loginModel: GithubLoginModelPropType.isRequired,
Expand All @@ -40,7 +41,7 @@ export default class GitHubTabView extends React.Component {
aheadCount: PropTypes.number,
pushInProgress: PropTypes.bool.isRequired,

// Event Handelrs
// Event Handlers
handleWorkDirSelect: PropTypes.func,
handlePushBranch: PropTypes.func.isRequired,
handleRemoteSelect: PropTypes.func.isRequired,
Expand Down Expand Up @@ -131,6 +132,8 @@ export default class GitHubTabView extends React.Component {
if (this.props.currentRemote.isPresent()) {
return (
<GithubTabHeaderContainer
config={this.props.config}

// Connection
loginModel={this.props.loginModel}
endpoint={this.props.currentRemote.getEndpoint()}
Expand All @@ -147,6 +150,7 @@ export default class GitHubTabView extends React.Component {
}
return (
<GithubTabHeaderController
config={this.props.config}
user={nullAuthor}

// Workspace
Expand Down
5 changes: 5 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,11 @@
"ssh"
],
"description": "Transport protocol to prefer when creating a new git remote"
},
"useProjectFromActivePanel": {
"type": "boolean",
"default": false,
"description": "Use active panel to determine which project to show"
}
},
"deserializers": {
Expand Down
4 changes: 4 additions & 0 deletions styles/tabs.less
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,7 @@
}
}
}

.input-select:disabled {
color: @text-color-subtle;
}
3 changes: 2 additions & 1 deletion test/containers/github-tab-container.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@ describe('GitHubTabContainer', function() {
repository={repository}
loginModel={new GithubLoginModel(InMemoryStrategy)}
rootHolder={new RefHolder()}
config={atomEnv.config}

changeWorkingDirectory={() => {}}
onDidChangeWorkDirs={() => {}}
onDidChangeWorkDirs={() => { return {dispose: () => {}}; }}
getCurrentWorkDirs={() => []}
openCreateDialog={() => {}}
openPublishDialog={() => {}}
Expand Down
1 change: 1 addition & 0 deletions test/containers/github-tab-header-container.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ describe('GithubTabHeaderContainer', function() {
function buildApp(overrideProps = {}) {
return (
<GithubTabHeaderContainer
config={atomEnv.config}
loginModel={model}
endpoint={getEndpoint('github.com')}
getCurrentWorkDirs={() => null}
Expand Down
Loading