File

apps/demo/src/app/pages/projects-page/projects-page.component.ts

Implements

OnDestroy AfterViewInit

Metadata

changeDetection ChangeDetectionStrategy.OnPush
selector projects-page
templateUrl ./projects-page.component.html

Index

Properties
Methods

Constructor

constructor(activatedRoute: ActivatedRoute, _userPermPipe: UserPermPipe, _authService: AuthService)
Parameters :
Name Type Optional
activatedRoute ActivatedRoute No
_userPermPipe UserPermPipe No
_authService AuthService No

Methods

ngAfterViewInit
ngAfterViewInit()
Returns : void
ngOnDestroy
ngOnDestroy()
Returns : void
onSelectProjects
onSelectProjects(projects?: Project[])
Parameters :
Name Type Optional
projects Project[] Yes
Returns : void

Properties

Private _destroyed$
Type : Subject<boolean>
Default value : new Subject<boolean>()
Public activatedRoute
Type : ActivatedRoute
apiUrl
Default value : environment.apiUrl
projectsGrid
Type : ProjectsGridComponent
Decorators :
@ViewChild('projectsGrid')
tasksGrid
Type : TasksGridComponent
Decorators :
@ViewChild('tasksGrid')
import { AfterViewInit, ChangeDetectionStrategy, Component, OnDestroy, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { AuthService, UserPermPipe } from '@rucken/core';
import { Project } from '@rucken/todo-core';
import { ProjectsGridComponent, TasksGridComponent } from '@rucken/todo-web';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { environment } from '../../../environments/environment';
import { BindIoInner } from 'ngx-bind-io';

@BindIoInner()
@Component({
  selector: 'projects-page',
  templateUrl: './projects-page.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class ProjectsPageComponent implements OnDestroy, AfterViewInit {
  @ViewChild('projectsGrid')
  projectsGrid: ProjectsGridComponent;
  @ViewChild('tasksGrid')
  tasksGrid: TasksGridComponent;

  apiUrl = environment.apiUrl;

  private _destroyed$: Subject<boolean> = new Subject<boolean>();

  constructor(
    public activatedRoute: ActivatedRoute,
    private _userPermPipe: UserPermPipe,
    private _authService: AuthService
  ) {}
  ngAfterViewInit() {
    this._authService.current$.pipe(takeUntil(this._destroyed$)).subscribe(_ => {
      if (this.projectsGrid) {
        this.projectsGrid.onReload();
      }
    });
    this.projectsGrid.items$.pipe(takeUntil(this._destroyed$)).subscribe(items => {
      if (items.length === 0) {
        this.onSelectProjects();
      }
    });
  }
  ngOnDestroy() {
    this._destroyed$.next(true);
    this._destroyed$.complete();
  }
  onSelectProjects(projects?: Project[]) {
    const project = projects && projects[0] ? projects[0] : undefined;
    if (!project) {
      this.tasksGrid.readonly = true;
      this.tasksGrid.project = undefined;
      this.tasksGrid.onChangeFilter();
    } else {
      this.tasksGrid.readonly = !this._userPermPipe.transform(project);
      if (this.tasksGrid.project !== project) {
        this.tasksGrid.project = project;
        this.tasksGrid.onChangeFilter();
      }
    }
  }
}
<div class="container-fluid">
    <div class="row">
        <div class="col-md-5">
            <h4 translate>Projects</h4>
            <projects-grid
                [apiUrl]="apiUrl"
                (selected)="onSelectProjects($event)"
                [title]="undefined"
                [readonly]="!('change_project'|perm:false|async)"
                #projectsGrid></projects-grid>
        </div>
        <div class="col-md-7">
            <h4 translate>Tasks of project</h4>
            <tasks-grid
                [apiUrl]="apiUrl"
                [title]="undefined"
                [readonly]="true"
                #tasksGrid></tasks-grid>
        </div>
    </div>
</div>
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""