58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
import React from 'react';
|
|
|
|
const {remote} = require('electron');
|
|
class FileSelector extends React.Component {
|
|
static propTypes = {
|
|
type: React.PropTypes.oneOf(['file', 'directory']),
|
|
initPath: React.PropTypes.string,
|
|
onFileChosen: React.PropTypes.func,
|
|
}
|
|
|
|
static defaultProps = {
|
|
type: 'file',
|
|
}
|
|
|
|
componentWillMount() {
|
|
this.setState({
|
|
path: this.props.initPath || null,
|
|
});
|
|
}
|
|
|
|
handleButtonClick() {
|
|
remote.dialog.showOpenDialog({
|
|
properties: [this.props.type == 'file' ? 'openFile' : 'openDirectory'],
|
|
}, (paths) => {
|
|
if (!paths) { // User hit cancel, so do nothing
|
|
return;
|
|
}
|
|
|
|
const path = paths[0];
|
|
this.setState({
|
|
path: path,
|
|
});
|
|
if (this.props.onFileChosen) {
|
|
this.props.onFileChosen(path);
|
|
}
|
|
});
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div className="file-selector">
|
|
<button type="button" className="file-selector__choose-button" onClick={() => this.handleButtonClick()}>
|
|
{this.props.type == 'file' ?
|
|
'Choose File' :
|
|
'Choose Directory'}
|
|
</button>
|
|
{' '}
|
|
<span className="file-selector__path">
|
|
{this.state.path ?
|
|
this.state.path :
|
|
'No File Chosen'}
|
|
</span>
|
|
</div>
|
|
);
|
|
}
|
|
};
|
|
|
|
export default FileSelector;
|