diff --git a/addons/spreadsheet/static/src/data_sources/odoo_views_data_source.js b/addons/spreadsheet/static/src/data_sources/odoo_views_data_source.js index b4bb96df099..ecbef2a98fe 100644 --- a/addons/spreadsheet/static/src/data_sources/odoo_views_data_source.js +++ b/addons/spreadsheet/static/src/data_sources/odoo_views_data_source.js @@ -3,25 +3,12 @@ import { LoadableDataSource } from "./data_source"; import { Domain } from "@web/core/domain"; import { LoadingDataError } from "@spreadsheet/o_spreadsheet/errors"; +import { omit } from "@web/core/utils/objects"; /** * @typedef {import("@spreadsheet/data_sources/metadata_repository").Field} Field */ -/** - * Remove user specific info from the context - * @param {Object} context - * @returns {Object} - */ -function removeContextUserInfo(context) { - context = { ...context }; - delete context.allowed_company_ids; - delete context.tz; - delete context.lang; - delete context.uid; - return context; -} - /** * @typedef {Object} OdooModelMetaData * @property {string} resModel @@ -41,9 +28,7 @@ export class OdooViewsDataSource extends LoadableDataSource { this._metaData = JSON.parse(JSON.stringify(params.metaData)); /** @protected */ this._initialSearchParams = JSON.parse(JSON.stringify(params.searchParams)); - this._initialSearchParams.context = removeContextUserInfo( - this._initialSearchParams.context - ); + this._initialSearchParams.context = omit(this._initialSearchParams.context || {}, ...Object.keys(this._orm.user.context)); /** @private */ this._customDomain = this._initialSearchParams.domain; } diff --git a/addons/spreadsheet/static/tests/lists/list_plugin_test.js b/addons/spreadsheet/static/tests/lists/list_plugin_test.js index d9311fa32d7..804136e286f 100644 --- a/addons/spreadsheet/static/tests/lists/list_plugin_test.js +++ b/addons/spreadsheet/static/tests/lists/list_plugin_test.js @@ -252,8 +252,6 @@ QUnit.module("spreadsheet > list plugin", {}, () => { QUnit.test("user context is combined with list context to fetch data", async function (assert) { const context = { allowed_company_ids: [15], - default_stage_id: 5, - search_default_stage_id: 5, tz: "bx", lang: "FR", uid: 4, diff --git a/addons/spreadsheet/static/tests/pivots/model/pivot_plugin_test.js b/addons/spreadsheet/static/tests/pivots/model/pivot_plugin_test.js index 9e7d4ac1676..b0e70a381cd 100644 --- a/addons/spreadsheet/static/tests/pivots/model/pivot_plugin_test.js +++ b/addons/spreadsheet/static/tests/pivots/model/pivot_plugin_test.js @@ -228,8 +228,6 @@ QUnit.module("spreadsheet > pivot plugin", {}, () => { async function (assert) { const context = { allowed_company_ids: [15], - default_stage_id: 5, - search_default_stage_id: 5, tz: "bx", lang: "FR", uid: 4, diff --git a/addons/web/static/src/core/utils/objects.js b/addons/web/static/src/core/utils/objects.js index e58acf12590..a8dfcdd8984 100644 --- a/addons/web/static/src/core/utils/objects.js +++ b/addons/web/static/src/core/utils/objects.js @@ -22,6 +22,25 @@ export function deepCopy(obj) { return JSON.parse(JSON.stringify(obj)); } +/** + * Returns a shallow copy of object with every property in properties removed + * if present in object. + * + * @param {Object} object + * @param {...string} properties + * @returns {Object} + */ +export function omit(object, ...properties) { + const result = {}; + const propertiesSet = new Set(properties); + for (const key in object) { + if (!propertiesSet.has(key)) { + result[key] = object[key]; + } + } + return result; +} + /** * @template {T} * @param {T} object diff --git a/addons/web/static/tests/core/utils/objects_tests.js b/addons/web/static/tests/core/utils/objects_tests.js index 5ead0b40bb6..64ef3277fd0 100644 --- a/addons/web/static/tests/core/utils/objects_tests.js +++ b/addons/web/static/tests/core/utils/objects_tests.js @@ -1,10 +1,19 @@ /** @odoo-module **/ -import { pick, shallowEqual } from "@web/core/utils/objects"; +import { omit, pick, shallowEqual } from "@web/core/utils/objects"; QUnit.module("utils", () => { QUnit.module("Objects"); + QUnit.test("omit", function (assert) { + assert.deepEqual(omit({}), {}); + assert.deepEqual(omit({}, "a"), {}); + assert.deepEqual(omit({ a: 1 }), { a: 1 }); + assert.deepEqual(omit({ a: 1 }, "a"), {}); + assert.deepEqual(omit({ a: 1, b: 2 }, "c", "a"), { b: 2 }); + assert.deepEqual(omit({ a: 1, b: 2 }, "b", "c"), { a: 1 }); + }); + QUnit.test("pick", function (assert) { assert.deepEqual(pick({}), {}); assert.deepEqual(pick({}, "a"), {});