From ccd3360a727e998bcbc6c04e46def009c0c127a6 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 7 Jan 2021 11:47:53 +0100
Subject: [PATCH] OZG-130 cleanup api-root - remove all state related code

---
 .../apps/goofy/src/app/app.component.html     | 37 ++++++++--------
 .../apps/goofy/src/app/app.component.spec.ts  | 39 ++++++++---------
 .../apps/goofy/src/app/app.component.ts       | 25 +++++------
 goofy-client/apps/goofy/src/app/app.module.ts |  6 +--
 .../libs/api-root-shared/src/index.ts         | 11 ++---
 .../src/lib/api-root-shared.actions.ts        |  8 ----
 .../src/lib/api-root-shared.facade.ts         | 12 ------
 .../src/lib/api-root-shared.module.ts         | 19 --------
 .../src/lib/api-root-shared.service.ts        | 15 -------
 .../src/lib/api-root-shared.state.ts          | 43 -------------------
 ...hared.linkrels.ts => api-root.linkrels.ts} |  0
 ...root-shared.model.ts => api-root.model.ts} |  2 +-
 .../src/lib/api-root.module.ts                | 14 ++++++
 .../src/lib/api-root.repository.ts            |  2 +-
 .../src/lib/api-root.service.spec.ts          |  3 +-
 .../src/lib/api-root.service.ts               |  2 +-
 .../libs/api-root-shared/test/api-root.ts     | 15 +++++++
 .../src/lib/vorgang-shared.state.ts           | 25 +++++------
 18 files changed, 99 insertions(+), 179 deletions(-)
 delete mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root-shared.actions.ts
 delete mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root-shared.facade.ts
 delete mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root-shared.module.ts
 delete mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root-shared.service.ts
 delete mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root-shared.state.ts
 rename goofy-client/libs/api-root-shared/src/lib/{api-root-shared.linkrels.ts => api-root.linkrels.ts} (100%)
 rename goofy-client/libs/api-root-shared/src/lib/{api-root-shared.model.ts => api-root.model.ts} (67%)
 create mode 100644 goofy-client/libs/api-root-shared/src/lib/api-root.module.ts
 create mode 100644 goofy-client/libs/api-root-shared/test/api-root.ts

diff --git a/goofy-client/apps/goofy/src/app/app.component.html b/goofy-client/apps/goofy/src/app/app.component.html
index a88d6c715f..384334c3ab 100644
--- a/goofy-client/apps/goofy/src/app/app.component.html
+++ b/goofy-client/apps/goofy/src/app/app.component.html
@@ -1,23 +1,20 @@
 <ng-container *ngIf="apiRoot$ | async as apiRoot">
-	<goofy-client-header
-		[darkMode]="darkMode$ | async"
-		[navigationCollapse]="navigationCollapse$ | async"
-		(toggleMenuEvent)="toggleNavigation($event)"
-		(darkModeEmitter)="changeColorMode($event)"
-	>
-	</goofy-client-header>
+	<!-- TODO replace by spinner-component -->
+	<ng-container *ngIf="apiRoot.loaded">
+		<goofy-client-header
+			[darkMode]="darkMode$ | async"
+			[navigationCollapse]="navigationCollapse$ | async"
+			(toggleMenuEvent)="toggleNavigation($event)"
+			(darkModeEmitter)="changeColorMode($event)"
+		>
+		</goofy-client-header>
 
-	<div class="container">
-		<goofy-client-navigation [isSmall]="navigationCollapse$ | async"></goofy-client-navigation>
-		<main><router-outlet></router-outlet></main>
-		<section>
-			<goofy-client-build-info [apiRoot]="apiRoot"></goofy-client-build-info>
-		</section>
-	</div>
+		<div class="container">
+			<goofy-client-navigation [isSmall]="navigationCollapse$ | async"></goofy-client-navigation>
+			<main><router-outlet></router-outlet></main>
+			<section>
+				<goofy-client-build-info [apiRoot]="apiRoot"></goofy-client-build-info>
+			</section>
+		</div>
+	</ng-container>
 </ng-container>
-<!--
-<ng-container *ngIf="apiRootStateless$ | async as apiRootStateless">
-	{{apiRootStateless | json}}
-</ng-container>
-
--->
diff --git a/goofy-client/apps/goofy/src/app/app.component.spec.ts b/goofy-client/apps/goofy/src/app/app.component.spec.ts
index bf3aa3ae2e..986ba6a3d1 100644
--- a/goofy-client/apps/goofy/src/app/app.component.spec.ts
+++ b/goofy-client/apps/goofy/src/app/app.component.spec.ts
@@ -1,24 +1,21 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { AppComponent } from './app.component';
-import { ApiRootFacade, ApiRootResource } from '@goofy-client/api-root-shared';
+import { ApiRootResource, ApiRootService } from '@goofy-client/api-root-shared';
 import { NgxsModule } from '@ngxs/store';
 import { UiModule } from '@goofy-client/ui';
 import { RouterTestingModule } from '@angular/router/testing';
 import { NavigationModule } from '@goofy-client/navigation';
 import { BehaviorSubject } from 'rxjs';
-import { ApiRootService } from 'libs/api-root-shared/src/lib/api-root.service';
+import { mock } from '@goofy-client/test-utils';
+import { createEmptyStateResource, createStateResource, StateResource } from '@goofy-client/tech-shared';
+import { createApiRootResource } from '../../../../libs/api-root-shared/test/api-root';
 
 describe('AppComponent', () => {
 	let component: AppComponent;
 	let fixture: ComponentFixture<AppComponent>;
 
-	const apiRootSelectorSubj: BehaviorSubject<ApiRootResource> = new BehaviorSubject(null);
-
-	const apiRootFacade = {
-		apiRootSelector$: apiRootSelectorSubj
-	}
-
-	const apiRootService = { getApiRoot: () => {}};
+	const apiRootSubj: BehaviorSubject<StateResource<ApiRootResource>> = new BehaviorSubject(null);
+	const apiRootService = mock(ApiRootService);
 
 	const headerComp: string = 'goofy-client-header';
 
@@ -32,10 +29,6 @@ describe('AppComponent', () => {
 			],
 			declarations: [AppComponent],
 			providers: [
-				{
-					provide: ApiRootFacade,
-					useValue: apiRootFacade
-				},
 				{
 					provide: ApiRootService,
 					useValue: apiRootService
@@ -48,6 +41,8 @@ describe('AppComponent', () => {
 		fixture = TestBed.createComponent(AppComponent);
 		component = fixture.componentInstance;
 		fixture.detectChanges();
+
+		apiRootService.getApiRoot.mockReturnValue(apiRootSubj);
 	});
 
 	it('should create the app', () => {
@@ -58,21 +53,23 @@ describe('AppComponent', () => {
 		expect(component.title).toEqual('goofy');
 	});
 
-	describe('header should', () => {
-		it('be rendered', () => {
-			apiRootSelectorSubj.next(<any>{});
+	describe('header', () => {
+
+		it('should be rendered', () => {
+			apiRootSubj.next(createStateResource(createApiRootResource()));
+
 			fixture.detectChanges();
 
 			const header = fixture.nativeElement.querySelector(headerComp);
-
-			expect(header).toBeInstanceOf(HTMLElement);
+			expect(header).toBeInstanceOf(HTMLElement);	//TODO prüfen ob wir expectElementFromFixture wieder nutzen können
 		})
-		it('NOT be rendered', () => {
-			apiRootSelectorSubj.next(null);
+
+		it('should NOT be rendered if api root not loaded', () => {
+			apiRootSubj.next(createEmptyStateResource());
+
 			fixture.detectChanges();
 
 			const header = fixture.nativeElement.querySelector(headerComp);
-
 			expect(header).not.toBeInstanceOf(HTMLElement);
 		})
 	})
diff --git a/goofy-client/apps/goofy/src/app/app.component.ts b/goofy-client/apps/goofy/src/app/app.component.ts
index 6025a75b29..13189db125 100644
--- a/goofy-client/apps/goofy/src/app/app.component.ts
+++ b/goofy-client/apps/goofy/src/app/app.component.ts
@@ -1,11 +1,11 @@
+import { DOCUMENT } from '@angular/common';
 import { Component, Inject, Renderer2 } from '@angular/core';
-import { ApiRootFacade, ApiRootResource, ApiRootService } from '@goofy-client/api-root-shared';
-import { Observable } from 'rxjs';
+import { ApiRootResource, ApiRootService } from '@goofy-client/api-root-shared';
+import { StateResource } from '@goofy-client/tech-shared';
 import { IconService } from '@goofy-client/ui';
+import { Observable } from 'rxjs';
 import { AppFacade } from './shared/app.facade';
-import { DOCUMENT } from '@angular/common';
 import { localStorageDark } from './shared/storage';
-import { StateResource } from '@goofy-client/tech-shared';
 
 @Component({
 	selector: 'goofy-client-root',
@@ -15,24 +15,21 @@ import { StateResource } from '@goofy-client/tech-shared';
 export class AppComponent {
 	title = 'goofy';
 
-	apiRoot$: Observable<ApiRootResource>;
-	apiRootStateless$: Observable<StateResource<ApiRootResource>>;
+	readonly apiRoot$: Observable<StateResource<ApiRootResource>>;
 
 	navigationCollapse$: Observable<boolean>;
 	darkMode$: Observable<boolean>;
 
 	constructor(
-		apiRootFacade: ApiRootFacade,
 		iconService: IconService,
 		private appFacade: AppFacade,
 		private renderer: Renderer2,
 		@Inject(DOCUMENT) private document: Document,
-		private service: ApiRootService
+		service: ApiRootService
 	) {
-		this.navigationCollapse$ = this.appFacade.navigationCollapse$;
-		this.darkMode$ = this.appFacade.darkMode$;
-		this.apiRoot$ = apiRootFacade.apiRootSelector$;
-		this.apiRootStateless$ = this.service.getApiRoot();
+		this.navigationCollapse$ = appFacade.navigationCollapse$;
+		this.darkMode$ = appFacade.darkMode$;
+		this.apiRoot$ = service.getApiRoot();
 
 		iconService.registerIcons();
 
@@ -40,7 +37,7 @@ export class AppComponent {
 	}
 
 	private subscribeToDarkMode(): void {
-		this.darkMode$.subscribe(darkMode => darkMode ? this.addClass(localStorageDark): this.removeClass(localStorageDark));
+		this.darkMode$.subscribe(darkMode => darkMode ? this.addClass(localStorageDark) : this.removeClass(localStorageDark));
 	}
 
 	private addClass(styleClass: string): void {
@@ -55,7 +52,7 @@ export class AppComponent {
 		this.appFacade.setNavigationCollapse(isToggle);
 	}
 
-	changeColorMode(darkMode: boolean): void{
+	changeColorMode(darkMode: boolean): void {
 		this.appFacade.changeColorMode(darkMode);
 	}
 }
\ No newline at end of file
diff --git a/goofy-client/apps/goofy/src/app/app.module.ts b/goofy-client/apps/goofy/src/app/app.module.ts
index 74fca048c2..30595d4368 100644
--- a/goofy-client/apps/goofy/src/app/app.module.ts
+++ b/goofy-client/apps/goofy/src/app/app.module.ts
@@ -5,7 +5,7 @@ import { LOCALE_ID, NgModule } from '@angular/core';
 import { BrowserModule } from '@angular/platform-browser';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { RouterModule } from '@angular/router';
-import { ApiRootSharedModule } from '@goofy-client/api-root-shared';
+import { ApiRootModule } from '@goofy-client/api-root-shared';
 import { EnvironmentModule } from '@goofy-client/environment-shared';
 import { NavigationModule } from '@goofy-client/navigation';
 import { UiModule } from '@goofy-client/ui';
@@ -32,11 +32,11 @@ registerLocaleData(localeDe);
 		NgxsRouterPluginModule.forRoot(),
 		NgxsActionsExecutingModule.forRoot(),
 		HttpClientModule,
-		EnvironmentModule,
-		ApiRootSharedModule,
 		BrowserAnimationsModule,
 		RouterModule,
 		UiModule,
+		EnvironmentModule,
+		ApiRootModule,
 		VorgangModule,
 		NavigationModule
 	],
diff --git a/goofy-client/libs/api-root-shared/src/index.ts b/goofy-client/libs/api-root-shared/src/index.ts
index 20b2a6401e..c12fb22a5c 100644
--- a/goofy-client/libs/api-root-shared/src/index.ts
+++ b/goofy-client/libs/api-root-shared/src/index.ts
@@ -1,7 +1,4 @@
-export * from './lib/api-root-shared.actions';
-export * from './lib/api-root-shared.facade';
-export * from './lib/api-root-shared.module';
-export * from './lib/api-root-shared.model';
-export * from './lib/api-root-shared.state';
-export * from './lib/api-root-shared.linkrels';
-export * from './lib/api-root.service';
\ No newline at end of file
+export * from './lib/api-root.service';
+export * from './lib/api-root.module';
+export * from './lib/api-root.model';
+export * from './lib/api-root.linkrels';
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.actions.ts b/goofy-client/libs/api-root-shared/src/lib/api-root-shared.actions.ts
deleted file mode 100644
index 256e3150b4..0000000000
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.actions.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { ResourceUri } from '@ngxp/rest';
-import { Environment } from 'libs/environment-shared/src/lib/environment.model';
-
-export class LoadApiRootAction {
-	static readonly type = '[System ApiRoot] Load';
-
-	constructor() { }
-}
\ No newline at end of file
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.facade.ts b/goofy-client/libs/api-root-shared/src/lib/api-root-shared.facade.ts
deleted file mode 100644
index a7851a3734..0000000000
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.facade.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Injectable } from '@angular/core';
-import { Select } from '@ngxs/store';
-import { Observable } from 'rxjs';
-import { ApiRootResource } from './api-root-shared.model';
-import { ApiRootState } from './api-root-shared.state';
-
-@Injectable()
-export class ApiRootFacade {
-
-	@Select(ApiRootState.apiRootSelector) public readonly apiRootSelector$: Observable<ApiRootResource>;
-
-}
\ No newline at end of file
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.module.ts b/goofy-client/libs/api-root-shared/src/lib/api-root-shared.module.ts
deleted file mode 100644
index 1e29e66b1b..0000000000
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.module.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { CommonModule } from '@angular/common';
-import { NgModule } from '@angular/core';
-import { RestModule } from '@ngxp/rest';
-import { NgxsModule } from '@ngxs/store';
-import { ApiRootFacade } from './api-root-shared.facade';
-import { ApiRootService } from './api-root-shared.service';
-import { ApiRootService as StatelessService } from './api-root.service';
-import { ApiRootState } from './api-root-shared.state';
-import { ApiRootRepository } from './api-root.repository';
-
-@NgModule({
-	imports: [
-		CommonModule,
-		NgxsModule.forFeature([ApiRootState]),
-		RestModule
-	],
-	providers: [ApiRootService, ApiRootFacade, StatelessService, ApiRootRepository],
-})
-export class ApiRootSharedModule {}
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.service.ts b/goofy-client/libs/api-root-shared/src/lib/api-root-shared.service.ts
deleted file mode 100644
index 7f6c2ded56..0000000000
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.service.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Injectable, InjectionToken } from '@angular/core';
-import { HttpService, ResourceUri } from '@ngxp/rest';
-import { Observable } from 'rxjs';
-import { ApiRootResource } from './api-root-shared.model';
-
-export const REMOTE_HOST = new InjectionToken('remoteHost');
-
-@Injectable()
-export class ApiRootService {
-	constructor(private httpService: HttpService) {}
-
-	get(remoteHost: ResourceUri): Observable<ApiRootResource> {
-		return <Observable<ApiRootResource>>this.httpService.get(remoteHost);
-	}
-}
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.state.ts b/goofy-client/libs/api-root-shared/src/lib/api-root-shared.state.ts
deleted file mode 100644
index 5ef79118b2..0000000000
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.state.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Injectable } from '@angular/core';
-import { Action, NgxsOnInit, Selector, State, StateContext } from '@ngxs/store';
-import { tap } from 'rxjs/operators';
-import { LoadApiRootAction } from './api-root-shared.actions';
-import { ApiRootResource } from './api-root-shared.model';
-import { ApiRootService } from './api-root-shared.service';
-import { ApiRootRepository } from './api-root.repository';
-
-const defaults: ApiRootStateModel = {
-	apiRoot: null,
-};
-
-interface ApiRootStateModel {
-	apiRoot: ApiRootResource;
-}
-
-@State<ApiRootStateModel>({ name: 'apiRoot', defaults })
-@Injectable()
-export class ApiRootState implements NgxsOnInit {
-
-	@Selector() static apiRootSelector(state: ApiRootStateModel): ApiRootResource {
-		return state.apiRoot;
-	}
-
-	constructor(private service: ApiRootService, private repository: ApiRootRepository) { }
-
-	ngxsOnInit(context: StateContext<any>): void {
-		// context.dispatch(new LoadApiRootAction(env))
-
-		// getEnvironmentFactory().then((environment: Environment) => context.dispatch(new LoadApiRootAction(environment.remoteHost)));
-		context.dispatch(new LoadApiRootAction());
-	}
-
-	@Action(LoadApiRootAction)
-	loadApiRoot(context: StateContext<ApiRootStateModel>, action: LoadApiRootAction) {
-		return this.repository.loadApiRoot().pipe(
-			// return this.service.get(action.remoteHost).pipe(
-			tap((apiRoot) => {
-				context.patchState({ apiRoot });
-			})
-		);
-	}
-}
\ No newline at end of file
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.linkrels.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.linkrels.ts
similarity index 100%
rename from goofy-client/libs/api-root-shared/src/lib/api-root-shared.linkrels.ts
rename to goofy-client/libs/api-root-shared/src/lib/api-root.linkrels.ts
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.model.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.model.ts
similarity index 67%
rename from goofy-client/libs/api-root-shared/src/lib/api-root-shared.model.ts
rename to goofy-client/libs/api-root-shared/src/lib/api-root.model.ts
index 017120b7c5..7d987290f3 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root-shared.model.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.model.ts
@@ -6,4 +6,4 @@ export interface ApiRoot {
 	javaVersion: string;
 }
 
-export interface ApiRootResource extends ApiRoot, Resource {}
+export interface ApiRootResource extends ApiRoot, Resource { }
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.module.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.module.ts
new file mode 100644
index 0000000000..3639e11420
--- /dev/null
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.module.ts
@@ -0,0 +1,14 @@
+import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { RestModule } from '@ngxp/rest';
+import { ApiRootRepository } from './api-root.repository';
+import { ApiRootService } from './api-root.service';
+
+@NgModule({
+	imports: [
+		CommonModule,
+		RestModule
+	],
+	providers: [ApiRootService, ApiRootRepository],
+})
+export class ApiRootModule { }
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.repository.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.repository.ts
index a5df6e6e7a..1209b2fcf0 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root.repository.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.repository.ts
@@ -1,7 +1,7 @@
 import { Inject, Injectable } from '@angular/core';
 import { HttpService } from '@ngxp/rest';
 import { Observable } from 'rxjs';
-import { ApiRootResource } from './api-root-shared.model';
+import { ApiRootResource } from './api-root.model';
 import { ENVIRONMENT_CONFIG } from '@goofy-client/environment-shared';
 import { Environment } from 'libs/environment-shared/src/lib/environment.model';
 
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
index 2691fcc668..97cc3f0dc2 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.service.spec.ts
@@ -3,7 +3,7 @@ import { ApiRootService } from './api-root.service';
 import { Mock, mock } from '@goofy-client/test-utils';
 import { createEmptyStateResource } from '@goofy-client/tech-shared';
 import { of } from 'rxjs';
-import { ApiRoot } from './api-root-shared.model';
+import { ApiRoot } from './api-root.model';
 
 describe('ApiRootService', () => {
 
@@ -57,7 +57,6 @@ describe('ApiRootService', () => {
 			it('should set resource', () => {
 				service.getApiRoot();
 
-
 				expect((<any>service).apiRoot$.value.resource).toBe(apiRoot);
 			});
 
diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
index 42c67ba44e..059b10f425 100644
--- a/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
+++ b/goofy-client/libs/api-root-shared/src/lib/api-root.service.ts
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
 import { BehaviorSubject, Observable } from 'rxjs';
 import { createEmptyStateResource, createStateResource, doIfLoadingRequired, StateResource } from '@goofy-client/tech-shared';
 import { ApiRootRepository } from './api-root.repository';
-import { ApiRootResource } from './api-root-shared.model';
+import { ApiRootResource } from './api-root.model';
 
 @Injectable()
 export class ApiRootService {
diff --git a/goofy-client/libs/api-root-shared/test/api-root.ts b/goofy-client/libs/api-root-shared/test/api-root.ts
new file mode 100644
index 0000000000..264e6958c0
--- /dev/null
+++ b/goofy-client/libs/api-root-shared/test/api-root.ts
@@ -0,0 +1,15 @@
+import { toResource } from '@goofy-client/tech-shared'
+import { ApiRoot, ApiRootResource } from '../src/lib/api-root.model'
+
+export function createApiRootResource(): ApiRootResource {
+	return toResource(createApiRoot());
+}
+
+export function createApiRoot(): ApiRoot {
+	return {
+		version: '1',
+		buildTime: '1',
+		javaVersion: '1'
+	}
+}
+
diff --git a/goofy-client/libs/vorgang-shared/src/lib/vorgang-shared.state.ts b/goofy-client/libs/vorgang-shared/src/lib/vorgang-shared.state.ts
index b589d3283a..deb0696de5 100644
--- a/goofy-client/libs/vorgang-shared/src/lib/vorgang-shared.state.ts
+++ b/goofy-client/libs/vorgang-shared/src/lib/vorgang-shared.state.ts
@@ -1,5 +1,5 @@
 import { Injectable } from '@angular/core';
-import { ApiRootResource, ApiRootState } from '@goofy-client/api-root-shared';
+import { ApiRootResource } from '@goofy-client/api-root-shared';
 import { VorgangListResource } from '@goofy-client/vorgang-shared';
 import { Action, State, StateContext, Store } from '@ngxs/store';
 import { tap } from 'rxjs/operators';
@@ -9,7 +9,7 @@ import { patch, append } from '@ngxs/store/operators';
 import { VorgangListLinkRel } from './vorgang-shared.linkrels';
 import { getEmbeddedResource, hasLink, ResourceUri } from '@ngxp/rest';
 import { VorgangResource } from './vorgang-shared.model';
-import { createEmptyStateResource, createStateResource, getLastValueFromLastIndexOf, sliceUriToId, StateResource } from '@goofy-client/tech-shared';
+import { createEmptyStateResource, createStateResource, getLastValueFromLastIndexOf, sliceUriToId, StateResource, toResource } from '@goofy-client/tech-shared';
 import { RouterNavigation } from '@ngxs/router-plugin';
 import { isEqual } from 'lodash-es';
 import { Selector } from '@ngxs/store';
@@ -45,15 +45,16 @@ export class VorgangSharedState {
 		return hasNextPage;
 	}
 
-	constructor(private store: Store, private service: VorgangSharedService) {}
+	constructor(private store: Store, private service: VorgangSharedService) { }
 
 	@Action(LoadVorgangListAction)
 	loadVorgangList(context: StateContext<VorgangSharedModel>) {
-		const apiRoot: ApiRootResource = this.store.selectSnapshot(ApiRootState.apiRootSelector);
+		// const apiRoot: ApiRootResource = this.store.selectSnapshot(ApiRootState.apiRootSelector);
+		const apiRoot: ApiRootResource = toResource({});
 
 		return this.service.getFirstVorgangListPage(apiRoot).pipe(
 			tap((vorgangList: VorgangListResource) => {
-				context.patchState({currentVorgangListPageResource: createEmptyStateResource(true)});
+				context.patchState({ currentVorgangListPageResource: createEmptyStateResource(true) });
 				context.dispatch(new LoadVorgangListSuccessAction(vorgangList))
 			})
 		)
@@ -74,7 +75,7 @@ export class VorgangSharedState {
 
 		return this.service.getNextVorgangListPage(vorgangListResource.resource).pipe(
 			tap((vorgangList: VorgangListResource) => {
-				context.patchState({currentVorgangListPageResource: createEmptyStateResource(true)});
+				context.patchState({ currentVorgangListPageResource: createEmptyStateResource(true) });
 				context.dispatch(new LoadNextVorgangListPageSuccessAction(vorgangList))
 			})
 		)
@@ -82,7 +83,7 @@ export class VorgangSharedState {
 	@Action(LoadNextVorgangListPageSuccessAction)
 	loadNextVorgangPageSuccess(context: StateContext<VorgangSharedModel>, action: LoadNextVorgangListPageSuccessAction) {
 		const vorgangList: VorgangListResource = action.vorgangList;
-		
+
 		return context.setState(patch({
 			currentVorgangListPageResource: createStateResource(vorgangList),
 			vorgaenge: append(getEmbeddedResource(vorgangList, VorgangListLinkRel.VORGANG_LIST))
@@ -90,15 +91,15 @@ export class VorgangSharedState {
 	}
 
 	@Action(RouterNavigation)
-	routerNavigation(context: StateContext<VorgangSharedModel>, action: RouterNavigation){
-		if(this.isVorgangNavigation(action.event.url)){
+	routerNavigation(context: StateContext<VorgangSharedModel>, action: RouterNavigation) {
+		if (this.isVorgangNavigation(action.event.url)) {
 			this.handleNavigationToVorgang(context, getLastValueFromLastIndexOf(action.event.url, '/'));
 		}
-		if(this.isVorgaengeNavigation(action.event.url)){
+		if (this.isVorgaengeNavigation(action.event.url)) {
 			context.patchState({ vorgang: null });
 		}
 	}
-	
+
 	private isVorgangNavigation(url: string): boolean {
 		return url.startsWith('/vorgang/') ? true : false;
 	}
@@ -106,7 +107,7 @@ export class VorgangSharedState {
 	private isVorgaengeNavigation(url: string): boolean {
 		return isEqual(url, '/') ? true : false;
 	}
-	
+
 	private handleNavigationToVorgang(context: StateContext<VorgangSharedModel>, vorgangUri: ResourceUri): void {
 		const vorgaenge: VorgangResource[] = this.store.selectSnapshot(VorgangSharedState.vorgeangeSelector);
 		const vorgang: VorgangResource = vorgaenge.find(vorgang => isEqual(sliceUriToId(vorgang), vorgangUri));
-- 
GitLab