import React from 'react';
import PropTypes from 'prop-types';
import * as toastr from 'toastr';
import HackmdEditor from './PageEditorByHackmd/HackmdEditor';
export default class PageEditorByHackmd extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
isInitialized: false,
isInitializing: false,
pageIdOnHackmd: this.props.pageIdOnHackmd,
};
this.getHackmdUri = this.getHackmdUri.bind(this);
this.syncAndStartToEdit = this.syncAndStartToEdit.bind(this);
this.resumeToEdit = this.resumeToEdit.bind(this);
this.apiErrorHandler = this.apiErrorHandler.bind(this);
}
componentWillMount() {
}
getHackmdUri() {
const envVars = this.props.crowi.config.env;
return envVars.HACKMD_URI;
}
syncToLatestRevision() {
}
/**
* Start integration with HackMD
*/
syncAndStartToEdit() {
const hackmdUri = this.getHackmdUri();
if (hackmdUri == null) {
// do nothing
return;
}
this.setState({
isInitialized: false,
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({
isInitialized: true,
pageIdOnHackmd: res.pageIdOnHackmd,
revisionIdHackmdSynced: res.revisionIdHackmdSynced,
});
})
.catch(this.apiErrorHandler)
.then(() => {
this.setState({isInitializing: false});
});
}
/**
* Start to edit w/o any api request
*/
resumeToEdit() {
this.setState({isInitialized: true});
}
apiErrorHandler(error) {
toastr.error(error.message, 'Error occured', {
closeButton: true,
progressBar: true,
newestOnTop: false,
showDuration: '100',
hideDuration: '100',
timeOut: '3000',
});
}
render() {
const hackmdUri = this.getHackmdUri();
if (this.state.isInitialized) {
return (
HackMD is not set up.
HackMD is READY!
Click to edit from the previous continuation.
HackMD is READY!
Click to clone page content and start to edit.