File

src/app/components/book-view/book-view.component.ts

Implements

OnInit

Metadata

selector app-book-view
styleUrls ./book-view.component.scss
templateUrl ./book-view.component.html

Index

Properties
Methods
Inputs

Constructor

constructor(modalController: ModalController, bookService: BookService)
Parameters :
Name Type Optional
modalController ModalController No
bookService BookService No

Inputs

book
Type : Book

Methods

ngOnInit
ngOnInit()
Returns : void

Properties

availability
closeModal
Default value : () => {...}

Closing the book view modal

saveBook
Default value : () => {...}

Adding book to the personal book shelf

import { Component, OnInit, Input } from '@angular/core';
import { ModalController } from '@ionic/angular';
import { BookService } from 'src/app/services/book/book.service';
import { Book } from 'src/app/models/Book';

@Component({
  selector: 'app-book-view',
  templateUrl: './book-view.component.html',
  styleUrls: ['./book-view.component.scss']
})
export class BookViewComponent implements OnInit {
  constructor(private modalController: ModalController, private bookService: BookService) {}
  @Input() book: Book;
  availability;
  ngOnInit() {
    this.bookService.checkBookAvailabilityStatus(this.book.biblionumber).then(data => {
      console.log('data', data['data']['loanDate']);
      this.availability = data['data']['loanDate'];
    });
  }

  /**
   * Closing the book view modal
   */
  closeModal = () => {
    this.modalController.dismiss();
  };

  /**
   * Adding book to the personal book shelf
   */
  saveBook = () => {
    this.bookService.addBookToShelf(this.book);
  };
}
<ion-content>
  <ion-card>
    <ion-card-header class="book-card">
      <img [src]="book.url" alt="libri" class="book-image" />
      <div class="book-header">
        <div class="book-title">{{ book.title }}</div>
        <div class="book-author">{{ book.author }}</div>
      </div>
    </ion-card-header>
    <ion-card-content>
      <ion-grid>
        <ion-row>
          <ion-col sizeXs="12" sizeXl="4"><ion-text class="title">Availability</ion-text></ion-col>
          <ion-col sizeXs="12" sizeXl="8">
            <div *ngIf="availability !== ''" style="display: flex;align-items: center">
              <span class="dot-unavailable"></span>Back by : {{ availability }}
            </div>
            <div *ngIf="availability === ''">
              <span class="dot-available"> </span>
              Available
            </div>
          </ion-col>
        </ion-row>
        <ion-row>
          <ion-col sizeXs="12" sizeXl="4"><ion-text class="title">Description</ion-text></ion-col>
          <ion-col sizeXs="12" sizeXl="8">
            {{ book.abstract }}
          </ion-col>
        </ion-row>
        <ion-row>
          <ion-col sizeXs="12" sizeXl="4">
            <ion-text class="title">Copyright date</ion-text>
          </ion-col>
          <ion-col sizeXs="12" sizeXl="8">
            {{ book.copyrightdate }}
          </ion-col>
        </ion-row>
        <ion-row>
          <ion-col sizeXs="12" sizeXl="4">
            <ion-text class="title">ISBN</ion-text>
          </ion-col>
          <ion-col sizeXs="12" sizeXl="8">
            {{ book.isbn }}
          </ion-col>
        </ion-row>
      </ion-grid>
    </ion-card-content>
  </ion-card>
</ion-content>
<ion-footer class="button-panel">
  <ion-button color="danger" (click)="closeModal()" fill="outline" size="small">
    <ion-icon name="close-circle-outline"></ion-icon> close
  </ion-button>
  <ion-button color="primary" fill="outline" size="small" (click)="saveBook()"
    ><ion-icon name="bookmark"></ion-icon>Save</ion-button
  >
  <ion-button color="warning" fill="outline" size="small"
    ><ion-icon name="basket"></ion-icon>Reserve</ion-button
  >
</ion-footer>

./book-view.component.scss

ion-card-header {
  padding: 0px;
  position: relative;
  text-align: left;
}

.book-title {
  font-size: 2em;
  width: 100%;
  font-weight: bold;
  color: white;
}

.book-author {
  font-size: 1em;
  width: 100%;
  color: #fff;
  opacity: 1;
}

.book-image {
  width: 50vw;
  height: auto;
  margin: 0 auto;
}

.book-header {
  position: absolute;
  bottom: 2%;
  opacity: 0.4;
  background-color: black;
}

.book-card {
  margin: 0 auto;
}

.button-panel {
  display: flex;
  justify-content: space-evenly;
}

.title {
  font-weight: bold;
}

.dot-unavailable {
  padding-right: 10px;
  height: 25px;
  width: 25px;
  background-color: red;
  border-radius: 50%;
  display: inline-block;
}

.dot-available {
  padding-right: 10px;

  height: 25px;
  width: 25px;
  background-color: green;
  border-radius: 50%;
  display: inline-block;
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""