From 2331f74a23af5f6b99d266a589db1f4d1b03ca8a Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Sat, 30 Aug 2025 20:33:23 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=AF=20[FIX]=20Exclude=20search=20box?= =?UTF-8?q?=20from=20Many2Many/One2Many=20fields=20within=20forms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Enhanced _shouldAddSearchBox logic to detect relational field contexts - Added comprehensive DOM traversal to identify form-embedded lists - Prevents search box appearance in o_field_widget, o_field_many2many, o_field_one2many - Maintains search functionality for standalone list views only - Added size-based filtering for small embedded lists - Preserves all existing functionality for main list views --- .../static/src/js/list_search.js | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js b/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js index 431b91e72..93bad4ea9 100644 --- a/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js +++ b/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js @@ -390,11 +390,54 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { }, _shouldAddSearchBox: function() { - return this.arch && - this.arch.tag === 'tree' && - this.$el && - this.$el.hasClass('o_list_view') && - !this.$el.find('.oe_search_container').length; + // Basic requirements check + if (!this.arch || + this.arch.tag !== 'tree' || + !this.$el || + !this.$el.hasClass('o_list_view') || + this.$el.find('.oe_search_container').length > 0) { + return false; + } + + // Check if this is inside a relational field (Many2Many/One2Many) + // Look for parent containers that indicate we're inside a form field + var $parent = this.$el.parent(); + + // Check for various indicators that we're inside a relational field + while ($parent.length > 0) { + // Check if parent has classes that indicate it's a field widget + if ($parent.hasClass('o_field_widget') || + $parent.hasClass('o_field_many2many') || + $parent.hasClass('o_field_one2many') || + $parent.hasClass('o_field_x2many_list') || + $parent.hasClass('o_x2many_control_panel') || + $parent.attr('name') && $parent.closest('.o_form_view').length > 0) { + return false; // Don't show search box in relational fields + } + + // Check if we're inside a form view (not a standalone list view) + if ($parent.hasClass('o_form_view') && + this.$el.closest('.o_content').find('.o_form_view').length > 0) { + return false; // Don't show in embedded lists within forms + } + + // Stop at main content area + if ($parent.hasClass('o_content') || + $parent.hasClass('o_action_manager') || + $parent.hasClass('o_main_content')) { + break; + } + + $parent = $parent.parent(); + } + + // Additional check: if the list is very small (likely embedded), don't show + if (this.$el.find('tbody tr').length <= 5 && + this.$el.closest('.o_form_view').length > 0) { + return false; + } + + return true; // Show search box for standalone list views }, _addCustomSearchBox: function() {