File

src/app/courses/course-grid/course-grid.component.ts

Metadata

selector app-course-grid
styleUrls course-grid.component.scss
templateUrl course-grid.component.html

Constructor

constructor(courses: any)

Methods

isSelected
isSelected(item: string)
Returns: boolean
toggleSelection
toggleSelection(item: string)
Returns: void
filterItems
filterItems()
Returns: void

Properties

categories
categories: string[]
classes
classes: ClassData[]
languages
languages: string[]
selected
selected: string[]
visibleClasses
visibleClasses: ClassData[]
visibleClassesSet
visibleClassesSet: any
import { Component, OnInit, ViewChild } from '@angular/core';
import { ClassService } from 'src/app/services/classes/class.service';
import { ClassData } from '../../shared/class/class'

@Component({
  selector: 'app-course-grid',
  templateUrl: './course-grid.component.html',
  styleUrls: ['./course-grid.component.scss']
})
export class CourseGridComponent implements OnInit {
  classes: ClassData[] = []
  categories: string[] = ["Applications", "Systems", "Theory", "Elective"]
  languages: string[] = ["C", "C++", "Kotlin", "GoLang", "MATLAB", "Python", "Rust", "No Code"]
  selected: string[] = []
  visibleClasses: ClassData[] = []
  visibleClassesSet: Set<ClassData> = new Set()

  constructor(
    private courses: ClassService,
  ) { 
    if(this.courses.website == "dataScience") {
      this.categories = ["foundations", "elective"]
      this.languages = ['Python', 'R', 'No Code']
    }
  }

  ngOnInit(): void {
    this.courses.classes.subscribe(data => {
      this.classes = data.sort((a, b) => (a.ClassName > b.ClassName) ? 1 : -1)
      this.filterItems()
    })
    document.getElementsByClassName("mat-drawer-content")[0].scroll(0,0)
  }

  isSelected(item: string): boolean {
    return this.selected.includes(item)
  }

  toggleSelection(item: string): void {
    if(this.selected.includes(item)){
      this.selected.splice(this.selected.indexOf(item), 1)
    } else {
      this.selected.push(item)
    }
    this.filterItems()
  }

  filterItems(): void {
    // this.visibleClasses = []
    this.visibleClassesSet.clear()
    let selectedLangs: ClassData[] = []
    let selectedCats: ClassData[] = []
    if(this.selected.length === 0){
      this.classes.forEach(data => {
        this.visibleClassesSet.add(data)
      })
    } else {
      for(var i=0; i<this.selected.length; i++){
        let item = this.selected[i]
        if(this.categories.includes(item)){
          this.classes.filter(x => x.category === item).forEach(data => {
            this.visibleClassesSet.add(data)
          })
        } else {
          this.classes.filter(x => x.languages?.includes(item)).forEach(data => {
            this.visibleClassesSet.add(data)
          })
        }
      }
      if (selectedLangs.length === 0 || selectedCats.length === 0){
        selectedCats.forEach(data => {
          this.visibleClassesSet.add(data)
        })
      } else {
        selectedLangs.filter(x => selectedCats.includes(x)).forEach(data => {
          this.visibleClassesSet.add(data)
        })
      }
    }
    this.visibleClasses = Array.from(this.visibleClassesSet)
    this.visibleClasses.sort((a, b) => (a.ClassName > b.ClassName) ? 1 : -1)
  }
}

results matching ""

    No results matching ""