diff --git a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.html b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.html index 8550b04182..114837ce65 100644 --- a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.html +++ b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.html @@ -21,7 +21,7 @@ {{"search.filters.filter.show-more" | translate}} - {{"search.filters.filter.show-less" + {{"search.filters.filter.show-less" | translate}} diff --git a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts index 83ed1ca8cb..08ee0fd840 100644 --- a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts +++ b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.spec.ts @@ -55,8 +55,10 @@ describe('SearchFacetFilterComponent', () => { getQueryParamsWithout: (paramName: string, filterValue: string) => '', getPage: (paramName: string) => page, /* tslint:disable:no-empty */ - increasePage: (filterName: string) => {}, - decreasePage: (filterName: string) => {}, + incrementPage: (filterName: string) => { + }, + resetPage: (filterName: string) => { + }, /* tslint:enable:no-empty */ searchLink: '/search', } @@ -156,12 +158,23 @@ describe('SearchFacetFilterComponent', () => { describe('when the showMore method is called', () => { beforeEach(() => { - spyOn(filterService, 'increasePage'); + spyOn(filterService, 'incrementPage'); comp.showMore(); }); - it('should call increasePage on the filterService with the correct filter parameter name', () => { - expect(filterService.increasePage).toHaveBeenCalledWith(mockFilterConfig.name) + it('should call incrementPage on the filterService with the correct filter parameter name', () => { + expect(filterService.incrementPage).toHaveBeenCalledWith(mockFilterConfig.name) + }); + }); + + describe('when the showFirstPageOnly method is called', () => { + beforeEach(() => { + spyOn(filterService, 'resetPage'); + comp.showFirstPageOnly(); + }); + + it('should call resetPage on the filterService with the correct filter parameter name', () => { + expect(filterService.resetPage).toHaveBeenCalledWith(mockFilterConfig.name) }); }); diff --git a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts index ccdab52c57..99501f346a 100644 --- a/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts +++ b/src/app/+search-page/search-filters/search-filter/search-facet-filter/search-facet-filter.component.ts @@ -57,11 +57,11 @@ export class SearchFacetFilterComponent implements OnInit { } showMore() { - this.filterService.increasePage(this.filterConfig.name); + this.filterService.incrementPage(this.filterConfig.name); } - showLess() { - this.filterService.decreasePage(this.filterConfig.name); + showFirstPageOnly() { + this.filterService.resetPage(this.filterConfig.name); } getCurrentPage(): Observable { diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.actions.ts b/src/app/+search-page/search-filters/search-filter/search-filter.actions.ts index eb5f0bd959..5c9803c7a9 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.actions.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.actions.ts @@ -17,7 +17,8 @@ export const SearchFilterActionTypes = { INITIAL_EXPAND: type('dspace/search-filter/INITIAL_EXPAND'), TOGGLE: type('dspace/search-filter/TOGGLE'), DECREMENT_PAGE: type('dspace/search-filter/DECREMENT_PAGE'), - INCREMENT_PAGE: type('dspace/search-filter/INCREMENT_PAGE') + INCREMENT_PAGE: type('dspace/search-filter/INCREMENT_PAGE'), + RESET_PAGE: type('dspace/search-filter/RESET_PAGE') }; export class SearchFilterAction implements Action { @@ -55,4 +56,8 @@ export class SearchFilterDecrementPageAction extends SearchFilterAction { export class SearchFilterIncrementPageAction extends SearchFilterAction { type = SearchFilterActionTypes.INCREMENT_PAGE; } + +export class SearchFilterResetPageAction extends SearchFilterAction { + type = SearchFilterActionTypes.RESET_PAGE; +} /* tslint:enable:max-classes-per-file */ diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.reducer.spec.ts b/src/app/+search-page/search-filters/search-filter/search-filter.reducer.spec.ts index f2f5421c74..8fbfbf2e65 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.reducer.spec.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.reducer.spec.ts @@ -4,7 +4,7 @@ import { SearchFilterInitialCollapseAction, SearchFilterInitialExpandAction, SearchFilterToggleAction, - SearchFilterDecrementPageAction + SearchFilterDecrementPageAction, SearchFilterResetPageAction } from './search-filter.actions'; import { filterReducer } from './search-filter.reducer'; @@ -154,4 +154,12 @@ describe('filterReducer', () => { const newState = filterReducer(state, action); expect(newState[filterName1].page).toEqual(1); }); + + it('should reset the page to 1 for the specified filter in response to the RESET_PAGE action', () => { + const state = {}; + state[filterName1] = { filterCollapsed: true, page: 20 }; + const action = new SearchFilterResetPageAction(filterName1); + const newState = filterReducer(state, action); + expect(newState[filterName1].page).toEqual(1); + }); }); diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.reducer.ts b/src/app/+search-page/search-filters/search-filter/search-filter.reducer.ts index fb1dc6802b..9b1a084462 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.reducer.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.reducer.ts @@ -77,6 +77,15 @@ export function filterReducer(state = initialState, action: SearchFilterAction): } }); + } + case SearchFilterActionTypes.RESET_PAGE: { + return Object.assign({}, state, { + [action.filterName]: { + filterCollapsed: state[action.filterName].filterCollapsed, + page: 1 + } + }); + } case SearchFilterActionTypes.TOGGLE: { diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.service.spec.ts b/src/app/+search-page/search-filters/search-filter/search-filter.service.spec.ts index b7e0c4ed90..7371e55ee8 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.service.spec.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.service.spec.ts @@ -4,7 +4,8 @@ import { Store } from '@ngrx/store'; import { SearchFilterCollapseAction, SearchFilterDecrementPageAction, SearchFilterExpandAction, SearchFilterIncrementPageAction, - SearchFilterInitialCollapseAction, SearchFilterInitialExpandAction, SearchFilterToggleAction + SearchFilterInitialCollapseAction, SearchFilterInitialExpandAction, SearchFilterResetPageAction, + SearchFilterToggleAction } from './search-filter.actions'; import { SearchFiltersState } from './search-filter.reducer'; import { SearchFilterConfig } from '../../search-service/search-filter-config.model'; @@ -95,7 +96,7 @@ describe('SearchFilterService', () => { describe('when the decreasePage method is triggered', () => { beforeEach(() => { - service.decreasePage(mockFilterConfig.name); + service.decrementPage(mockFilterConfig.name); }); it('SearchFilterDecrementPageAction should be dispatched to the store', () => { @@ -106,7 +107,7 @@ describe('SearchFilterService', () => { describe('when the increasePage method is triggered', () => { beforeEach(() => { - service.increasePage(mockFilterConfig.name); + service.incrementPage(mockFilterConfig.name); }); it('SearchFilterCollapseAction should be dispatched to the store', () => { @@ -115,6 +116,17 @@ describe('SearchFilterService', () => { }); + describe('when the resetPage method is triggered', () => { + beforeEach(() => { + service.resetPage(mockFilterConfig.name); + }); + + it('SearchFilterDecrementPageAction should be dispatched to the store', () => { + expect(store.dispatch).toHaveBeenCalledWith(new SearchFilterResetPageAction(mockFilterConfig.name)); + }); + + }); + describe('when the expand method is triggered', () => { beforeEach(() => { service.expand(mockFilterConfig.name); diff --git a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts index a35e0ded76..f3efc19b86 100644 --- a/src/app/+search-page/search-filters/search-filter/search-filter.service.ts +++ b/src/app/+search-page/search-filters/search-filter/search-filter.service.ts @@ -7,7 +7,7 @@ import { SearchFilterDecrementPageAction, SearchFilterExpandAction, SearchFilterIncrementPageAction, SearchFilterInitialCollapseAction, - SearchFilterInitialExpandAction, + SearchFilterInitialExpandAction, SearchFilterResetPageAction, SearchFilterToggleAction } from './search-filter.actions'; import { hasValue, } from '../../../shared/empty.util'; @@ -91,13 +91,17 @@ export class SearchFilterService { this.store.dispatch(new SearchFilterInitialExpandAction(filterName)); } - public decreasePage(filterName: string): void { + public decrementPage(filterName: string): void { this.store.dispatch(new SearchFilterDecrementPageAction(filterName)); } - public increasePage(filterName: string): void { + public incrementPage(filterName: string): void { this.store.dispatch(new SearchFilterIncrementPageAction(filterName)); } + + public resetPage(filterName: string): void { + this.store.dispatch(new SearchFilterResetPageAction(filterName)); + } } function filterByNameSelector(name: string): MemoizedSelector {