keen-dashboard-builder
Version:
Dashboard builder for Keen.io
108 lines (99 loc) • 2.69 kB
JavaScript
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {
getSavedQueries,
loadDashboards,
loadDashboardInfo,
clearDashboardInfo,
toggleDashboardsMenu,
loadingSingleDashboard
} from '../../actions/rootActions';
import EditorToolbar from './EditorToolbar';
import EditorContainer from '../../viewer/components/EditorContainer';
import Settings from './Settings';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
class Editor extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
const { id } = this.props.match.params;
this.props.loadingSingleDashboard();
this.props.getSavedQueries();
this.props.loadDashboardInfo(id);
this.props.loadDashboards();
}
componentDidUpdate() {
const { dashboardSaved } = this.props;
if (!dashboardSaved) {
this.props.loadDashboards();
}
}
componentWillUnmount() {
this.props.keenWebHost !== 'none' && this.props.clearDashboardInfo();
}
render() {
const {
dashboardSaved,
dashboardsMenu,
isDashboardLoading,
querySource,
keenWebHost
} = this.props;
return (
<div className="dashboard-builder">
<EditorToolbar />
<EditorContainer version="editor" />
<Settings querySource={querySource} />
{dashboardSaved && (
<div className="dashboard-saved-message">
<FontAwesomeIcon
style={{ color: '#fff', marginRight: '1rem' }}
className="fa-spin"
icon="spinner"
size="1x"
/>
<span>Saving...</span>
</div>
)}
{keenWebHost !== 'none' && (dashboardsMenu || isDashboardLoading) && (
<div
className="modal-cover"
onClick={
!isDashboardLoading
? () => this.props.toggleDashboardsMenu()
: null
}
/>
)}
{keenWebHost !== 'none' && isDashboardLoading && (
<div className="new-chart-info">
<span className="loading">
<FontAwesomeIcon icon="spinner" size="1x" />
</span>
</div>
)}
</div>
);
}
}
const mapStateToProps = state => {
const { dashboardSaved, dashboardsMenu, isDashboardLoading } = state.app;
return {
dashboardSaved,
dashboardsMenu,
isDashboardLoading
};
};
const mapDispatchToProps = {
getSavedQueries,
loadDashboardInfo,
clearDashboardInfo,
toggleDashboardsMenu,
loadDashboards,
loadingSingleDashboard
};
export default connect(
mapStateToProps,
mapDispatchToProps
)(Editor);