diff --git a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts index 1fa2c0c8f192151232620a5b18288730884f2038..755e812881cba262fc23d036523a12da280a840e 100644 --- a/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts +++ b/goofy-client/apps/goofy-e2e/src/integration/main-tests/vorgang-list/vorgang-list.search.e2e-spec.ts @@ -108,6 +108,7 @@ describe('VorgangList Suche', () => { waitForSpinnerToDisappear(); mainPage.getVorgangSearch().getClearButton().click(); + waitForSpinnerToDisappear(); exist(vorgangList.getRoot()); exist(vorgangStayInList.getRoot()); diff --git a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts index 160652b57e4ada0f508d715a1653fba42b9f31e8..9c29c000091227c8a0d5b3799d898f10139ccaac 100644 --- a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts +++ b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.spec.ts @@ -47,11 +47,19 @@ describe('VorgangSearchFormService', () => { expect(vorgangListService.searchForPreview).toHaveBeenCalled(); }) - it('should clear preview list on 3 or less character', () => { + it('should not clear preview list on 2 character', () => { formService.searchLocked = false; formService.handleValueChanges('AH'); + expect(vorgangListService.clearSearchPreviewList).not.toHaveBeenCalled(); + }) + + it('should clear preview list on not existing charact', () => { + formService.searchLocked = false; + + formService.handleValueChanges(EMPTY_STRING); + expect(vorgangListService.clearSearchPreviewList).toHaveBeenCalled(); }) }) diff --git a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.ts b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.ts index 7f83a0562005c563596f3604e543be654a6f0df3..43bf0f0b211bd88e3ee28e9ae10b34cbb9bb629c 100644 --- a/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.ts +++ b/goofy-client/libs/vorgang-shared-ui/src/lib/vorgang-search-container/vorgang-search/vorgang-search.formservice.ts @@ -52,7 +52,7 @@ export class VorgangSearchFormService implements OnDestroy { } if (hasMinLength(searchString, this.PREVIEW_SEARCH_STRING_MIN_LENGTH)) { this.searchForPreviewList(searchString); - } else { + } else if (searchString == EMPTY_STRING) { this.clearVorgangSearchPreviewList(); } } diff --git a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts index 5ae272cabfd77492aa038082d8d0f741a178be95..111a1d551c1408140430d6ff1a172f38026f556a 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.spec.ts @@ -8,6 +8,7 @@ import { createRouteData } from 'libs/navigation-shared/test/navigation-test-fac import { createVorgangListResource, createVorgangListResourceWithResource, createVorgangResource, createVorgangResources } from 'libs/vorgang-shared/test/vorgang'; import * as NavigationActions from '../../../../navigation-shared/src/lib/+state/navigation.actions'; import { createApiError } from '../../../../tech-shared/test/error'; +import * as VorgangNavigationUtil from '../vorgang-navigation.util'; import { VorgangListLinkRel } from '../vorgang.linkrel'; import { VorgangListResource, VorgangResource } from '../vorgang.model'; import * as VorgangActions from './vorgang.actions'; @@ -233,9 +234,35 @@ describe('Vorgang Reducer', () => { const routeData: RouteData = createRouteData(); - describe('navigate to vorgangDetailPage', () => { + describe('navigate to to "myVorgaenge"', () => { - const action = NavigationActions.updateCurrentRouteData({ routeData: { ...routeData, queryParameter: { ['vorgangWithEingangUrl']: 'encodedVorgangUri' } } }); + const action = NavigationActions.updateCurrentRouteData({ routeData }); + + beforeEach(() => { + jest.spyOn(VorgangNavigationUtil, 'isMyVorgaenge').mockReturnValue(true); + }) + + it('should set searchInfo', () => { + const state: VorgangState = reducer(initialState, action); + + expect(state.searchInfo.searchString).toEqual(EMPTY_STRING); + }) + + it('should set vorganglist reload to true', () => { + const state: VorgangState = reducer(initialState, action); + + expect(state.vorgangList.reload).toBeTruthy(); + }) + }) + + describe('navigate to to "myVorgaenge"', () => { + + const action = NavigationActions.updateCurrentRouteData({ routeData }); + + beforeEach(() => { + jest.spyOn(VorgangNavigationUtil, 'isMyVorgaenge').mockReturnValue(false); + jest.spyOn(VorgangNavigationUtil, 'isVorgangListPage').mockReturnValue(true); + }) it('should set searchInfo', () => { const state: VorgangState = reducer(initialState, action); @@ -274,6 +301,23 @@ describe('Vorgang Reducer', () => { }) }) + describe('navigate to vorgangDetailPage', () => { + + const action = NavigationActions.updateCurrentRouteData({ routeData: { ...routeData, queryParameter: { ['vorgangWithEingangUrl']: 'encodedVorgangUri' } } }); + + it('should set searchInfo', () => { + const state: VorgangState = reducer(initialState, action); + + expect(state.searchInfo.searchString).toEqual(EMPTY_STRING); + }) + + it('should set vorganglist reload to true', () => { + const state: VorgangState = reducer(initialState, action); + + expect(state.vorgangList.reload).toBeTruthy(); + }) + }) + function buildCurrentRouteData(searchString: string): RouteData { const urlSegments: UrlSegment[] = [<any>{ path: VorgangEffects.SEARCH_QUERY_PARAM }, <any>{ path: searchString }]; const queryParameter = { [VorgangEffects.SEARCH_QUERY_PARAM]: searchString }; diff --git a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts index e9149ad9a43ad988cd313cd67421570a39559bcf..2bfcbb33085202fdbd93bbbbdfdb0d4fb19a8044 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/+state/vorgang.reducer.ts @@ -2,7 +2,7 @@ import { RouteData } from '@goofy-client/navigation-shared'; import { createEmptyStateResource, createErrorStateResource, createStateResource, EMPTY_ARRAY, EMPTY_STRING, StateResource } from '@goofy-client/tech-shared'; import { Action, createReducer, on } from '@ngrx/store'; import * as NavigationActions from '../../../../navigation-shared/src/lib/+state/navigation.actions'; -import { existSearchString, getSearchString, isVorgangDetailPage } from '../vorgang-navigation.util'; +import { existSearchString, getSearchString, isMyVorgaenge, isVorgangDetailPage, isVorgangListPage } from '../vorgang-navigation.util'; import { SearchInfo, VorgangListResource, VorgangResource } from '../vorgang.model'; import { getVorgaengeFromList } from '../vorgang.util'; import * as VorgangActions from './vorgang.actions'; @@ -32,7 +32,7 @@ const vorgangReducer = createReducer( initialState, on(VorgangActions.loadVorgangList, (state: VorgangState): VorgangState => ({ ...state, - vorgangList: { ...state.vorgangList, loading: true }, + vorgangList: { ...state.vorgangList, loading: true } })), on(VorgangActions.loadVorgangListSuccess, (state: VorgangState, action: VorgangListAction) => ({ ...state, @@ -96,27 +96,47 @@ const vorgangReducer = createReducer( ); function buildStateOnNavigation(state: VorgangState, routeData: RouteData): VorgangState { - if (isVorgangDetailPage(routeData)) { - return ({ + const searchString: string = existSearchString(routeData) ? getSearchString(routeData) : EMPTY_STRING; + + if (isMyVorgaenge(routeData)) { + return { ...state, - searchInfo: { ...state.searchInfo, searchString: EMPTY_STRING, changedAfterSearchDone: false }, - vorgangList: { ...state.vorgangList, reload: true } - }); + vorgangList: { ...state.vorgangList, reload: true }, + searchInfo: { searchString, changedAfterSearchDone: false } + }; + } + if (isVorgangListPage(routeData)) { + return { + ...state, + vorgangList: { ...state.vorgangList, reload: true }, + searchInfo: { searchString, changedAfterSearchDone: false } + }; } if (existSearchString(routeData)) { const newState: VorgangState = { ...state, - searchInfo: { ...state.searchInfo, searchString: getSearchString(routeData), changedAfterSearchDone: true }, + searchInfo: { ...state.searchInfo, searchString, changedAfterSearchDone: true }, vorgangList: { ...state.vorgangList, reload: true } } - if (getSearchString(routeData) != state.searchInfo.searchString) { + if (hasSearchStringChanged(state, searchString)) { return { ...newState, searchPreviewList: createEmptyStateResource() } } return newState; } + if (isVorgangDetailPage(routeData)) { + return { + ...state, + searchInfo: { ...state.searchInfo, searchString: EMPTY_STRING, changedAfterSearchDone: false }, + vorgangList: { ...state.vorgangList, reload: true } + }; + } return { ...state }; } +function hasSearchStringChanged(state: VorgangState, currentSearchString: string): boolean { + return currentSearchString != state.searchInfo.searchString; +} + export function reducer(state: VorgangState, action: Action) { return vorgangReducer(state, action); } \ No newline at end of file diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang-list.service.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang-list.service.ts index 4705682e90fb173da70eeb19db303e19043a9186..61269fc20a95cfe1054af8e2b2652f031cb32cf5 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang-list.service.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang-list.service.ts @@ -25,15 +25,15 @@ export class VorgangListService { } loadVorgangList(apiRoot: ApiRootResource, currentRouteData: RouteData): void { - if (existSearchString(currentRouteData)) { - this.vorgangFacade.searchVorgaengeBy(apiRoot, getSearchString(currentRouteData), getSearchLinkRel(currentRouteData)); - } if (isMyVorgaenge(currentRouteData)) { this.vorgangFacade.loadMyVorgaengeList(apiRoot); } if (isVorgangListPage(currentRouteData)) { this.vorgangFacade.loadVorgangList(apiRoot); } + if (existSearchString(currentRouteData)) { + this.vorgangFacade.searchVorgaengeBy(apiRoot, getSearchString(currentRouteData), getSearchLinkRel(currentRouteData)); + } } public clearSearchPreviewList(): void { diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts index 79dc59201913f6550a523da93efd1da0b18c2597..b0a3979d304884d077808e5e5ed09e4d5e0c5760 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.spec.ts @@ -108,6 +108,14 @@ describe('Vorgang Navigation Util', () => { expect(result).toBeFalsy(); }) + + it('should return false if urlSegments contains for exmaple "myVorgaenge"', () => { + const urlSegments: UrlSegment[] = [<any>{ path: VorgangEffects.MY_VORGAENGE_URI_SEGMENT }]; + const currentRouteData: RouteData = { ...createRouteData(), urlSegments }; + const result: boolean = isVorgangListPage(currentRouteData); + + expect(result).toBeFalsy(); + }) }) describe('isVorgangDetailPage', () => { diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.ts index b8ff3bf79f782e7bd78d8ef67d132b97f6f6998e..9df9a1dc2d1e95d81f460c93e30a4bf63b362e89 100644 --- a/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.ts +++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang-navigation.util.ts @@ -25,7 +25,7 @@ export function isMyVorgaenge(routeData: RouteData): boolean { } export function isVorgangListPage(routeData: RouteData): boolean { - return isEmptyObject(routeData.queryParameter); + return isEmptyObject(routeData.queryParameter) && !isMyVorgaenge(routeData); } export function isVorgangDetailPage(routeData: RouteData): boolean {