diff --git a/addons/web/static/src/views/graph/graph_model.js b/addons/web/static/src/views/graph/graph_model.js index a784104520d..5fd8e1e745d 100644 --- a/addons/web/static/src/views/graph/graph_model.js +++ b/addons/web/static/src/views/graph/graph_model.js @@ -97,6 +97,7 @@ export class GraphModel extends Model { this.metaData = params; this.data = null; + this.searchParams = null; } //-------------------------------------------------------------------------- @@ -107,31 +108,11 @@ export class GraphModel extends Model { * @param {SearchParams} searchParams */ async load(searchParams) { - const { comparison, domain, context, groupBy } = searchParams; - const metaData = Object.assign({}, this.metaData, { context }); - if (comparison) { - metaData.domains = comparison.domains; - metaData.comparisonField = comparison.fieldName; - } else { - metaData.domains = [{ arrayRepr: domain, description: null }]; - } - metaData.measure = context.graph_measure || metaData.measure; - metaData.mode = context.graph_mode || metaData.mode; - + this.searchParams = searchParams; if (!this.initialGroupBy) { - this.initialGroupBy = context.graph_groupbys || this.metaData.groupBy; // = arch groupBy --> change that + this.initialGroupBy = searchParams.context.graph_groupbys || this.metaData.groupBy; // = arch groupBy --> change that } - metaData.groupBy = groupBy.length ? groupBy : this.initialGroupBy; - - this._normalize(metaData); - - metaData.measures = computeReportMeasures( - metaData.fields, - metaData.fieldAttrs, - [metaData.measure], - metaData.additionalMeasures - ); - + const metaData = this._buildMetaData(); return this._fetchDataPoints(metaData); } @@ -149,7 +130,8 @@ export class GraphModel extends Model { */ async updateMetaData(params) { if ("measure" in params) { - await this._fetchDataPoints(Object.assign({}, this.metaData, params)); + const metaData = this._buildMetaData(params); + await this._fetchDataPoints(metaData); } else { await this.race.getCurrentProm(); this.metaData = Object.assign({}, this.metaData, params); @@ -162,6 +144,37 @@ export class GraphModel extends Model { // Protected //-------------------------------------------------------------------------- + /** + * @protected + * @param {Object} [params={}] + * @returns {Object} + */ + _buildMetaData(params) { + const { comparison, domain, context, groupBy } = this.searchParams; + + const metaData = Object.assign({}, this.metaData, { context }); + if (comparison) { + metaData.domains = comparison.domains; + metaData.comparisonField = comparison.fieldName; + } else { + metaData.domains = [{ arrayRepr: domain, description: null }]; + } + metaData.measure = context.graph_measure || metaData.measure; + metaData.mode = context.graph_mode || metaData.mode; + metaData.groupBy = groupBy.length ? groupBy : this.initialGroupBy; + + this._normalize(metaData); + + metaData.measures = computeReportMeasures( + metaData.fields, + metaData.fieldAttrs, + [metaData.measure], + metaData.additionalMeasures + ); + + return Object.assign(metaData, params); + } + /** * Fetch the data points determined by the metaData. This function has * several side effects. It can alter this.metaData and set this.dataPoints. diff --git a/addons/web/static/tests/views/graph_view_tests.js b/addons/web/static/tests/views/graph_view_tests.js index 696b6ea6f38..76abb964ad3 100644 --- a/addons/web/static/tests/views/graph_view_tests.js +++ b/addons/web/static/tests/views/graph_view_tests.js @@ -3326,7 +3326,7 @@ QUnit.module("Views", (hooks) => { `, searchViewArch: ` - + `, mockRPC: function (route, args) { if (args.method === "web_read_group") { @@ -3363,7 +3363,7 @@ QUnit.module("Views", (hooks) => { await nextTick(); checkDatasets(assert, graph, ["data", "label"], { - data: [82, 157], + data: [82, 4], label: "Foo", }); }