/* eslint camelcase: 0 */ import React from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { Alert } from 'react-bootstrap'; import { sectionsToRender, visTypes } from '../stores/visTypes'; import ControlPanelSection from './ControlPanelSection'; import ControlRow from './ControlRow'; import Control from './Control'; import controls from '../stores/controls'; import * as actions from '../actions/exploreActions'; const propTypes = { actions: PropTypes.object.isRequired, alert: PropTypes.string, datasource_type: PropTypes.string.isRequired, exploreState: PropTypes.object.isRequired, controls: PropTypes.object.isRequired, form_data: PropTypes.object.isRequired, isDatasourceMetaLoading: PropTypes.bool.isRequired, }; class ControlPanelsContainer extends React.Component { constructor(props) { super(props); this.removeAlert = this.removeAlert.bind(this); this.getControlData = this.getControlData.bind(this); } getControlData(controlName) { // Identifying mapStateToProps function to apply (logic can't be in store) let mapF = controls[controlName].mapStateToProps; // Looking to find mapStateToProps override for this viz type const controlOverrides = visTypes[this.props.controls.viz_type.value].controlOverrides || {}; if (controlOverrides[controlName] && controlOverrides[controlName].mapStateToProps) { mapF = controlOverrides[controlName].mapStateToProps; } // Applying mapStateToProps if needed if (mapF) { return Object.assign({}, this.props.controls[controlName], mapF(this.props.exploreState)); } return this.props.controls[controlName]; } sectionsToRender() { return sectionsToRender(this.props.form_data.viz_type, this.props.datasource_type); } removeAlert() { this.props.actions.removeControlPanelAlert(); } render() { return (
{this.props.alert && {this.props.alert} } {this.sectionsToRender().map(section => ( {section.controlSetRows.map((controlSets, i) => ( ( controlName && ))} /> ))} ))}
); } } ControlPanelsContainer.propTypes = propTypes; function mapStateToProps(state) { return { alert: state.controlPanelAlert, isDatasourceMetaLoading: state.isDatasourceMetaLoading, controls: state.controls, exploreState: state, }; } function mapDispatchToProps(dispatch) { return { actions: bindActionCreators(actions, dispatch), }; } export { ControlPanelsContainer }; export default connect(mapStateToProps, mapDispatchToProps)(ControlPanelsContainer);