From 967ac6902b8b4029777c06b57554a1f9b6fc22cc Mon Sep 17 00:00:00 2001
From: Tristan Cavelier <tristan.cavelier@nexedi.com>
Date: Thu, 14 Feb 2019 15:00:26 +0000
Subject: [PATCH] [erp5_web_renderjs_ui] allow filter editor to select searched
 unknown column ids

- local_roles: ( Assignee OR Assignor ) AND other_unknown_id: value

    [All criterions (AND)_______ v]
    [-][local_roles_____________ v] -> |Type             |  -.
       [Equal to (at least one)_ v]    |Modification Date|   :
       [Assignee________________  ]    |Title            |   :
       [Assignor________________  ]    |Reference        |   :
       [________________________  ]    |Description      |   : search_column_list
                                       |State            |   :
    [-][other_unknown_id________ v]    |Searchable Text  |   :
       [Equal to________________ v]    |Search Expression|  -'
       [value___________________  ]    |local_roles      |  -.
                                       |other_unknown_id |  -' additional_search_column_list
---
 .../rjs_gadget_erp5_searcheditor_js.js        | 41 +++++++++++++++----
 .../rjs_gadget_erp5_searcheditor_js.xml       |  4 +-
 .../testFilterMultiValuedOperator.zpt         |  6 +--
 .../testFilterUnknownDomain.zpt               |  2 +-
 .../testFilterUnknownKey.zpt                  |  8 +++-
 5 files changed, 44 insertions(+), 17 deletions(-)

diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.js
index e011b6dad1..a29a852309 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.js
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.js
@@ -427,7 +427,16 @@
         sub_jio_query_detail_dict,
         search_column_list = [],
         search_column_dict = {},
-        search_domain_dict = {};
+        search_domain_dict = {},
+        additional_search_column_list = [],
+        additional_search_column_dict = {};
+
+      function addAdditionalSearchColumn(key, prefixed_key, title) {
+        if (additional_search_column_dict.hasOwnProperty(key)) { return false; }
+        additional_search_column_dict[key] = true;
+        additional_search_column_list.push([prefixed_key, title]);
+        return true;
+      }
 
       len = options.search_column_list.length;
       for (i = 0; i < len; i += 1) {
@@ -477,9 +486,15 @@
                 operator: jio_query.operator
               });
             } else {
+              addAdditionalSearchColumn(
+                jio_query.key,
+                PREFIX_COLUMN + jio_query.key,
+                jio_query.key
+              );
               query_list.push({
-                key: PREFIX_RAW,
-                value: Query.objectToSearchText(jio_query)
+                key: PREFIX_COLUMN + jio_query.key,
+                value: jio_query.value,
+                operator: jio_query.operator
               });
             }
           } else {
@@ -520,9 +535,15 @@
                     operator: sub_jio_query.operator
                   });
                 } else {
+                  addAdditionalSearchColumn(
+                    sub_jio_query.key,
+                    PREFIX_COLUMN + sub_jio_query.key,
+                    sub_jio_query.key
+                  );
                   query_list.push({
-                    key: PREFIX_RAW,
-                    value: Query.objectToSearchText(sub_jio_query)
+                    key: PREFIX_COLUMN + sub_jio_query.key,
+                    value: sub_jio_query.value,
+                    operator: sub_jio_query.operator
                   });
                 }
               } else {
@@ -535,8 +556,12 @@
               sub_jio_query_dict = sub_jio_query.toJSON();
               sub_jio_query_detail_dict =
                 detectAtleastoneexactmatchComplexQuery(sub_jio_query_dict);
-              if (sub_jio_query_detail_dict &&
-                  search_column_dict.hasOwnProperty(sub_jio_query_detail_dict.key)) {
+              if (sub_jio_query_detail_dict) {
+                addAdditionalSearchColumn(
+                  sub_jio_query_detail_dict.key,
+                  PREFIX_COLUMN + sub_jio_query_detail_dict.key,
+                  sub_jio_query_detail_dict.key
+                );
                 querySetKeyInDeep(
                   sub_jio_query_dict,
                   PREFIX_COLUMN + sub_jio_query_detail_dict.key
@@ -559,7 +584,7 @@
       }
 
       return this.changeState({
-        search_column_list: search_column_list,
+        search_column_list: search_column_list.concat(additional_search_column_list),
         begin_from_key: options.begin_from,
         // [{key: 'title', value: 'Foo', operator: 'like'}]
         query_list: query_list,
diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.xml
index e6c9c78be5..5be3869467 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.xml
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_searcheditor_js.xml
@@ -228,7 +228,7 @@
             </item>
             <item>
                 <key> <string>serial</string> </key>
-                <value> <string>973.42226.24018.7099</string> </value>
+                <value> <string>974.50067.21616.14233</string> </value>
             </item>
             <item>
                 <key> <string>state</string> </key>
@@ -246,7 +246,7 @@
                     </tuple>
                     <state>
                       <tuple>
-                        <float>1550070921.26</float>
+                        <float>1554214739.75</float>
                         <string>UTC</string>
                       </tuple>
                     </state>
diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterMultiValuedOperator.zpt b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterMultiValuedOperator.zpt
index ee65a0875f..fbcba274ca 100644
--- a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterMultiValuedOperator.zpt
+++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterMultiValuedOperator.zpt
@@ -42,11 +42,7 @@
   <td>&#36;{base_url}/web_site_module/renderjs_runner/#/bar_module</td>
   <td></td>
 </tr>
-<tr>
-  <td>waitForElementPresent</td>
-  <td>//a[@data-i18n='Previous']</td>
-  <td></td>
-</tr>
+<tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/wait_for_listbox_loaded" />
 
 <!-- Prepare panel with a multi-valued operator  -->
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/triggle_filter_and" />
diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownDomain.zpt b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownDomain.zpt
index cca3bcfa18..1e5f4a7d8e 100644
--- a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownDomain.zpt
+++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownDomain.zpt
@@ -50,7 +50,7 @@
 
 <!-- Open the panel and submit it. Check that the new query string is not to much changed -->
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/triggle_filter_and" />
-<tal:block tal:define="filter_section_configuration python: {'key': 'RAW', 'value': 'selection_domain_bar_domain: &nbsp;&#34;a&#34;', 'index': 0}">
+<tal:block tal:define="filter_section_configuration python: {'key': 'COLUMN_selection_domain_bar_domain', 'value': 'a', 'index': 0}">
   <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_filter_section" />
 </tal:block>
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_filter" />
diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownKey.zpt b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownKey.zpt
index 89b62bc203..c793632679 100644
--- a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownKey.zpt
+++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_listbox_zuite/testFilterUnknownKey.zpt
@@ -50,7 +50,7 @@
 
 <!-- Open the panel and submit it. Check that the new query string is not to much changed -->
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/triggle_filter_and" />
-<tal:block tal:define="filter_section_configuration python: {'key': 'RAW', 'value': 'foo: &nbsp;&#34;31085&#34;', 'index': 0}">
+<tal:block tal:define="filter_section_configuration python: {'key': 'COLUMN_foo', 'value': '31085', 'index': 0}">
   <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_filter_section" />
 </tal:block>
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/submit_filter" />
@@ -100,6 +100,12 @@
 
 
 <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/triggle_filter_and" />
+<tal:block tal:define="filter_section_configuration python: {'key': 'COLUMN_bar', 'value': '31084', 'index': 0}">
+  <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_filter_section" />
+</tal:block>
+<tal:block tal:define="filter_section_configuration python: {'key': 'COLUMN_foo', 'value': ['31085', '31086'], 'index': 1}">
+  <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/check_filter_section" />
+</tal:block>
 <tal:block tal:define="filter_section_configuration python: {'index': 1}">
   <tal:block metal:use-macro="here/Zuite_CommonTemplateForRenderjsUi/macros/remove_filter_section" />
 </tal:block>
-- 
2.30.9