import React from 'react'; import PropTypes from 'prop-types'; import { chartPropType } from '../../chart/chartReducer'; import ExploreActionButtons from './ExploreActionButtons'; import EditableTitle from '../../components/EditableTitle'; import FaveStar from '../../components/FaveStar'; import TooltipWrapper from '../../components/TooltipWrapper'; import Timer from '../../components/Timer'; import { getExploreUrl } from '../exploreUtils'; import CachedLabel from '../../components/CachedLabel'; import { t } from '../../locales'; const CHART_STATUS_MAP = { failed: 'danger', loading: 'warning', success: 'success', }; const propTypes = { actions: PropTypes.object.isRequired, can_overwrite: PropTypes.bool.isRequired, can_download: PropTypes.bool.isRequired, isStarred: PropTypes.bool.isRequired, slice: PropTypes.object, table_name: PropTypes.string, form_data: PropTypes.object, timeout: PropTypes.number, chart: PropTypes.shape(chartPropType), }; class ExploreChartHeader extends React.PureComponent { runQuery() { this.props.actions.runQuery(this.props.form_data, true, this.props.timeout, this.props.chart.chartKey); } updateChartTitleOrSaveSlice(newTitle) { const isNewSlice = !this.props.slice; const params = { slice_name: newTitle, action: isNewSlice ? 'saveas' : 'overwrite', }; const saveUrl = getExploreUrl(this.props.form_data, 'base', false, null, params); this.props.actions.saveSlice(saveUrl) .then((data) => { if (isNewSlice) { this.props.actions.createNewSlice( data.can_add, data.can_download, data.can_overwrite, data.slice, data.form_data); } else { this.props.actions.updateChartTitle(newTitle); } }); } renderChartTitle() { let title; if (this.props.slice) { title = this.props.slice.slice_name; } else { title = t('%s - untitled', this.props.table_name); } return title; } render() { const queryResponse = this.props.chart.queryResponse; const data = { csv_endpoint: getExploreUrl(this.props.form_data, 'csv'), json_endpoint: getExploreUrl(this.props.form_data, 'json'), standalone_endpoint: getExploreUrl(this.props.form_data, 'standalone'), }; return (
{this.props.slice && }
{this.props.chart.chartStatus === 'success' && queryResponse && queryResponse.is_cached && }
); } } ExploreChartHeader.propTypes = propTypes; export default ExploreChartHeader;