From 052761c7b2b3b0e49ab8e146c72a74dd329997db Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Sat, 30 Aug 2025 14:45:46 +0300 Subject: [PATCH] =?UTF-8?q?=D8=A5=D8=B5=D9=84=D8=A7=D8=AD=20=D9=85=D8=B4?= =?UTF-8?q?=D9=83=D9=84=D8=A9=20=D9=81=D9=82=D8=AF=D8=A7=D9=86=20=D9=82?= =?UTF-8?q?=D9=8A=D9=85=D8=A9=20=D8=AD=D9=82=D9=84=20=D8=A7=D9=84=D8=A8?= =?UTF-8?q?=D8=AD=D8=AB=20=D8=B9=D9=86=D8=AF=20=D8=A7=D9=84=D9=80=20reload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit المشكلة: كان حقل البحث يفقد قيمته وعداد السجلات يختفي بعد تنفيذ البحث الحل: - حفظ حالة البحث في الـ Controller - استعادة القيمة والعداد عند إعادة رسم الـ Renderer - إضافة دالة _restoreSearchState للحفاظ على القيم - تعديل _addCustomSearchBox لاستخدام القيم المحفوظة - منع فقدان البيانات عند reload --- .../static/src/js/list_search.js | 56 +++++++++++++++++-- 1 file changed, 51 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 188528e9c..2678a0ffb 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 @@ -170,7 +170,8 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { self._customSearchState.isFiltered = true; self._customSearchState.value = value; - // Trigger update to renderer + // Trigger update to renderer WITHOUT reload + // This maintains the search box value return self.update({}, {reload: false}); }).then(function() { console.log('Search applied successfully'); @@ -509,11 +510,39 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { if (self._shouldAddSearchBox()) { self._addCustomSearchBox(); self._customSearchReady = true; + + // Restore search state after render + self._restoreSearchState(); } return result; }); }, + /** + * Restore search state after render + */ + _restoreSearchState: function() { + var controller = this.getParent(); + if (controller && controller._customSearchState) { + var state = controller._customSearchState; + + // Restore search input value + if (state.value) { + this.$('.oe_search_input').val(state.value); + this.$('.oe_clear_search').show(); + } + + // Restore count display + if (state.isFiltered && state.filteredCount >= 0) { + var message = _t('Found: ') + state.filteredCount + _t(' records'); + this.$('.oe_search_count') + .text(message) + .removeClass('text-danger') + .show(); + } + } + }, + /** * Check if we should add search box */ @@ -529,16 +558,31 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { * Add search box UI */ _addCustomSearchBox: function() { + // Check if already exists or if we have a saved state + var controller = this.getParent(); + var savedValue = ''; + var savedCount = 0; + var isFiltered = false; + + if (controller && controller._customSearchState) { + savedValue = controller._customSearchState.value || ''; + savedCount = controller._customSearchState.filteredCount || 0; + isFiltered = controller._customSearchState.isFiltered || false; + } + var html = '
' + '' + - '' + - '' + + '' + + (isFiltered ? _t('Found: ') + savedCount + _t(' records') : '') + + '' + '' + @@ -546,8 +590,10 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { this.$el.prepend($(html)); - // Focus on search input - this.$('.oe_search_input').focus(); + // Focus on search input if it has value + if (savedValue) { + this.$('.oe_search_input').focus(); + } }, /**