From ecc28fd93db83ea206f2ab4bec1f65236821b4dc Mon Sep 17 00:00:00 2001
From: kaw67872 <kawtar.laariche@iais.fraunhofer.de>
Date: Fri, 3 May 2024 20:35:41 +0200
Subject: [PATCH] #19: add breadcrumb navigation component

---
 .../breadcrumb-navigation.component.html      | 18 ++++++
 .../breadcrumb-navigation.component.scss      | 56 +++++++++++++++++++
 .../breadcrumb-navigation.component.spec.ts   | 23 ++++++++
 .../breadcrumb-navigation.component.ts        | 29 ++++++++++
 4 files changed, 126 insertions(+)
 create mode 100644 src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.html
 create mode 100644 src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.scss
 create mode 100644 src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.spec.ts
 create mode 100644 src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.ts

diff --git a/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.html b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.html
new file mode 100644
index 0000000..f6cb9cd
--- /dev/null
+++ b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.html
@@ -0,0 +1,18 @@
+<ul class="c-breadcrumb">
+  <li>
+    <a (click)="onFirstNavigationLabelClick()">{{ firstNavigationLabel }}</a>
+  </li>
+  <li>
+    <a (click)="onSecondNavigationClick()">{{ secondNavigationLabel }}</a>
+  </li>
+  <li>
+    <span
+      class="md-breadcrumb-item"
+      matTooltip="{{ solution?.name?.toString()?.split('_')?.join(' ') }}"
+      >{{ solution?.name?.toString()?.split("_")?.join(" ") }}</span
+    >
+  </li>
+  <li>
+    <gp-solution-id [solutionId]="solution.solutionId"></gp-solution-id>
+  </li>
+</ul>
diff --git a/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.scss b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.scss
new file mode 100644
index 0000000..6124c00
--- /dev/null
+++ b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.scss
@@ -0,0 +1,56 @@
+.c-breadcrumb {
+  list-style-type: none;
+  clear: both;
+  padding: 0;
+  margin: 0;
+}
+
+.c-breadcrumb li:first-child {
+  margin-left: 0;
+  padding-left: 0;
+}
+
+.c-breadcrumb li {
+  display: inline-block;
+  padding: 0 5px;
+}
+
+.c-breadcrumb li:first-child:before {
+  content: "";
+}
+
+.c-breadcrumb li:before {
+  content: "/";
+  position: relative;
+  left: -6px;
+}
+
+.c-breadcrumb li a {
+  color: #2e2f2f;
+  text-decoration: none;
+  font-weight: 600;
+  font-size: 13px;
+  cursor: pointer;
+}
+
+.c-breadcrumb li span.md-breadcrumb-item {
+  max-width: 300px;
+  position: relative;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  white-space: nowrap;
+  display: inline-block;
+  float: right;
+}
+
+.c-breadcrumb li:last-child,
+.c-breadcrumb li:last-child a {
+  font-weight: normal;
+  color: #8f8f8f;
+  font-size: 13px;
+}
+
+.c-breadcrumb li {
+  display: inline-block;
+  padding: 0 5px;
+}
diff --git a/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.spec.ts b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.spec.ts
new file mode 100644
index 0000000..0fdae98
--- /dev/null
+++ b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { BreadcrumbNavigationComponent } from './breadcrumb-navigation.component';
+
+describe('BreadcrumbNavigationComponent', () => {
+  let component: BreadcrumbNavigationComponent;
+  let fixture: ComponentFixture<BreadcrumbNavigationComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [BreadcrumbNavigationComponent]
+    })
+    .compileComponents();
+    
+    fixture = TestBed.createComponent(BreadcrumbNavigationComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.ts b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.ts
new file mode 100644
index 0000000..2fbc2db
--- /dev/null
+++ b/src/app/shared/components/breadcrumb-navigation/breadcrumb-navigation.component.ts
@@ -0,0 +1,29 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { SolutionIdComponent } from '../solution-id/solution-id.component';
+import { PublicSolutionDetailsModel } from '../../models';
+import { MatTooltipModule } from '@angular/material/tooltip';
+
+@Component({
+  selector: 'gp-breadcrumb-navigation',
+  standalone: true,
+  imports: [CommonModule, SolutionIdComponent, MatTooltipModule],
+  templateUrl: './breadcrumb-navigation.component.html',
+  styleUrl: './breadcrumb-navigation.component.scss',
+})
+export class BreadcrumbNavigationComponent {
+  @Input() firstNavigationLabel!: string;
+  @Input() secondNavigationLabel!: string;
+  @Input() solution!: PublicSolutionDetailsModel;
+
+  @Output() firstNavigationClicked = new EventEmitter<void>();
+  @Output() secondNavigationClicked = new EventEmitter<void>();
+
+  onFirstNavigationLabelClick(): void {
+    this.firstNavigationClicked.emit();
+  }
+
+  onSecondNavigationClick(): void {
+    this.secondNavigationClicked.emit();
+  }
+}
-- 
GitLab