|
@@ -1,6 +1,8 @@
|
|
|
import React from 'react';
|
|
import React from 'react';
|
|
|
import PropTypes from 'prop-types';
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
|
|
|
|
+import * as toastr from 'toastr';
|
|
|
|
|
+
|
|
|
import HackmdEditor from './PageEditorByHackmd/HackmdEditor';
|
|
import HackmdEditor from './PageEditorByHackmd/HackmdEditor';
|
|
|
|
|
|
|
|
export default class PageEditorByHackmd extends React.PureComponent {
|
|
export default class PageEditorByHackmd extends React.PureComponent {
|
|
@@ -9,26 +11,79 @@ export default class PageEditorByHackmd extends React.PureComponent {
|
|
|
super(props);
|
|
super(props);
|
|
|
|
|
|
|
|
this.state = {
|
|
this.state = {
|
|
|
|
|
+ isInitializing: false,
|
|
|
|
|
+ pageIdOnHackmd: this.props.pageIdOnHackmd,
|
|
|
};
|
|
};
|
|
|
|
|
+
|
|
|
|
|
+ this.getHackmdUri = this.getHackmdUri.bind(this);
|
|
|
|
|
+ this.startIntegrationWithHackmd = this.startIntegrationWithHackmd.bind(this);
|
|
|
|
|
+
|
|
|
|
|
+ this.apiErrorHandler = this.apiErrorHandler.bind(this);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
componentWillMount() {
|
|
componentWillMount() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ getHackmdUri() {
|
|
|
|
|
+ const envVars = this.props.crowi.config.env;
|
|
|
|
|
+ return envVars.HACKMD_URI;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
syncToLatestRevision() {
|
|
syncToLatestRevision() {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Start integration with HackMD
|
|
|
|
|
+ */
|
|
|
|
|
+ startIntegrationWithHackmd() {
|
|
|
|
|
+ const hackmdUri = this.getHackmdUri();
|
|
|
|
|
+
|
|
|
|
|
+ if (hackmdUri == null) {
|
|
|
|
|
+ // do nothing
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.setState({isInitializing: true});
|
|
|
|
|
+
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ pageId: this.props.pageId,
|
|
|
|
|
+ };
|
|
|
|
|
+ this.props.crowi.apiPost('/hackmd/integrate', params)
|
|
|
|
|
+ .then(res => {
|
|
|
|
|
+ if (!res.ok) {
|
|
|
|
|
+ throw new Error(res.error);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.setState({pageIdOnHackmd: res.pageIdOnHackmd});
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch(this.apiErrorHandler)
|
|
|
|
|
+ .then(() => {
|
|
|
|
|
+ this.setState({isInitializing: false});
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ apiErrorHandler(error) {
|
|
|
|
|
+ toastr.error(error.message, 'Error occured', {
|
|
|
|
|
+ closeButton: true,
|
|
|
|
|
+ progressBar: true,
|
|
|
|
|
+ newestOnTop: false,
|
|
|
|
|
+ showDuration: '100',
|
|
|
|
|
+ hideDuration: '100',
|
|
|
|
|
+ timeOut: '3000',
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
render() {
|
|
render() {
|
|
|
- const envVars = this.props.crowi.config.env;
|
|
|
|
|
- const hackMdUri = envVars.HACKMD_URI;
|
|
|
|
|
|
|
+ const hackmdUri = this.getHackmdUri();
|
|
|
|
|
|
|
|
- if (hackMdUri == null || this.props.pageIdOnHackmd == null) {
|
|
|
|
|
|
|
+ if (hackmdUri == null || this.state.pageIdOnHackmd == null) {
|
|
|
return (
|
|
return (
|
|
|
<div className="hackmd-nopage d-flex justify-content-center align-items-center">
|
|
<div className="hackmd-nopage d-flex justify-content-center align-items-center">
|
|
|
<div>
|
|
<div>
|
|
|
<p className="text-center">
|
|
<p className="text-center">
|
|
|
- <button className="btn btn-success btn-lg waves-effect waves-light" type="button">
|
|
|
|
|
|
|
+ <button className="btn btn-success btn-lg waves-effect waves-light" type="button"
|
|
|
|
|
+ onClick={() => this.startIntegrationWithHackmd()} disabled={this.state.isInitializing}>
|
|
|
<span className="btn-label"><i className="fa fa-file-text-o"></i></span>
|
|
<span className="btn-label"><i className="fa fa-file-text-o"></i></span>
|
|
|
Start to edit with HackMD
|
|
Start to edit with HackMD
|
|
|
</button>
|
|
</button>
|
|
@@ -42,8 +97,8 @@ export default class PageEditorByHackmd extends React.PureComponent {
|
|
|
return (
|
|
return (
|
|
|
<HackmdEditor
|
|
<HackmdEditor
|
|
|
markdown={this.props.markdown}
|
|
markdown={this.props.markdown}
|
|
|
- hackMdUri={hackMdUri}
|
|
|
|
|
- pageIdOnHackmd={this.props.pageIdOnHackmd}
|
|
|
|
|
|
|
+ hackmdUri={hackmdUri}
|
|
|
|
|
+ pageIdOnHackmd={this.state.pageIdOnHackmd}
|
|
|
>
|
|
>
|
|
|
</HackmdEditor>
|
|
</HackmdEditor>
|
|
|
);
|
|
);
|