🎯 [FIX] Exclude search box from Many2Many/One2Many fields within forms

- 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
This commit is contained in:
Mohamed Eltayar 2025-08-30 20:33:23 +03:00
parent 36cde35237
commit 2331f74a23
1 changed files with 48 additions and 5 deletions

View File

@ -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() {