From 9199f4f0ceb9b2350f728a8aa3b100eb94d915ca Mon Sep 17 00:00:00 2001
From: Cathy Hu <cathy.hu@fau.de>
Date: Thu, 3 Sep 2020 19:52:12 +0200
Subject: [PATCH] [frontend] Add email public component

---
 .../email-bot-card.component.html             |  43 +++++++++++
 .../email-bot-card.component.scss             |  27 +++++++
 .../email-bot-card.component.spec.ts          |  24 ++++++
 .../email-bot-card.component.ts               |  71 ++++++++++++++++++
 .../email-bot-info-dialog.component.html      |   1 +
 .../email-bot-info-dialog.component.scss      |   0
 .../email-bot-info-dialog.component.ts        |  12 +++
 kibicara-frontend/src/assets/email.png        | Bin 0 -> 7518 bytes
 8 files changed, 178 insertions(+)
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.html
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.scss
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.spec.ts
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.ts
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.html
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.scss
 create mode 100644 kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.ts
 create mode 100644 kibicara-frontend/src/assets/email.png

diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.html b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.html
new file mode 100644
index 0000000..21b7b60
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.html
@@ -0,0 +1,43 @@
+<div *ngIf="emails$ | async as emails">
+  <mat-card *ngIf="emails.length !== 0">
+    <mat-card-header>
+      <div mat-card-avatar class="email"></div>
+      <mat-card-title class="platform-title">
+        E-Mail
+        <button mat-icon-button aria-label="How to use">
+          <mat-icon
+            matTooltip="How to send and receive hood broadcast messages with email"
+            class="info-button"
+            (click)="onInfoClick()"
+            >info</mat-icon
+          >
+        </button>
+      </mat-card-title>
+    </mat-card-header>
+    <mat-card-content>
+      <h3>Subscribe to E-Mail list:</h3>
+      <form class="input" [formGroup]="form" (ngSubmit)="onSubmit()">
+        <mat-form-field>
+          <mat-label>Your E-Mail</mat-label>
+          <input formControlName="email" matInput />
+        </mat-form-field>
+        <button mat-icon-button color="primary" aria-label="Add" class="button">
+          <mat-icon>person_add</mat-icon>
+        </button>
+      </form>
+      <mat-divider></mat-divider>
+      <h3>Send e-mail to hood:</h3>
+      <mat-selection-list [multiple]="false" class="list">
+        <a
+          *ngFor="let email of emails"
+          href="mailto:{{ email.name }}@{{ emailDomain }}"
+        >
+          <mat-list-option>
+            {{ email.name }}@{{ emailDomain }}
+            <mat-divider></mat-divider>
+          </mat-list-option>
+        </a>
+      </mat-selection-list>
+    </mat-card-content>
+  </mat-card>
+</div>
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.scss b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.scss
new file mode 100644
index 0000000..6fe0019
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.scss
@@ -0,0 +1,27 @@
+.email {
+  background-image: url("../../../../assets/email.png");
+  background-size: cover;
+}
+
+.platform-title {
+  display: grid;
+  grid-template-columns: 1fr 40px;
+  width: 100%;
+  align-items: center;
+}
+
+.input {
+  display: grid;
+  grid-template-columns: 4fr 50px;
+  width: 100%;
+  margin: 10px;
+}
+
+.button {
+  align-self: stretch;
+}
+
+h3 {
+  margin-top: 20px;
+  margin-bottom: 0px;
+}
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.spec.ts b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.spec.ts
new file mode 100644
index 0000000..8ac68fa
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.spec.ts
@@ -0,0 +1,24 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { EmailBotCardComponent } from './email-bot-card.component';
+
+describe('EmailBotCardComponent', () => {
+  let component: EmailBotCardComponent;
+  let fixture: ComponentFixture<EmailBotCardComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [EmailBotCardComponent],
+    }).compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(EmailBotCardComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.ts b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.ts
new file mode 100644
index 0000000..3801c55
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-card.component.ts
@@ -0,0 +1,71 @@
+import { Component, OnInit, Input } from '@angular/core';
+import { EmailService } from 'src/app/core/api';
+import { environment } from 'src/environments/environment';
+import { FormGroup, FormBuilder, Validators } from '@angular/forms';
+import { EmailBotInfoDialogComponent } from './email-bot-info-dialog/email-bot-info-dialog.component';
+import { MatDialog } from '@angular/material/dialog';
+import { first } from 'rxjs/operators';
+import { MatSnackBar } from '@angular/material/snack-bar';
+
+@Component({
+  selector: 'app-email-bot-card',
+  templateUrl: './email-bot-card.component.html',
+  styleUrls: ['./email-bot-card.component.scss'],
+})
+export class EmailBotCardComponent implements OnInit {
+  @Input() hoodId;
+  emails$;
+  emailDomain = environment.EMAIL_DOMAIN;
+  form: FormGroup;
+
+  constructor(
+    private emailService: EmailService,
+    private formBuilder: FormBuilder,
+    private dialog: MatDialog,
+    private snackBar: MatSnackBar
+  ) {}
+
+  ngOnInit(): void {
+    this.emails$ = this.emailService.getEmailsPublic(this.hoodId);
+    this.form = this.formBuilder.group({
+      email: ['', Validators.required],
+    });
+  }
+
+  onInfoClick() {
+    this.dialog.open(EmailBotInfoDialogComponent);
+  }
+
+  onSubmit() {
+    if (this.form.invalid) {
+      return;
+    }
+
+    this.emailService
+      .subscribe(this.hoodId, {
+        email: this.form.controls.email.value,
+      })
+      .pipe(first())
+      .subscribe(
+        (data) => {
+          this.form.reset();
+          this.snackBar.open(
+            'Successful! Check your e-mail inbox to confirm your subscription.',
+            'Close',
+            {
+              duration: 2000,
+            }
+          );
+        },
+        (error) => {
+          this.snackBar.open(
+            'Could not send e-mail to this address. Try again!',
+            'Close',
+            {
+              duration: 2000,
+            }
+          );
+        }
+      );
+  }
+}
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.html b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.html
new file mode 100644
index 0000000..75c28c1
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.html
@@ -0,0 +1 @@
+<p>email-bot-info-dialog works!</p>
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.scss b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.ts b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.ts
new file mode 100644
index 0000000..2790404
--- /dev/null
+++ b/kibicara-frontend/src/app/platforms/email/email-bot-card/email-bot-info-dialog/email-bot-info-dialog.component.ts
@@ -0,0 +1,12 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-email-bot-info-dialog',
+  templateUrl: './email-bot-info-dialog.component.html',
+  styleUrls: ['./email-bot-info-dialog.component.scss'],
+})
+export class EmailBotInfoDialogComponent implements OnInit {
+  constructor() {}
+
+  ngOnInit(): void {}
+}
diff --git a/kibicara-frontend/src/assets/email.png b/kibicara-frontend/src/assets/email.png
new file mode 100644
index 0000000000000000000000000000000000000000..9580f5065275ecd31b67ea71b3a7db1301b19e8a
GIT binary patch
literal 7518
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
D7@r%e

literal 0
HcmV?d00001