keen-dashboard-builder
Version:
Dashboard builder for Keen.io
118 lines (108 loc) • 2.86 kB
JavaScript
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { setLoading, selectSavedQuery } from '../../actions/rootActions';
import ChartTypeUtils from '../../func/ChartType';
import Select from 'react-select';
class SavedQueriesSelect extends Component {
constructor(props) {
super(props);
this.state = {
savedQueriesForChart: []
};
}
componentDidMount() {
this.setState({
savedQueriesForChart: this.props.savedQueries
.filter(el => {
if (
ChartTypeUtils.getChartTypeOptions(el.query).includes(
this.props.type
) &&
el.metadata &&
el.metadata.display_name
) {
return el;
}
})
.map(el => ({
value: el.query_name,
label: el.metadata.display_name
}))
});
}
UNSAFE_componentWillReceiveProps(nextProps) {
if (
this.props.type !== nextProps.type ||
this.props.settingsVisible !== nextProps.settingsVisible
) {
this.setState({
savedQueriesForChart: nextProps.savedQueries
.filter(el => {
if (
ChartTypeUtils.getChartTypeOptions(el.query).includes(
nextProps.type
) &&
el.metadata &&
el.metadata.display_name
) {
return el;
}
})
.map(el => ({
value: el.query_name,
label: el.metadata.display_name
}))
});
}
}
selectSavedQuery = (query, id) => {
const { items } = this.props;
const item = items.find(item => item.i === id);
const index = item.i;
const loader = query.length ? index : false;
this.props.setLoading(loader);
this.props.selectSavedQuery(query, index);
};
render() {
const { savedQueriesForChart } = this.state;
const { index, value, type } = this.props;
return (
<div className="settings-select">
{savedQueriesForChart.length > 0 ? (
<Select
value={value || ''}
onChange={val => this.selectSavedQuery(val, index)}
options={savedQueriesForChart}
isMulti={type && (type.includes('area') || type.includes('line'))}
/>
) : (
<div className="save-query-message">
No saved queries found for this chart type...
</div>
)}
</div>
);
}
}
const mapStateToProps = state => {
const {
savedQueries,
settingsVisible,
dashboardInfo: {
settings: { items }
}
} = state.app;
return {
savedQueries,
settingsVisible,
items
};
};
const mapDispatchTopProsp = {
setLoading,
selectSavedQuery
};
export default connect(
mapStateToProps,
mapDispatchTopProsp
)(SavedQueriesSelect);