From ff3a1a3523e9febebcd1babd2a9bcd58854933d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Phillip=20K=C3=BChne?= Date: Thu, 26 Mar 2020 02:45:55 +0100 Subject: [PATCH] Add search --- .../ng-karaoqueue/src/app/app.component.ts | 10 ++++-- .../song-search/song-search.component.html | 31 +++++++++++++++- .../app/song-search/song-search.component.ts | 29 +++++++++++++-- .../src/app/song-service.service.ts | 35 ++++++++++++++++--- frontend/ng-karaoqueue/src/assets/config.json | 3 ++ 5 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 frontend/ng-karaoqueue/src/assets/config.json diff --git a/frontend/ng-karaoqueue/src/app/app.component.ts b/frontend/ng-karaoqueue/src/app/app.component.ts index 34a4332..53200a0 100644 --- a/frontend/ng-karaoqueue/src/app/app.component.ts +++ b/frontend/ng-karaoqueue/src/app/app.component.ts @@ -1,10 +1,16 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { RuntimeConfigLoaderService } from 'runtime-config-loader'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) -export class AppComponent { +export class AppComponent implements OnInit{ + + constructor(private configSvc: RuntimeConfigLoaderService) {} + ngOnInit(): void { + console.log("API at ",this.configSvc.getConfigObjectKey("api")); + } title = 'KaraoQueue'; } diff --git a/frontend/ng-karaoqueue/src/app/song-search/song-search.component.html b/frontend/ng-karaoqueue/src/app/song-search/song-search.component.html index 113315f..a6385bd 100644 --- a/frontend/ng-karaoqueue/src/app/song-search/song-search.component.html +++ b/frontend/ng-karaoqueue/src/app/song-search/song-search.component.html @@ -1 +1,30 @@ -

song-search works!

+ + Suche... + + + + + {{song.artist.name}} - {{song.title}} + + + + + + + + + + + + + + {{song.genres[0].name}}  {{song.languages[0].name}} + + + + + + diff --git a/frontend/ng-karaoqueue/src/app/song-search/song-search.component.ts b/frontend/ng-karaoqueue/src/app/song-search/song-search.component.ts index 755e1ee..7a4d796 100644 --- a/frontend/ng-karaoqueue/src/app/song-search/song-search.component.ts +++ b/frontend/ng-karaoqueue/src/app/song-search/song-search.component.ts @@ -1,15 +1,40 @@ import { Component, OnInit } from '@angular/core'; +import { SongServiceService } from "../song-service.service"; +import { Song } from '../models/song.model'; +import { Subject } from 'rxjs'; +import { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'; @Component({ selector: 'app-song-search', templateUrl: './song-search.component.html', - styleUrls: ['./song-search.component.css'] + styleUrls: ['./song-search.component.scss'] }) export class SongSearchComponent implements OnInit { - constructor() { } + private searchSub$ = new Subject(); + + constructor(private songServiceService: SongServiceService) { } + + songs: Array = new Array(); + + updateSongs(text: string) { + this.songServiceService.searchSongByText(text).subscribe(x => { + console.log(x); + this.songs = x; + }); + } + + applyFilter(filterValue: string) { + this.searchSub$.next(filterValue) + } ngOnInit(): void { + this.searchSub$.pipe( + debounceTime(400), + distinctUntilChanged() + ).subscribe((filterValue: string) => { + this.updateSongs(filterValue); + }); } } diff --git a/frontend/ng-karaoqueue/src/app/song-service.service.ts b/frontend/ng-karaoqueue/src/app/song-service.service.ts index b74723e..bd84339 100644 --- a/frontend/ng-karaoqueue/src/app/song-service.service.ts +++ b/frontend/ng-karaoqueue/src/app/song-service.service.ts @@ -1,17 +1,42 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from "@angular/common/http"; import { Song } from './models/song.model'; +import { Artist } from './models/artist.model'; +import { Genre } from './models/genre.model'; +import { Language } from './models/language.model'; +import { RuntimeConfigLoaderService } from 'runtime-config-loader'; +import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class SongServiceService { + private api: string; constructor( - private http: HttpClient - ) {} - - searchSongByText(text:string):Array { - return [new Song()]; + private http: HttpClient, + private configSvc: RuntimeConfigLoaderService + ) { + this.api=configSvc.getConfigObjectKey("api"); } + + searchSongByText(text: string): Observable> { + + + let out = new Array(); + + this.http.get(this.api +"/songs/compl?search="+text).subscribe((data: Observable) => { + data.forEach(element => { + out.push(new Song(element["Title"],new Artist(42,element["Artist"]),element["Id"],element["Duo"],element["Explicit"],42,[new Genre(42,element["Styles"])],[new Language(42, element["Languages"])])); + }); + }); + + const observable = new Observable>( subscriber => { + subscriber.next(out); + }) + + + return observable; + } + } diff --git a/frontend/ng-karaoqueue/src/assets/config.json b/frontend/ng-karaoqueue/src/assets/config.json new file mode 100644 index 0000000..51bbfff --- /dev/null +++ b/frontend/ng-karaoqueue/src/assets/config.json @@ -0,0 +1,3 @@ +{ + "api":"http://localhost:5000/api" +}