---
# System prepended metadata

title: '<center>3^rd^ July, 2019</center>'
tags: [Daily Internship Documentation]

---

# <center>3^rd^ July, 2019</center>

###### tags: `Daily Internship Documentation`
---
## 1^st^ day of Internship

## Summary
Today, I continue the progress of the Dashboard page that I made during the preparation time. I could make the dashboard page adjust the size of the screen size; create some icons for the buttons; and smarten the header, content, and report status section.

Beside doing the job above, today I have a welcoming party from some professors and laboratory assistants.

---
## Documentation

### 1. Dashboard Page
#### 1.1 dashboard.page.ts

1. Import HostListener module to listen for new event, such as screen size change. **(line 4)**
2. Create some variables to be parsed into html which contain the pixel value for height, width, or distance from page border. **(line 24-34)**
3. Create getScreenSize() function to track the change of screen size and parse it to html in real time. **(line 45-58)**

```htmlmixed=
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { HostListener } from "@angular/core";
import { Router } from '@angular/router';

@Component({
  selector: 'app-dashboard',
  templateUrl: './dashboard.page.html',
  styleUrls: ['./dashboard.page.scss'],
})

export class DashboardPage implements OnInit {
  private device_id = 'T4_07_01';
  
  //variables for maintenance progress information
  private url_maintenance_progress = 'https://smartcampus.et.ntust.edu.tw:5425/Dispenser/Repair?Device_ID=' + this.device_id;
  private maintenance_status: any;
  private maintenance_data: any;
  private no_report_problem: boolean;

  //variables for dispenser picture
  public url_dispenser_picture = 'https://smartcampus.et.ntust.edu.tw:5425/Dispenser/Image?Device_ID=' + this.device_id;
  
  //variables for screen resolution
  public screenHeight: any;
  public screenWidth: any;

  public headerHeight: any;

  public jellyfishIconTop: any;
  public jellyfishIconLeft: any;

  public bodyButtonsHeight: any;
  public reportStatusHeight: any;

  //Variable for tracking progress
  public trackIsActive: boolean;
  
  constructor(private http:HttpClient) {  }
  ngOnInit() {
    this.getScreenSize();
  }
  
    @HostListener('window:resize', ['$event'])
    getScreenSize(event?: any) {
      this.screenWidth = window.innerWidth;
      this.screenHeight = window.innerHeight;
      
      this.headerHeight = this.screenHeight * 0.7;
      
      this.jellyfishIconTop = this.headerHeight - 60;
      this.jellyfishIconLeft = this.screenWidth/2 - 60;

      this.bodyButtonsHeight = window.innerHeight * 0.2;
      this.reportStatusHeight = window.innerHeight * 0.1;
      //console.log("Screen Width: " + this.screenWidth);
      //console.log("Jellyfish position: " + this.jellyfishIconLeft);
    }

    maintenanceStatus(){
      this.http.get(this.url_maintenance_progress).subscribe(res => {
        this.maintenance_data = res["Data"];
        this.maintenance_status = this.maintenance_data["status"];
      })
      
      if(this.maintenance_status != 4){
        this.no_report_problem = true;
      }else{
        this.no_report_problem = false;
      }
  
      console.log('Report status: ' + this.no_report_problem);
    }
    
    getDispenserPictureUrl(){
      return this.url_dispenser_picture;
    }
}
```

#### 1.2 dashboard.page.html

1. Get the header height from typescript and set no border to remove the bottom border between header and content. **(line 1)**
2. Set the dispenser image as background from typescript. **(line 2)**
3. Create overlay div over the background. **(line 4)**
4. Create jellyfishIcon and set the top distance according to the value that parsed from typescript. **(line 17-20)**
5. Set the bodyButtons height. **(line 27)**
6. Create report and nearby button. **(line 28-36)**
7. Create report status. **(line 39-41)**

```htmlmixed=
<ion-header no-border [style.height.px]="headerHeight">
    <div class="background-image" [ngStyle]="{'background-image': 'url(' + url_dispenser_picture + ')'}">

      <div class="overlay">
        <div class="logo">
          <img src="assets/dashboard/acuo_logo.png">
        </div>

        <div class="trackButton">
            <ion-icon slot="icon-only" name="star-outline" size="large" color="white"></ion-icon>
        </div>

        <div class="optionButton">
          <ion-icon name="more" size="large"></ion-icon>
        </div>

        <div class="jellyfishIcon" [style.top.px]="jellyfishIconTop" [style.left.px]="jellyfishIconLeft">
          <img src="assets/dashboard/jellyfishIcon.png" height="120px" width="120px">
        </div>
      </div>

    </div>
</ion-header>

<ion-content>

  <div class="bodyButtons" [style.height.px]="bodyButtonsHeight">
    <div class="reportButton">
      <img src="assets/dashboard/warning.png">
      <p>Report problem</p>
    </div>

    <div class="nearbyButton">
      <img src="assets/dashboard/gps.png">
      <p>Nearby dispenser</p>
    </div>
  </div>

  <div class="reportStatus" [style.height.px]=reportStatusHeight>
    <ion-text color="#676563">No report problem</ion-text>
  </div>

</ion-content>
```

#### 1.3 dashboard.page.scss

1. Create .ion-header to set width & positioning type for the ion-header tag. **(line 2-5)**
2. Create .overlay to set an overlay over the background image. **(line 15-20)**
3. Create .jellyfishIcon to set the width of icon and positioning type. **(line 22-25)**
4. Create .logo, .optionButton and .trackButton to set the height & width, positioning type, distance from border, color, and icon size. **(line 27-43)**
5. Create .bodyButtons to separate the space between buttons in the content and report status. **(line 55-57)**
6. Create .reportButton and .nearbyButton to set the height & width, positioning type, distance from border, and color. **(line 59-74)**
7. Create .reportStatus to set the position of text, distance from bottom, and make border-top. **(line 76-80)**

```htmlmixed=
// Header Part CSS
.ion-header {
    position: relative;
    width:100%;
}

.background-image{
    position: relative;
    background-repeat: no-repeat;
    background-size: 100%;
    height: 100%;
    width: 100%;
}

.overlay {
    z-index: 1;
    height: 100%;
    width: 100%;
    background-color: rgba($color: #000000, $alpha: 0.5);
}

.jellyfishIcon{
    position: absolute;
    width: 100%;
}

.optionButton, .trackButton, .logo{
    position: absolute;
    top: 20px;
}

.optionButton, .trackButton{
    height:40px;
    width:40px;
    color: white;
    size: 100px;
}

.logo {
    height: 50px;
    width: 90px;
    left: 33px;
}

.optionButton{
    right: 20px;
}

.trackButton{
    right: 70px;
}

//Content Part CSS

.bodyButtons{
    position: relative;
}

.reportButton, .nearbyButton{
    position: relative;
    text-align: center;
    display: inline-block;
    top: 10px;
    width: 50%;
    height: 70px;
}

.reportButton{
    left: 0px;
}

.nearbyButton{
    right: 0px;
}

.reportStatus{
    text-align: center;
    bottom: 0px;
    border-top: 1px solid #e9e9e9;
}
```
---
## Result

![](https://i.imgur.com/wf4MuZm.png)
