From 95ed3e60edda0af49b4a21b4c2df57b136e292a6 Mon Sep 17 00:00:00 2001 From: Arif Waram Date: Fri, 31 Jul 2026 14:24:53 +0700 Subject: [PATCH] [IMP] web_group_expand: disable buttons when they would be a no-op Disable the expand button when all groups are already expanded, and the compress button when all groups are already collapsed, so the buttons reflect whether clicking them would have any effect. --- web_group_expand/readme/CONTRIBUTORS.md | 1 + web_group_expand/readme/DESCRIPTION.md | 4 ++++ .../static/src/js/list_controller.esm.js | 16 ++++++++++++++++ .../static/src/xml/list_controller.xml | 2 ++ 4 files changed, 23 insertions(+) diff --git a/web_group_expand/readme/CONTRIBUTORS.md b/web_group_expand/readme/CONTRIBUTORS.md index 46e5537110e4..80bedd2be2f1 100644 --- a/web_group_expand/readme/CONTRIBUTORS.md +++ b/web_group_expand/readme/CONTRIBUTORS.md @@ -8,3 +8,4 @@ - Mayank Patel \<\> - [360ERP](https://www.360erp.com): - Andrea Stirpe +- Arif Waram \<\> diff --git a/web_group_expand/readme/DESCRIPTION.md b/web_group_expand/readme/DESCRIPTION.md index 7255e7128368..c3c352a66d27 100644 --- a/web_group_expand/readme/DESCRIPTION.md +++ b/web_group_expand/readme/DESCRIPTION.md @@ -4,3 +4,7 @@ or collapse all the groups at once. The buttons appear in the top right, in place of the pagination. One level of groups is expanded or collapsed at a time. + +The buttons are disabled when they would have no effect: the expand +button when all groups are already expanded, and the collapse button +when all groups are already collapsed. diff --git a/web_group_expand/static/src/js/list_controller.esm.js b/web_group_expand/static/src/js/list_controller.esm.js index aea3acfe7aa3..f84127700396 100644 --- a/web_group_expand/static/src/js/list_controller.esm.js +++ b/web_group_expand/static/src/js/list_controller.esm.js @@ -8,6 +8,22 @@ function flatten(arr) { } patch(ListController.prototype, { + get allGroupsExpanded() { + let layer = this.model.root.groups || []; + while (layer.length) { + if (layer.some((group) => group._config.isFolded)) { + return false; + } + layer = layer.flatMap((group) => group.list.groups || []); + } + return true; + }, + + get allGroupsCollapsed() { + const groups = this.model.root.groups || []; + return groups.every((group) => group._config.isFolded); + }, + async expandAllGroups() { // We expand layer by layer. So first we need to find the highest // layer that's not already fully expanded. diff --git a/web_group_expand/static/src/xml/list_controller.xml b/web_group_expand/static/src/xml/list_controller.xml index 743b8aa35c51..b7e67c6e96d8 100644 --- a/web_group_expand/static/src/xml/list_controller.xml +++ b/web_group_expand/static/src/xml/list_controller.xml @@ -8,6 +8,7 @@ class="btn btn-secondary fa fa-expand oe_group_by_expand" data-tooltip="Expand" aria-label="Expand" + t-att-disabled="allGroupsExpanded" t-on-click="expandAllGroups" />