diff -r a568b9d2f7dd -r 85e615286c7a src/pyams_content/shared/common/zmi/search.py --- 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 ()