mirror of
https://github.com/Kong/insomnia
synced 2024-11-08 23:00:30 +00:00
80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
// @flow
|
|
import * as React from 'react';
|
|
import autobind from 'autobind-decorator';
|
|
import VCS from '../../sync/vcs';
|
|
import { showError } from './modals';
|
|
|
|
type Props = {
|
|
vcs: VCS,
|
|
branch: string,
|
|
onPull: Function,
|
|
disabled?: boolean,
|
|
className?: string,
|
|
children?: React.Node,
|
|
};
|
|
|
|
type State = {
|
|
loading: boolean,
|
|
};
|
|
|
|
@autobind
|
|
class SyncPullButton extends React.PureComponent<Props, State> {
|
|
_timeout: TimeoutID;
|
|
state = {
|
|
loading: false,
|
|
};
|
|
|
|
async _handleClick() {
|
|
const { vcs, onPull, branch } = this.props;
|
|
|
|
this.setState({ loading: true });
|
|
const newVCS = vcs.newInstance();
|
|
const oldBranch = await newVCS.getBranch();
|
|
|
|
let failed = false;
|
|
try {
|
|
// Clone old VCS so we don't mess anything up while working on other projects
|
|
await newVCS.checkout([], branch);
|
|
await newVCS.pull([]);
|
|
} catch (err) {
|
|
showError({
|
|
title: 'Pull Error',
|
|
message: 'Failed to pull ' + branch,
|
|
error: err,
|
|
});
|
|
failed = true;
|
|
} finally {
|
|
// We actually need to checkout the old branch again because the VCS
|
|
// stores it on the filesystem. We should probably have a way to not
|
|
// have to do this hack
|
|
await newVCS.checkout([], oldBranch);
|
|
}
|
|
|
|
// Do this a bit later so the loading doesn't seem to stop too early
|
|
this._timeout = setTimeout(() => {
|
|
this.setState({ loading: false });
|
|
}, 400);
|
|
|
|
if (!failed) {
|
|
onPull && onPull();
|
|
}
|
|
}
|
|
|
|
componentWillUnmount() {
|
|
clearTimeout(this._timeout);
|
|
}
|
|
|
|
render() {
|
|
const { className, children, disabled } = this.props;
|
|
const { loading } = this.state;
|
|
return (
|
|
<button className={className} onClick={this._handleClick} disabled={disabled}>
|
|
{loading && <i className="fa fa-spin fa-refresh space-right" />}
|
|
{children || 'Pull'}
|
|
</button>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default SyncPullButton;
|