File

src/app/pages/event-page/event-page.component.ts

Description

Event page component

Implements

OnInit OnDestroy

Example

Metadata

selector app-event-page
styleUrls event-page.component.scss
templateUrl ./event-page.component.html

Index

Properties
Methods

Constructor

constructor(router: ActivatedRoute, afs: FirebaseFirestoreService, auth: FirebaseAuthService)

Constructor

Parameters :
Name Type Optional Description
router ActivatedRoute

Activated Route

afs FirebaseFirestoreService

Firebase Firestore Service

auth FirebaseAuthService

Methods

ngOnDestroy
ngOnDestroy()

Unload component

Returns : void
ngOnInit
ngOnInit()

Initialize component

Returns : void

Properties

Public event
event: Event
Type : Event

Event

eventDeleted
eventDeleted: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild

TemplateRef event deleted

eventNotFound
eventNotFound: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild

TemplateRef event not found

eventPhotographer
eventPhotographer: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild

TemplateRef event as photographer

eventUser
eventUser: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild

TemplateRef event as user

Private id
id: string
Type : string

Event ID

loadingTmpl
loadingTmpl: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ViewChild

TemplateRef loading

Private log
log:
Default value : Log.create('EventPageComponent')

Logger

Private sub
sub: any
Type : any

Router sub

Public template
template: TemplateRef<any>
Type : TemplateRef<any>

Template ref

Public user
user: User
Type : User

User

import {
  Component,
  OnDestroy,
  OnInit,
  TemplateRef,
  ViewChild
} from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Log } from 'ng2-logger';

import { Event } from '../../classes/event';
import { User } from '../../classes/user';
import { FirebaseAuthService } from '../../services/auth/firebase-auth/firebase-auth.service';
import { FirebaseFirestoreService } from '../../services/firebase/firestore/firebase-firestore.service';

/**
 * Event page component
 * @author Daniel Sogl
 */
@Component({
  selector: 'app-event-page',
  templateUrl: './event-page.component.html',
  styleUrls: ['./event-page.component.scss']
})
export class EventPageComponent implements OnInit, OnDestroy {
  /** Logger */
  private log = Log.create('EventPageComponent');

  /** Router sub */
  private sub: any;
  /** Event ID */
  private id: string;
  /** Event */
  public event: Event;
  /** User */
  public user: User;

  /** Template ref  */
  public template: TemplateRef<any>;

  /** TemplateRef loading */
  @ViewChild('loadingTmpl') loadingTmpl: TemplateRef<any>;
  /** TemplateRef event as user */
  @ViewChild('eventUser') eventUser: TemplateRef<any>;
  /** TemplateRef event as photographer */
  @ViewChild('eventPhotographer') eventPhotographer: TemplateRef<any>;
  /** TemplateRef event not found */
  @ViewChild('eventNotFound') eventNotFound: TemplateRef<any>;
  /** TemplateRef event deleted */
  @ViewChild('eventDeleted') eventDeleted: TemplateRef<any>;

  /**
   * Constructor
   * @param  {ActivatedRoute} router Activated Route
   * @param  {FirebaseFirestoreService} afs Firebase Firestore Service
   * @param  {FirebaseAuthService} privaauthteauth Firebase Auth Service
   */
  constructor(
    private router: ActivatedRoute,
    private afs: FirebaseFirestoreService,
    private auth: FirebaseAuthService
  ) {}

  /**
   * Initialize component
   */
  ngOnInit() {
    this.log.color = 'orange';
    this.log.d('Component initialized');
    this.template = this.loadingTmpl;
    this.sub = this.router.params.subscribe(params => {
      this.id = params['id'];
      this.log.d('Event ID', this.id);
      if (this.id) {
        this.afs
          .getEvent(this.id)
          .valueChanges()
          .subscribe(event => {
            if (event) {
              this.event = event;
              this.event.id = this.id;
              this.log.d('Loaded event', this.event);
              if (event.deleted) {
                this.template = this.eventDeleted;
              } else if (this.auth.getCurrentFirebaseUser()) {
                this.auth.user.subscribe(user => {
                  if (user) {
                    this.user = user;
                    this.log.d('Loaded user', this.user);
                    if (this.event.photographerUid === this.user.uid) {
                      this.template = this.eventPhotographer;
                    } else {
                      this.template = this.eventUser;
                    }
                  } else {
                    this.template = this.eventUser;
                  }
                });
              } else {
                this.template = this.eventUser;
              }
            } else {
              this.template = this.eventNotFound;
            }
          });
      }
    });
  }

  /**
   * Unload component
   */
  ngOnDestroy() {
    this.sub.unsubscribe();
  }
}
<div class="row mt-5 pt-5">
  <div class="col text-center">
    <ng-container *ngTemplateOutlet="template"></ng-container>
  </div>
</div>

<ng-template #loadingTmpl>
  <mdb-spinner spinnerType="big" spinnerColor="blue"></mdb-spinner>
</ng-template>

<ng-template #eventUser>
  <app-event-user [user]="user" [event]="event"></app-event-user>
</ng-template>

<ng-template #eventPhotographer>
  <app-event-photographer [user]="user" [event]="event"></app-event-photographer>
</ng-template>

<ng-template #eventNotFound>
  <h1>Event not found</h1>
</ng-template>

<ng-template #eventDeleted>
  <h1>Event deleted</h1>
</ng-template>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""