/* eslint camelcase: 0 */ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { Modal, Alert, Button, Radio } from 'react-bootstrap'; import Select from 'react-select'; import { getExploreUrl } from '../exploreUtils'; import { t } from '../../locales'; const propTypes = { can_overwrite: PropTypes.bool, onHide: PropTypes.func.isRequired, actions: PropTypes.object.isRequired, form_data: PropTypes.object, user_id: PropTypes.string.isRequired, dashboards: PropTypes.array.isRequired, alert: PropTypes.string, slice: PropTypes.object, datasource: PropTypes.object, }; class SaveModal extends React.Component { constructor(props) { super(props); this.state = { saveToDashboardId: null, newDashboardName: '', newSliceName: '', dashboards: [], alert: null, action: props.can_overwrite ? 'overwrite' : 'saveas', addToDash: 'noSave', }; } componentDidMount() { this.props.actions.fetchDashboards(this.props.user_id); } onChange(name, event) { switch (name) { case 'newSliceName': this.setState({ newSliceName: event.target.value }); break; case 'saveToDashboardId': this.setState({ saveToDashboardId: event.value }); this.changeDash('existing'); break; case 'newDashboardName': this.setState({ newDashboardName: event.target.value }); break; default: break; } } changeAction(action) { this.setState({ action }); } changeDash(dash) { this.setState({ addToDash: dash }); } saveOrOverwrite(gotodash) { this.setState({ alert: null }); this.props.actions.removeSaveModalAlert(); const sliceParams = {}; let sliceName = null; sliceParams.action = this.state.action; if (this.props.slice && this.props.slice.slice_id) { sliceParams.slice_id = this.props.slice.slice_id; } if (sliceParams.action === 'saveas') { sliceName = this.state.newSliceName; if (sliceName === '') { this.setState({ alert: t('Please enter a slice name') }); return; } sliceParams.slice_name = sliceName; } else { sliceParams.slice_name = this.props.slice.slice_name; } const addToDash = this.state.addToDash; sliceParams.add_to_dash = addToDash; let dashboard = null; switch (addToDash) { case ('existing'): dashboard = this.state.saveToDashboardId; if (!dashboard) { this.setState({ alert: t('Please select a dashboard') }); return; } sliceParams.save_to_dashboard_id = dashboard; break; case ('new'): dashboard = this.state.newDashboardName; if (dashboard === '') { this.setState({ alert: t('Please enter a dashboard name') }); return; } sliceParams.new_dashboard_name = dashboard; break; default: dashboard = null; } sliceParams.goto_dash = gotodash; const saveUrl = getExploreUrl(this.props.form_data, 'base', false, null, sliceParams); this.props.actions.saveSlice(saveUrl) .then((data) => { // Go to new slice url or dashboard url if (gotodash) { window.location = data.dashboard; } else { window.location = data.slice.slice_url; } }); this.props.onHide(); } removeAlert() { if (this.props.alert) { this.props.actions.removeSaveModalAlert(); } this.setState({ alert: null }); } render() { return ( {t('Save A Slice')} {(this.state.alert || this.props.alert) && {this.state.alert ? this.state.alert : this.props.alert} } {this.props.slice && {t('Overwrite slice %s', this.props.slice.slice_name)} } {t('Save as')}  

{t('Do not add to a dashboard')} {t('Add slice to existing dashboard')}
); } } SaveModal.propTypes = propTypes; function mapStateToProps({ explore, saveModal }) { return { datasource: explore.datasource, slice: explore.slice, can_overwrite: explore.can_overwrite, user_id: explore.user_id, dashboards: saveModal.dashboards, alert: saveModal.saveModalAlert, }; } export { SaveModal }; export default connect(mapStateToProps, () => ({}))(SaveModal);