Skip to content
Snippets Groups Projects
Commit 0ed2e4f2 authored by Atte Keinänen's avatar Atte Keinänen Committed by GitHub
Browse files

Merge pull request #4943 from metabase/improve-dashboard-performance

Improve dashboard performance
parents 8db06675 7c50fc1e
No related branches found
No related tags found
No related merge requests found
......@@ -25,16 +25,24 @@ export default class Header extends Component {
};
}
componentDidMount() {
this.componentDidUpdate();
componentDidMount() {
this.updateHeaderHeight();
}
componentWillUpdate() {
const modalIsOpen = !!this.props.headerModalMessage;
if (modalIsOpen) {
this.updateHeaderHeight()
}
}
componentDidUpdate() {
if (this.refs.header) {
const rect = ReactDOM.findDOMNode(this.refs.header).getBoundingClientRect();
const headerHeight = rect.top + getScrollY();
if (this.state.headerHeight !== headerHeight) {
this.setState({ headerHeight });
}
updateHeaderHeight() {
if (!this.refs.header) return;
const rect = ReactDOM.findDOMNode(this.refs.header).getBoundingClientRect();
const headerHeight = rect.top + getScrollY();
if (this.state.headerHeight !== headerHeight) {
this.setState({ headerHeight });
}
}
......
......@@ -64,10 +64,6 @@ export default class DashboardGrid extends Component {
isEditingParameter: false
};
shouldComponentUpdate(nextProps, nextState) {
return !(_.isEqual(this.props, nextProps) && _.isEqual(this.state, nextState));
}
componentWillReceiveProps(nextProps) {
this.setState({
dashcards: this.getSortedDashcards(nextProps),
......
......@@ -157,7 +157,7 @@ export default class DashboardHeader extends Component<*, Props, State> {
>
<ArchiveDashboardModal
dashboard={this.props.dashboard}
onClose={() => this.refs.ArchiveDashboardModal.toggle()}
onClose={() => this.refs.archiveDashboardModal.toggle()}
onArchive={() => this.onArchive()}
/>
</ModalWithTrigger>,
......
/* @flow weak */
import _ from "underscore";
import { updateIn, setIn } from "icepick";
import { setIn } from "icepick";
import { createSelector } from 'reselect';
......@@ -109,9 +109,13 @@ export const getMappingsByParameter = createSelector(
const fieldId = card && getParameterTargetFieldId(mapping.target, card.dataset_query);
const field = metadata.field(fieldId);
const values = field && field.values() || [];
if (values.length) {
countsByParameter[mapping.parameter_id] = countsByParameter[mapping.parameter_id] || {};
}
for (const value of values) {
countsByParameter = updateIn(countsByParameter, [mapping.parameter_id, value], (count = 0) => count + 1)
countsByParameter[mapping.parameter_id][value] = (countsByParameter[mapping.parameter_id][value] || 0) + 1
}
let augmentedMapping: AugmentedParameterMapping = {
...mapping,
parameter_id: mapping.parameter_id,
......@@ -130,7 +134,7 @@ export const getMappingsByParameter = createSelector(
if (mapping.values && mapping.values.length > 0) {
let overlapMax = Math.max(...mapping.values.map(value => countsByParameter[mapping.parameter_id][value]))
mappingsByParameter = setIn(mappingsByParameter, [mapping.parameter_id, mapping.dashcard_id, mapping.card_id, "overlapMax"], overlapMax);
mappingsWithValuesByParameter = updateIn(mappingsWithValuesByParameter, [mapping.parameter_id], (count = 0) => count + 1);
mappingsWithValuesByParameter[mapping.parameter_id] = (mappingsWithValuesByParameter[mapping.parameter_id] || 0) + 1;
}
}
// update count of mappings with values
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment