From 65f45e184e11d765774d0d072ffd397d3f7078d5 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 3 Jun 2021 10:06:00 +0200
Subject: [PATCH] OZG-400 create container component;

---
 .../header/header.component.html              |  2 +-
 goofy-client/libs/user-profile/src/index.ts   |  3 +-
 .../user-icon-container.component.html        |  1 +
 .../user-icon-container.component.scss        |  0
 .../user-icon-container.component.spec.ts     | 25 +++++++++++++++
 .../user-icon-container.component.ts          | 32 +++++++++++++++++++
 .../lib/user-icon/user-icon.component.html    | 15 +++++----
 .../lib/user-icon/user-icon.component.scss    |  2 +-
 .../src/lib/user-icon/user-icon.component.ts  | 31 +++++++++---------
 .../src/lib/user-profile.module.ts            |  8 +++--
 .../vorgang-detail-header.component.html      |  2 +-
 .../vorgang-list-item.component.html          |  4 +--
 12 files changed, 94 insertions(+), 31 deletions(-)
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.scss
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.spec.ts
 create mode 100644 goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts

diff --git a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.html b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.html
index 409feda884..8fc56d6d07 100644
--- a/goofy-client/libs/navigation/src/lib/header-container/header/header.component.html
+++ b/goofy-client/libs/navigation/src/lib/header-container/header/header.component.html
@@ -17,7 +17,7 @@
 		<goofy-client-settings [darkMode]="darkMode" (darkModeEmitter)="darkModeEmitter.emit($event)"></goofy-client-settings>
 
 		<button mat-icon-button [matMenuTriggerFor]="accountMenu" class="big-button" data-test-id="user-icon-button">
-			<goofy-client-user-icon [disableTooltip]="true" [scaleFactor]="1.4" transformOrigin="center"></goofy-client-user-icon>
+			<goofy-client-user-icon-container [disableTooltip]="true" [scaleFactor]="1.4" transformOrigin="center"></goofy-client-user-icon-container>
 		</button>
 
 		<mat-menu #accountMenu="matMenu">
diff --git a/goofy-client/libs/user-profile/src/index.ts b/goofy-client/libs/user-profile/src/index.ts
index 9c73fd85e2..618038ce4d 100644
--- a/goofy-client/libs/user-profile/src/index.ts
+++ b/goofy-client/libs/user-profile/src/index.ts
@@ -1,2 +1,3 @@
-export * from './lib/user-icon/user-icon.component';
+export * from './lib/user-icon-container/user-icon-container.component';
 export * from './lib/user-profile.module';
+
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html
new file mode 100644
index 0000000000..a4185e299d
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.html
@@ -0,0 +1 @@
+<goofy-client-user-icon [userProfileStateResource]="userProfile$ | async" [disableTooltip]="disableTooltip" [scaleFactor]="scaleFactor" [transformOrigin]="transformOrigin"></goofy-client-user-icon>
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.scss b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.spec.ts b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.spec.ts
new file mode 100644
index 0000000000..6d338b051b
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { UserIconContainerComponent } from './user-icon-container.component';
+
+describe('UserIconContainerComponent', () => {
+  let component: UserIconContainerComponent;
+  let fixture: ComponentFixture<UserIconContainerComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [ UserIconContainerComponent ]
+    })
+    .compileComponents();
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(UserIconContainerComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts
new file mode 100644
index 0000000000..5b17ae3a9a
--- /dev/null
+++ b/goofy-client/libs/user-profile/src/lib/user-icon-container/user-icon-container.component.ts
@@ -0,0 +1,32 @@
+import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
+import { createEmptyStateResource, StateResource } from '@goofy-client/tech-shared';
+import { UserProfileService } from '@goofy-client/user-profile-shared';
+import { VorgangHeaderLinkRel, VorgangWithEingangResource } from '@goofy-client/vorgang-shared';
+import { hasLink } from '@ngxp/rest';
+import { UserProfileResource } from 'libs/user-profile-shared/src/lib/user-profile.model';
+import { isNil } from 'lodash-es';
+import { Observable, of } from 'rxjs';
+
+@Component({
+	selector: 'goofy-client-user-icon-container',
+	templateUrl: './user-icon-container.component.html',
+	styleUrls: ['./user-icon-container.component.scss']
+})
+export class UserIconContainerComponent implements OnChanges {
+
+	@Input() vorgang: VorgangWithEingangResource;
+
+	@Input() disableTooltip: boolean = false;
+	@Input() scaleFactor: number = 2;
+	@Input() transformOrigin: string = 'right center';
+
+	userProfile$: Observable<StateResource<UserProfileResource>> = of(createEmptyStateResource());
+
+	constructor(private userProfileService: UserProfileService) { }
+
+	ngOnChanges(changes: SimpleChanges) {
+		if (changes.vorgang && !isNil(this.vorgang) && hasLink(this.vorgang, VorgangHeaderLinkRel.ASSIGNED_TO)) {
+			this.userProfile$ = this.userProfileService.getUserProfile(this.vorgang);
+		}
+	}
+}
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.html b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.html
index 45c87a93f7..22f917db9b 100644
--- a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.html
+++ b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.html
@@ -1,15 +1,16 @@
-<ng-container *ngIf="userProfile$ | async as userProfile">
-
 	<div class="editor"
 			[ngStyle]="{
 				'transform': 'scale(' + scaleFactor + ')',
 				'transform-origin': transformOrigin
 			}"
 			[matTooltipDisabled]="disableTooltip"
-			[matTooltip]="{{toolTip}}">
+			matTooltip="{{ toolTip }}">
 
-		<mat-icon>account_circle</mat-icon>
+			<ng-container *ngIf="userProfileStateResource.resource; else noUser">
+				<span>{{ initials }}</span>
+			</ng-container>
+			<ng-template #noUser>
+				<mat-icon>account_circle</mat-icon>
+			</ng-template>
 		<div class="picture"></div>
-	</div>
-
-</ng-container>
\ No newline at end of file
+	</div>
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss
index 0a64fda9e4..fcccc80212 100644
--- a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss
+++ b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.scss
@@ -19,4 +19,4 @@
 		left: 0;
 		top: 0;
 	}
-}
+}
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts
index 58e77b37a5..e0348d0f8b 100644
--- a/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts
+++ b/goofy-client/libs/user-profile/src/lib/user-icon/user-icon.component.ts
@@ -1,35 +1,36 @@
-import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
-import { createEmptyStateResource, StateResource } from '@goofy-client/tech-shared';
-import { UserProfileService } from '@goofy-client/user-profile-shared';
-import { VorgangWithEingangResource } from '@goofy-client/vorgang-shared';
+import { Component, Input, SimpleChanges } from '@angular/core';
+import { StateResource } from '@goofy-client/tech-shared';
 import { UserProfileResource } from 'libs/user-profile-shared/src/lib/user-profile.model';
 import { isNil } from 'lodash';
-import { Observable, of } from 'rxjs';
 
 @Component({
 	selector: 'goofy-client-user-icon',
 	templateUrl: './user-icon.component.html',
 	styleUrls: ['./user-icon.component.scss']
 })
-export class UserIconComponent implements OnChanges {
+export class UserIconComponent {
 
-	@Input() vorgang: VorgangWithEingangResource;
+	@Input() userProfileStateResource: StateResource<UserProfileResource>;
 
 	@Input() disableTooltip: boolean = false;
 	@Input() scaleFactor: number = 2;
 	@Input() transformOrigin: string = 'right center';
 
-	private static DEFAULT_TOOLTIP = 'kein Bearbeiter zugewiesen';
+	readonly toolTipNoUser: string = 'kein Bearbeiter zugewiesen'
 
-	toolTip = UserIconComponent.DEFAULT_TOOLTIP;
+	toolTip: string;
 
-	userProfile$: Observable<StateResource<UserProfileResource>> = of(createEmptyStateResource());
+	ngOnChanges(changes: SimpleChanges): void {
+		if (changes.userProfileStateResource) {
+			this.toolTip = this.userProfileStateResource.resource ? this.userProfileStateResource.resource.firstName + ' ' + this.userProfileStateResource.resource.lastName : this.toolTipNoUser;
+		}
+	}
 
-	constructor(private userProfileService: UserProfileService) { }
+	get initials(): string {
+		return this.getFirstLetter(this.userProfileStateResource.resource.firstName) + this.getFirstLetter(this.userProfileStateResource.resource.lastName);
+	}
 
-	ngOnChanges(changes: SimpleChanges) {
-		if (changes.vorgang && !isNil(this.vorgang)) {
-			this.userProfile$ = this.userProfileService.getUserProfile(this.vorgang);
-		}
+	private getFirstLetter(value: string): string {
+		return isNil(value) ? undefined : value.substr(0, 1).toUpperCase();
 	}
 }
\ No newline at end of file
diff --git a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
index c2cbacbd63..5015a29838 100644
--- a/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
+++ b/goofy-client/libs/user-profile/src/lib/user-profile.module.ts
@@ -2,6 +2,8 @@ import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
 import { TechSharedModule } from '@goofy-client/tech-shared';
 import { UiModule } from '@goofy-client/ui';
+import { UserProfileSharedModule } from '@goofy-client/user-profile-shared';
+import { UserIconContainerComponent } from './user-icon-container/user-icon-container.component';
 import { UserIconComponent } from './user-icon/user-icon.component';
 
 @NgModule({
@@ -9,9 +11,9 @@ import { UserIconComponent } from './user-icon/user-icon.component';
 		CommonModule,
 		TechSharedModule,
 		UiModule,
-		UserProfileModule
+		UserProfileSharedModule
 	],
-	declarations: [UserIconComponent],
-	exports: [UserIconComponent]
+	declarations: [UserIconComponent, UserIconContainerComponent],
+	exports: [UserIconContainerComponent]
 })
 export class UserProfileModule { }
\ No newline at end of file
diff --git a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html
index a2fd88cca9..55bdebc327 100644
--- a/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html
+++ b/goofy-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-header/vorgang-detail-header.component.html
@@ -8,5 +8,5 @@
 		<h1 goofy-client-aktenzeichen [vorgang]="vorgangWithEingang"></h1>
 		<h3 data-test-id="name">{{ vorgangWithEingang.name }}</h3>
 	</div>
-	<goofy-client-user-icon *ngIf="vorgangWithEingang | hasLink: linkRel.ASSIGN" [vorgang]="vorgangWithEingang" class="user" data-test-id="user"></goofy-client-user-icon>
+	<goofy-client-user-icon-container *ngIf="vorgangWithEingang | hasLink: linkRel.ASSIGN" [vorgang]="vorgangWithEingang" class="user" data-test-id="user"></goofy-client-user-icon-container>
 </div>
diff --git a/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html b/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html
index 384c454167..56944edba3 100644
--- a/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html
+++ b/goofy-client/libs/vorgang/src/lib/vorgang-list-container/vorgang-list/vorgang-list-item/vorgang-list-item.component.html
@@ -18,9 +18,9 @@
 		<goofy-client-vorgang-next-frist-button [vorgang]="vorgang" class="row wiedervorlagen"></goofy-client-vorgang-next-frist-button>
 	</div>
 
-	<goofy-client-user-icon *ngIf="vorgang | hasLink: vorgangLinkRel.ASSIGN" data-test-id="user"
+	<goofy-client-user-icon-container *ngIf="vorgang | hasLink: vorgangLinkRel.ASSIGN" data-test-id="user"
 		[vorgang]="vorgang"
 		scaleFactor="2.2"
 		class="user-icon">
-	</goofy-client-user-icon>
+	</goofy-client-user-icon-container>
 </a>
-- 
GitLab