Skip to content
Snippets Groups Projects
Commit bd80307f authored by OZGCloud's avatar OZGCloud
Browse files

OZG-106 load vorgang from route

parent 7a496228
No related branches found
No related tags found
No related merge requests found
import { MatIcon, MatIconRegistry } from '@angular/material/icon';
import { DomSanitizer } from '@angular/platform-browser';
import { MatIconRegistry } from '@angular/material/icon';
import { IconService } from './icon.service';
import { Mock, mock, useFromMock } from '@goofy-client/test-utils';
......
......@@ -19,13 +19,6 @@ export class VorgangDetailContainerComponent implements OnInit {
) { }
ngOnInit(): void {
/* this.route.params.subscribe(params => {
console.log('subs')
const id = params['vorgangId']
console.log(id)
})*/
const vorgangMitEingangUrlParam = this.route.snapshot.paramMap.get('vorgangMitEingangUrl');
const vorgangMitEingangUrl = atob(vorgangMitEingangUrlParam)
this.vorgangStateResource$ = this.vorgangService.getVorgangMitEingang(vorgangMitEingangUrl)
this.vorgangStateResource$ = this.vorgangService.getVorgangMitEingang()
}
}
import { ApiRootResource } from '@goofy-client/api-root-shared';
import { createEmptyStateResource, createStateResource } from '@goofy-client/tech-shared';
import { Mock, mock, useFromMock } from '@goofy-client/test-utils';
import { getEmbeddedResource } from '@ngxp/rest';
import { getEmbeddedResource, getUrl } from '@ngxp/rest';
import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service';
import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
import { createVorgangListResource } from 'libs/vorgang-shared/test/vorgang';
import { of } from 'rxjs';
import { createVorgangListResource, createVorgangMitEingangResource } from 'libs/vorgang-shared/test/vorgang';
import { BehaviorSubject, of } from 'rxjs';
import { VorgangListLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangResource } from './vorgang.model';
import { VorgangRepository } from './vorgang.repository';
import { VorgangService } from './vorgang.service';
import { NavigationEnd, Router } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
describe('VorgangService', () => {
let service: VorgangService;
let repository: Mock<VorgangRepository>;
let apiRootService: Mock<ApiRootService>;
let router: Mock<Router>
let events: BehaviorSubject<Event>;
beforeEach(() => {
repository = mock(VorgangRepository);
apiRootService = mock(ApiRootService);
events = new BehaviorSubject<Event>(null);
router = {...mock(Router), events: <any>events };
service = new VorgangService(useFromMock(apiRootService), useFromMock(repository));
service = new VorgangService(useFromMock(apiRootService), useFromMock(repository), useFromMock(router));
})
describe('getCurrentVorgangList', () => {
......@@ -215,5 +221,24 @@ describe('VorgangService', () => {
expect((<any>service).hasNextPage$.value).toBe(false);
})
})
describe('check vorgang after routing', () => {
it('should load vorgang', () => {
const vorgangMitEingang = createVorgangMitEingangResource();
const url = '/vorgang/' + btoa(getUrl(vorgangMitEingang));
repository.getVorgang.mockReturnValue(of(vorgangMitEingang));
events.next(<any>new NavigationEnd(43, url, url));
expect((<any>service).vorgangMitEingang$.value.resource).toBe(vorgangMitEingang);
})
it('should unload vorgang', () => {
const expected = createEmptyStateResource();
events.next(<any>new NavigationEnd(42, '/', '/'));
expect((<any>service).vorgangMitEingang$.value).toStrictEqual(expected);
})
})
})
})
......@@ -3,11 +3,12 @@ import { ApiRootResource } from '@goofy-client/api-root-shared';
import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@goofy-client/tech-shared';
import { getEmbeddedResource, hasLink } from '@ngxp/rest';
import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service';
import { BehaviorSubject, Observable, of } from 'rxjs';
import { BehaviorSubject, Observable } from 'rxjs';
import { VorgangListLinkRel } from './vorgang.linkrels';
import { VorgangListResource, VorgangMitEingangResource, VorgangResource } from './vorgang.model';
import { VorgangRepository } from './vorgang.repository';
import { concatMap, delay } from 'rxjs/operators';
import { delay, filter } from 'rxjs/operators';
import { NavigationEnd, Router } from '@angular/router';
@Injectable()
export class VorgangService {
......@@ -19,17 +20,27 @@ export class VorgangService {
constructor(
private apiRootService: ApiRootService,
private vorgangRepository: VorgangRepository
) { }
public getVorgangMitEingang(vorgangMitEingangUrl): Observable<StateResource<VorgangMitEingangResource>> {
doIfLoadingRequired(this.vorgangMitEingang$.value, () => {
this.vorgangMitEingang$.next({ ...this.vorgangMitEingang$.value, loading: true });
this.vorgangRepository.getVorgang(vorgangMitEingangUrl).pipe(delay(5000)).subscribe(vorgang => {
this.vorgangMitEingang$.next(createStateResource(vorgang));
})
private vorgangRepository: VorgangRepository,
private router: Router
) {
this.subscribeToRouterNavigationEvents();
}
private subscribeToRouterNavigationEvents(): void {
this.router.events.pipe(filter(event => event instanceof NavigationEnd))
.subscribe((event: NavigationEnd) => {
if (event.url.startsWith('/vorgang/')) {
const urlParts = event.url.split('/')
const vorgangMitEingangUrl = atob(decodeURIComponent(urlParts[urlParts.length - 1]));
this.loadVorgangMitEingang(vorgangMitEingangUrl);
} else {
this.vorgangMitEingang$.next(createEmptyStateResource());
}
});
return this.vorgangMitEingang$;
}
public getVorgangMitEingang(): Observable<StateResource<VorgangMitEingangResource>> {
return this.vorgangMitEingang$
}
public getCurrentVorgangList(): Observable<StateResource<VorgangListResource>> {
......@@ -53,6 +64,16 @@ export class VorgangService {
return this.hasNextPage$;
}
private loadVorgangMitEingang(vorgangMitEingangUrl): Observable<StateResource<VorgangMitEingangResource>> {
doIfLoadingRequired(this.vorgangMitEingang$.value, () => {
this.vorgangMitEingang$.next({ ...this.vorgangMitEingang$.value, loading: true });
this.vorgangRepository.getVorgang(vorgangMitEingangUrl).subscribe(vorgang => {
this.vorgangMitEingang$.next(createStateResource(vorgang));
})
});
return this.vorgangMitEingang$;
}
private loadVorgangList(apiRootResource: ApiRootResource): void {
this.setCurrentListLoading();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment