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}} + + + + + + + + + + {{#each searchResultList}} + + + + + + {{/each}} + +
NameType
{{location.contentInfo.name}}{{translate_property contentType.names}} + +
+ {{#if hasPages}} + + {{/if}} + {{else}} {{#if loadingError}}

An error occurred while loading the search result list..

{{else}} - {{#if searchResultList }} - {{#if hasPages}} - - {{/if}} - - - - - - - - - - {{#each searchResultList}} - - - - - - {{/each}} - -
NameType
{{location.contentInfo.name}}{{translate_property contentType.names}} - -
- {{#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']});