diff --git a/src/app/songs/services/song-data.service.ts b/src/app/songs/services/song-data.service.ts index 228df50..e9df2fd 100644 --- a/src/app/songs/services/song-data.service.ts +++ b/src/app/songs/services/song-data.service.ts @@ -22,5 +22,11 @@ export class SongDataService { } public list = (): Observable => this.songs; + public read = (songId: string): Observable => + this.afs.doc('songs/' + songId).valueChanges().pipe(map(song => ({ + ...song, + id: songId + } as Song))) + } diff --git a/src/app/songs/services/song.service.ts b/src/app/songs/services/song.service.ts index a8545f0..5f88479 100644 --- a/src/app/songs/services/song.service.ts +++ b/src/app/songs/services/song.service.ts @@ -12,5 +12,6 @@ export class SongService { } public list = (): Observable => this.songDataService.list(); + public read = (songId: string): Observable => this.songDataService.read(songId); } diff --git a/src/app/songs/song-list/list-item/list-item.component.less b/src/app/songs/song-list/list-item/list-item.component.less index 6beff74..bb4506f 100644 --- a/src/app/songs/song-list/list-item/list-item.component.less +++ b/src/app/songs/song-list/list-item/list-item.component.less @@ -1,7 +1,7 @@ @import "../../../../styles/styles"; .list-item { - padding: 10px 20px; + padding: 5px 20px; display: grid; grid-template-columns: 50px auto 30px 100px; @@ -20,4 +20,5 @@ .number { font-size: 18px; font-weight: bold; + text-align: right; } diff --git a/src/app/songs/song/song.component.html b/src/app/songs/song/song.component.html index 4814b51..ae0a53d 100644 --- a/src/app/songs/song/song.component.html +++ b/src/app/songs/song/song.component.html @@ -1 +1,15 @@ -

song works with songId: {{songId}}!

+ +
+
{{song.text}}
+
+
+
Typ
+
{{song.type | songType}}
+
Tonart
+
{{song.key}}
+
Tempo
+
{{song.tempo}}
+
+
+
+
diff --git a/src/app/songs/song/song.component.less b/src/app/songs/song/song.component.less index e69de29..5dac69e 100644 --- a/src/app/songs/song/song.component.less +++ b/src/app/songs/song/song.component.less @@ -0,0 +1,15 @@ +.song { + display: grid; + grid-template-columns: 2fr 1fr; + column-gap: 20px; + margin-top: 20px; +} + +.text { + white-space: pre-wrap; +} + +.detail { + display: grid; + grid-template-columns: 1fr 2fr; +} diff --git a/src/app/songs/song/song.component.ts b/src/app/songs/song/song.component.ts index 142920a..cabdc30 100644 --- a/src/app/songs/song/song.component.ts +++ b/src/app/songs/song/song.component.ts @@ -1,5 +1,9 @@ import {Component, OnInit} from '@angular/core'; import {ActivatedRoute} from '@angular/router'; +import {SongService} from '../services/song.service'; +import {map, switchMap} from 'rxjs/operators'; +import {Song} from '../models/song'; +import {Observable} from 'rxjs'; @Component({ selector: 'app-song', @@ -7,13 +11,16 @@ import {ActivatedRoute} from '@angular/router'; styleUrls: ['./song.component.less'] }) export class SongComponent implements OnInit { - public songId: string; + public song$: Observable; - constructor(private activatedRoute: ActivatedRoute) { + constructor(private activatedRoute: ActivatedRoute, private songService: SongService) { } public ngOnInit(): void { - this.activatedRoute.params.subscribe(params => this.songId = params.songId); + this.song$ = this.activatedRoute.params.pipe( + map(param => param.songId), + switchMap(songId => this.songService.read(songId)) + ); } } diff --git a/src/app/songs/song/song.module.ts b/src/app/songs/song/song.module.ts new file mode 100644 index 0000000..31db537 --- /dev/null +++ b/src/app/songs/song/song.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import {SongComponent} from './song.component'; +import {CardModule} from '../../widget-modules/components/card/card.module'; +import {SongTypeTranslaterModule} from '../../widget-modules/pipes/song-type-translater/song-type-translater.module'; + + + +@NgModule({ + declarations: [SongComponent], + exports: [SongComponent], + imports: [ + CommonModule, + CardModule, + + SongTypeTranslaterModule + ] +}) +export class SongModule { } diff --git a/src/app/songs/songs.module.ts b/src/app/songs/songs.module.ts index a83d603..6ac192e 100644 --- a/src/app/songs/songs.module.ts +++ b/src/app/songs/songs.module.ts @@ -2,15 +2,16 @@ import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; import {SongsRoutingModule} from './songs-routing.module'; -import {SongComponent} from './song/song.component'; import {SongListModule} from './song-list/song-list.module'; +import {SongModule} from './song/song.module'; @NgModule({ - declarations: [SongComponent], + declarations: [], imports: [ CommonModule, SongsRoutingModule, SongListModule, + SongModule ] }) export class SongsModule { diff --git a/src/app/widget-modules/components/card/card.component.html b/src/app/widget-modules/components/card/card.component.html index c4656bb..c342020 100644 --- a/src/app/widget-modules/components/card/card.component.html +++ b/src/app/widget-modules/components/card/card.component.html @@ -1,3 +1,4 @@
+
{{heading}}
diff --git a/src/app/widget-modules/components/card/card.component.less b/src/app/widget-modules/components/card/card.component.less index 0727c43..dac68d4 100644 --- a/src/app/widget-modules/components/card/card.component.less +++ b/src/app/widget-modules/components/card/card.component.less @@ -11,3 +11,8 @@ padding: 20px; } } + +.heading { + font-size: 20px; + font-weight: bold; +} diff --git a/src/app/widget-modules/components/card/card.component.ts b/src/app/widget-modules/components/card/card.component.ts index a19b9f9..f6ad61a 100644 --- a/src/app/widget-modules/components/card/card.component.ts +++ b/src/app/widget-modules/components/card/card.component.ts @@ -7,6 +7,7 @@ import {Component, Input, OnInit} from '@angular/core'; }) export class CardComponent implements OnInit { @Input() padding = true; + @Input() heading: string; constructor() { } diff --git a/src/styles/styles.less b/src/styles/styles.less index 1dbbb4d..0082534 100644 --- a/src/styles/styles.less +++ b/src/styles/styles.less @@ -5,9 +5,9 @@ @transition: all 300ms ease-in-out; -html, body { - height: 100%; -} +//html, body { +// height: 100%; +//} body { margin: 0;