diff --git a/Resources/public/js/views/universaldiscovery/ez-universaldiscoverysearchview.js b/Resources/public/js/views/universaldiscovery/ez-universaldiscoverysearchview.js
index 8e3d66351..6b1bc1d49 100644
--- a/Resources/public/js/views/universaldiscovery/ez-universaldiscoverysearchview.js
+++ b/Resources/public/js/views/universaldiscovery/ez-universaldiscoverysearchview.js
@@ -24,7 +24,8 @@ YUI.add('ez-universaldiscoverysearchview', function (Y) {
},
IS_SELECTED_ROW_CLASS = 'is-selected',
IS_PAGE_LOADING = 'is-page-loading',
- IS_DISABLED = 'is-disabled';
+ IS_DISABLED = 'is-disabled',
+ NO_SEARCH_COUNT = -1;
function linkIsDisabled(link) {
return link.hasClass(IS_DISABLED);
@@ -43,10 +44,15 @@ YUI.add('ez-universaldiscoverysearchview', function (Y) {
Y.eZ.UniversalDiscoveryMethodBaseView, [Y.eZ.AsynchronousView], {
initializer: function () {
this._fireMethod = this._fireLocationSearch;
- this._watchAttribute = 'searchResultList';
this._addDOMEventHandlers(events);
+ this.after('searchResultCountChange', function () {
+ if ( this.get('searchResultCount') !== NO_SEARCH_COUNT ) {
+ this.render();
+ }
+ });
+
this.on('searchResultListChange', this._searchResultChanged);
this.on('selectContent', this._uiSelectContent);
@@ -151,6 +157,7 @@ YUI.add('ez-universaldiscoverysearchview', function (Y) {
var searchText = this.get('searchText');
this._uiPageLoading();
+ this.reset('searchResultCount');
if (searchText.length > 0) {
this.fire('locationSearch', {
@@ -181,9 +188,6 @@ YUI.add('ez-universaldiscoverysearchview', function (Y) {
* @return undefined|Array
*/
_convertToJSONList: function () {
- if ( !this.get('searchResultList') ) {
- return this.get('searchResultList');
- }
return Y.Array.map(this.get('searchResultList'), function (locationStruct) {
return {
location: locationStruct.location.toJSON(),
@@ -482,14 +486,15 @@ YUI.add('ez-universaldiscoverysearchview', function (Y) {
},
/**
- * The number of total search results.
+ * The number of total search results. -1 means we are waiting for
+ * the results.
*
* @attribute searchResultCount
- * @default 0
+ * @default -1
* @type Number
*/
searchResultCount: {
- value: 0
+ value: NO_SEARCH_COUNT,
},
/**
diff --git a/Resources/public/templates/universaldiscovery/search.hbt b/Resources/public/templates/universaldiscovery/search.hbt
index 1819e780f..cdd383850 100644
--- a/Resources/public/templates/universaldiscovery/search.hbt
+++ b/Resources/public/templates/universaldiscovery/search.hbt
@@ -9,79 +9,75 @@
-
Result list ({{searchResultCount}})
+
Result list{{#if searchResultList}} ({{searchResultCount}}){{/if}}
- {{#if searchResultCount}}
+ {{#if searchResultList}}
+ {{#if hasPages}}
+
+ {{/if}}
+
+
+
+ Name |
+
+
+
+
+
+ {{#each searchResultList}}
+
+ {{location.contentInfo.name}} |
+ {{translate_property contentType.names}} |
+
+
+ |
+
+ {{/each}}
+
+
+ {{#if hasPages}}
+
+ {{/if}}
+ {{else}}
{{#if loadingError}}
An error occurred while loading the search result list..
{{else}}
- {{#if searchResultList }}
- {{#if hasPages}}
-
- {{/if}}
-
-
-
- Name |
-
-
-
-
-
- {{#each searchResultList}}
-
- {{location.contentInfo.name}} |
- {{translate_property contentType.names}} |
-
-
- |
-
- {{/each}}
-
-
- {{#if hasPages}}
-
- {{/if}}
+ {{#if searchText}}
+
No results were found while searching for "{{searchText}}".
{{else}}
-
Loading the search result list...
+
Please provide search text
{{/if}}
{{/if}}
- {{else}}
- {{#if searchText}}
-
No results were found while searching for "{{searchText}}".
- {{else}}
-
Please provide search text
- {{/if}}
{{/if}}
diff --git a/Tests/js/views/universaldiscovery/assets/ez-universaldiscoverysearchview-tests.js b/Tests/js/views/universaldiscovery/assets/ez-universaldiscoverysearchview-tests.js
index f4bb53e66..0a06a246d 100644
--- a/Tests/js/views/universaldiscovery/assets/ez-universaldiscoverysearchview-tests.js
+++ b/Tests/js/views/universaldiscovery/assets/ez-universaldiscoverysearchview-tests.js
@@ -5,33 +5,17 @@
YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
var resetTest, defaultSubViewTest, renderTest, unselectTest,
multipleUpdateTest, onUnselectContentTest, paginationTest,
- selectContentTest, searchTest,
+ selectContentTest, searchTest, searchResultCountChangeTest,
Assert = Y.Assert, Mock = Y.Mock;
resetTest = new Y.Test.Case({
name: 'eZ Universal Discovery Search reset tests',
setUp: function () {
- this.selectedView = new Mock();
+ this.selectedView = new Mock(new Y.View());
Mock.expect(this.selectedView, {
method: 'reset',
});
- Mock.expect(this.selectedView, {
- method: 'setAttrs',
- args: [Mock.Value.Object]
- });
- Mock.expect(this.selectedView, {
- method: 'set',
- args: [Mock.Value.String, Mock.Value.Any]
- });
- Mock.expect(this.selectedView, {
- method: 'render',
- returns: this.selectedView
- });
- Mock.expect(this.selectedView, {
- method: 'get',
- args: [Mock.Value.String]
- });
this.view = new Y.eZ.UniversalDiscoverySearchView({
selectedView: this.selectedView,
});
@@ -71,7 +55,7 @@ YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
defaultSubViewTest = new Y.Test.Case({
name: 'eZ Universal Discovery Search default sub views tests',
-
+
setUp: function () {
Y.eZ.UniversalDiscoverySelectedView = Y.Base.create('selectedView', Y.View, [], {});
this.view = new Y.eZ.UniversalDiscoverySearchView();
@@ -110,7 +94,7 @@ YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
renderTest = new Y.Test.Case({
name: 'eZ Universal Discovery Search render tests',
-
+
setUp: function () {
var that = this;
@@ -713,7 +697,7 @@ YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
Assert.areEqual(this.view.get('offset'), 0, "The offset attribute should be reset");
Assert.areEqual(
this.view.get('searchResultCount'),
- 0,
+ -1,
"The searchResultCount attribute should be reset"
);
Assert.areEqual(
@@ -724,6 +708,45 @@ YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
}
});
+ searchResultCountChangeTest = new Y.Test.Case({
+ name: 'eZ Universal Discovery Search searchResultCountChange tests',
+
+ setUp: function () {
+ this.view = new Y.eZ.UniversalDiscoverySearchView({
+ selectedView: new Y.View(),
+ });
+ },
+
+ tearDown: function () {
+ this.view.destroy();
+ delete this.view;
+ },
+
+ "Should render the view": function () {
+ var origTpl = this.view.template,
+ rendered = false;
+
+ this.view.template = function () {
+ rendered = true;
+ return origTpl.apply(this, arguments);
+ };
+ this.view.set('searchResultCount', 0);
+
+ Assert.isTrue(
+ rendered,
+ "The view should have been rendered"
+ );
+ },
+
+ "Should not render the view": function () {
+ this["Should render the view"]();
+ this.view.template = function () {
+ Assert.fail('The view should not have been rendered');
+ };
+ this.view.set('searchResultCount', -1);
+ },
+ });
+
Y.Test.Runner.setName("eZ Universal Discovery Search View tests");
Y.Test.Runner.add(resetTest);
Y.Test.Runner.add(defaultSubViewTest);
@@ -734,4 +757,5 @@ YUI.add('ez-universaldiscoverysearchview-tests', function (Y) {
Y.Test.Runner.add(paginationTest);
Y.Test.Runner.add(selectContentTest);
Y.Test.Runner.add(searchTest);
+ Y.Test.Runner.add(searchResultCountChangeTest);
}, '', {requires: ['test', 'view', 'node-event-simulate', 'ez-universaldiscoverysearchview']});