[dashboard] adding an option to duplicate slices when "Saving AS" (#3391)

* [dashboard] adding an option to duplicate slices when "Saving AS"

* Fix tests
This commit is contained in:
Maxime Beauchemin
2017-08-30 14:09:29 -07:00
committed by GitHub
parent 3b4cd812ae
commit e53f3032bb
10 changed files with 135 additions and 20 deletions

View File

@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
import { Button, FormControl, FormGroup, Radio } from 'react-bootstrap';
import { getAjaxErrorMsg } from '../../modules/utils';
import ModalTrigger from '../../components/ModalTrigger';
import Checkbox from '../../components/Checkbox';
const $ = window.$ = require('jquery');
@@ -20,13 +21,17 @@ class SaveModal extends React.PureComponent {
dashboard: props.dashboard,
css: props.css,
saveType: 'overwrite',
newDashName: '',
newDashName: props.dashboard.dashboard_title + ' [copy]',
duplicateSlices: false,
};
this.modal = null;
this.handleSaveTypeChange = this.handleSaveTypeChange.bind(this);
this.handleNameChange = this.handleNameChange.bind(this);
this.saveDashboard = this.saveDashboard.bind(this);
}
toggleDuplicateSlices() {
this.setState({ duplicateSlices: !this.state.duplicateSlices });
}
handleSaveTypeChange(event) {
this.setState({
saveType: event.target.value,
@@ -52,7 +57,7 @@ class SaveModal extends React.PureComponent {
saveModal.close();
dashboard.onSave();
if (saveType === 'newDashboard') {
window.location = '/superset/dashboard/' + resp.id + '/';
window.location = `/superset/dashboard/${resp.id}/`;
} else {
notify.success('This dashboard was saved successfully.');
}
@@ -81,10 +86,11 @@ class SaveModal extends React.PureComponent {
expanded_slices: expandedSlices,
dashboard_title: dashboard.dashboard_title,
default_filters: dashboard.readFilters(),
duplicate_slices: this.state.duplicateSlices,
};
let url = null;
if (saveType === 'overwrite') {
url = '/superset/save_dash/' + dashboard.id + '/';
url = `/superset/save_dash/${dashboard.id}/`;
this.saveDashboardRequest(data, url, saveType);
} else if (saveType === 'newDashboard') {
if (!newDashboardTitle) {
@@ -95,7 +101,7 @@ class SaveModal extends React.PureComponent {
});
} else {
data.dashboard_title = newDashboardTitle;
url = '/superset/copy_dash/' + dashboard.id + '/';
url = `/superset/copy_dash/${dashboard.id}/`;
this.saveDashboardRequest(data, url, saveType);
}
}
@@ -115,6 +121,7 @@ class SaveModal extends React.PureComponent {
>
Overwrite Dashboard [{this.props.dashboard.dashboard_title}]
</Radio>
<hr />
<Radio
value="newDashboard"
onChange={this.handleSaveTypeChange}
@@ -125,9 +132,17 @@ class SaveModal extends React.PureComponent {
<FormControl
type="text"
placeholder="[dashboard name]"
value={this.state.newDashName}
onFocus={this.handleNameChange}
onChange={this.handleNameChange}
/>
<div className="m-l-25 m-t-5">
<Checkbox
checked={this.state.duplicateSlices}
onChange={this.toggleDuplicateSlices.bind(this)}
/>
<span className="m-l-5">also copy (duplicate) slices</span>
</div>
</FormGroup>
}
modalFooter={