src/pyams_content/shared/common/zmi/search.py
changeset 1407 85e615286c7a
parent 1405 a123fc2a6f69
child 1408 916c81459d6b
--- a/src/pyams_content/shared/common/zmi/search.py	Fri Jul 17 09:02:17 2020 +0200
+++ b/src/pyams_content/shared/common/zmi/search.py	Sun Jul 19 02:10:25 2020 +0200
@@ -13,6 +13,7 @@
 from hypatia.catalog import CatalogQuery
 from hypatia.interfaces import ICatalog
 from hypatia.query import Any, Contains, Eq, Ge, Le
+from pyramid.decorator import reify
 from pyramid.view import view_config
 from z3c.form import field
 from z3c.table.interfaces import IValues
@@ -31,6 +32,7 @@
 from pyams_content.shared.common.interfaces.types import DATA_TYPES_VOCABULARY, ITypedSharedTool
 from pyams_content.shared.common.interfaces.zmi import ISharedToolDashboardTable
 from pyams_content.zmi.interfaces import IAllContentsMenu
+from pyams_form.interfaces.form import ISearchFormFactory, ISearchFormResultsFactory
 from pyams_form.search import ISearchFields, SearchForm, SearchResultsView, SearchView
 from pyams_i18n.interfaces import INegotiator
 from pyams_pagelet.interfaces import PageletCreatedEvent
@@ -220,10 +222,12 @@
         request.registry.notify(PageletCreatedEvent(self))
         apply_skin(self.request, 'PyAMS admin skin')
 
+    fields_interface = ISharedToolAdvancedSearchFields
+
     @property
     def fields(self):
         workflow = IWorkflow(self.context)
-        fields = field.Fields(ISharedToolAdvancedSearchFields)
+        fields = field.Fields(self.fields_interface)
         fields['status'].vocabulary = workflow.states
         if not ITypedSharedTool.providedBy(self.context):
             fields = fields.omit('data_type')
@@ -352,6 +356,17 @@
         super(SharedToolAdvancedSearchResultsView, self).__init__(context, request)
         request.registry.notify(PageletCreatedEvent(self))
 
+    @reify
+    def search_form(self):
+        form = self.request.registry.queryMultiAdapter((self.context, self.request, self),
+                                                       ISearchFormResultsFactory)
+        if form is None:
+            form = self.request.registry.queryMultiAdapter((self.context, self.request, self),
+                                                           ISearchFormFactory)
+        if form is None:
+            form = self.search_form_factory(self.context, self.request)
+        return form
+
     @property
     def data_attributes(self):
         attributes = super(SharedToolAdvancedSearchResultsView, self).data_attributes
@@ -371,5 +386,4 @@
 
     @property
     def values(self):
-        form = self.view.search_form_factory(self.context, self.request)
-        return form.get_search_results() or ()
+        return self.view.search_form.get_search_results() or ()