/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { toggleExpandSlice, setFocusedFilterField, unsetFocusedFilterField, } from '../actions/dashboardState'; import { updateComponents } from '../actions/dashboardLayout'; import { changeFilter } from '../actions/dashboardFilters'; import { addDangerToast } from '../../messageToasts/actions'; import { refreshChart } from '../../chart/chartAction'; import { logEvent } from '../../logger/actions'; import { getActiveFilters, getAppliedFilterValues, } from '../util/activeDashboardFilters'; import getFormDataWithExtraFilters from '../util/charts/getFormDataWithExtraFilters'; import Chart from '../components/gridComponents/Chart'; const EMPTY_FILTERS = {}; function mapStateToProps( { charts: chartQueries, dashboardInfo, dashboardState, dashboardLayout, datasources, sliceEntities, nativeFilters, }, ownProps, ) { const { id } = ownProps; const chart = chartQueries[id] || {}; const datasource = (chart && chart.form_data && datasources[chart.form_data.datasource]) || {}; const { colorScheme, colorNamespace } = dashboardState; // note: this method caches filters if possible to prevent render cascades const formData = getFormDataWithExtraFilters({ layout: dashboardLayout.present, chart, filters: getAppliedFilterValues(id), colorScheme, colorNamespace, sliceId: id, nativeFilters, }); formData.dashboardId = dashboardInfo.id; return { chart, datasource, slice: sliceEntities.slices[id], timeout: dashboardInfo.common.conf.SUPERSET_WEBSERVER_TIMEOUT, filters: getActiveFilters() || EMPTY_FILTERS, formData, editMode: dashboardState.editMode, isExpanded: !!dashboardState.expandedSlices[id], supersetCanExplore: !!dashboardInfo.superset_can_explore, supersetCanCSV: !!dashboardInfo.superset_can_csv, sliceCanEdit: !!dashboardInfo.slice_can_edit, }; } function mapDispatchToProps(dispatch) { return bindActionCreators( { updateComponents, addDangerToast, toggleExpandSlice, changeFilter, setFocusedFilterField, unsetFocusedFilterField, refreshChart, logEvent, }, dispatch, ); } export default connect(mapStateToProps, mapDispatchToProps)(Chart);