diff --git a/addons/web/static/src/views/pivot/pivot_model.js b/addons/web/static/src/views/pivot/pivot_model.js
index e631e35c150..475ce5bb6da 100644
--- a/addons/web/static/src/views/pivot/pivot_model.js
+++ b/addons/web/static/src/views/pivot/pivot_model.js
@@ -1518,7 +1518,7 @@ export class PivotModel extends Model {
const subTree = tree.directSubTrees.get(subTreeKey);
if (!oldTree.directSubTrees.has(subTreeKey)) {
subTree.directSubTrees.clear();
- delete subTreeKey.sortedKeys;
+ delete subTree.sortedKeys;
} else {
const oldSubTree = oldTree.directSubTrees.get(subTreeKey);
this._pruneTree(subTree, oldSubTree);
diff --git a/addons/web/static/tests/views/pivot_view_tests.js b/addons/web/static/tests/views/pivot_view_tests.js
index 6060f329cc9..9847b304245 100644
--- a/addons/web/static/tests/views/pivot_view_tests.js
+++ b/addons/web/static/tests/views/pivot_view_tests.js
@@ -3678,7 +3678,7 @@ QUnit.module("Views", (hooks) => {
'["Foo","Foo","Foo"]',
// origin headers
'["November 2016","December 2016","Variation","November 2016","December 2016"' +
- ',"Variation","November 2016","December 2016","Variation"]',
+ ',"Variation","November 2016","December 2016","Variation"]',
// number of 'measures'
"1",
// number of 'origins'
@@ -5611,6 +5611,46 @@ QUnit.module("Views", (hooks) => {
}
);
+ QUnit.test("filter -> sort -> unfilter should not crash", async function (assert) {
+ await makeView({
+ type: "pivot",
+ resModel: "partner",
+ serverData,
+ arch: `
+
+
+
+
+ `,
+ searchViewArch: `
+
+
+
+ `,
+ context: {
+ search_default_xphone: true,
+ },
+ });
+
+ assert.deepEqual(getFacetTexts(target), ["xphone"]);
+ assert.deepEqual(
+ [...target.querySelectorAll("tbody th")].map((el) => el.innerText),
+ ["Total", "xphone", "Yes"]
+ );
+ assert.strictEqual(getCurrentValues(target), ["1", "1", "1"].join());
+
+ await click(target, ".o_pivot_measure_row");
+ await toggleSearchBarMenu(target);
+ await toggleMenuItem(target, "xphone");
+
+ assert.deepEqual(getFacetTexts(target), []);
+ assert.deepEqual(
+ [...target.querySelectorAll("tbody th")].map((el) => el.innerText),
+ ["Total", "xphone", "Yes", "xpad"]
+ );
+ assert.strictEqual(getCurrentValues(target), ["4", "1", "1", "3"].join());
+ });
+
QUnit.test(
"no class 'o_view_sample_data' when real data are presented",
async function (assert) {