Skip to content

Commit d8bf0fb

Browse files
Babali42Baptiste LYET
and
Baptiste LYET
authored
création liste (#18)
Co-authored-by: Baptiste LYET <[email protected]>
1 parent 9065d32 commit d8bf0fb

File tree

5 files changed

+79
-36
lines changed

5 files changed

+79
-36
lines changed

src/app/app.component.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<div class="main-container" [ngClass]="{'flex': !isMobileDisplay}">
22
<div class="flex column left-menu" *ngIf="!isMobileDisplay">
33
<div class="header"> DRUMS<br> PATTERN<br> LIBRARY</div>
4-
<div class="flex menu genre mt-40">
4+
<div class="flex menu genre mt-40" *ngIf="musicGenres.length != 0">
55
<h2>Genre</h2>
66
<div class="button pointer" *ngFor="let genre of musicGenres; let i = index;" (click)="selectGenre(i)"
77
[ngClass]="{'selected':i==selectedGenreIndex}">{{ genre.label }}
88
</div>
99
</div>
10-
<div class="flex menu mt-40">
10+
<div class="flex menu mt-40" *ngIf="musicGenres.length != 0">
1111
<h2>Sous-genre</h2>
1212
<div class="button pointer" *ngFor="let subgenre of musicGenres[selectedGenreIndex].subGenres; let i = index;"
1313
(click)="selectSubGenre(i)" [ngClass]="{'selected':i==selectedSubGenreIndex}">{{ subgenre.label }}
@@ -16,10 +16,10 @@ <h2>Sous-genre</h2>
1616
</div>
1717
<div *ngIf="isMobileDisplay">
1818
<div class="header-mobile">DRUMS PATTERN LIBRARY</div>
19-
<div class="flex mobile-menu">
19+
<div class="flex mobile-menu" *ngIf="musicGenres.length != 0">
2020
<a class="item" *ngFor="let genre of musicGenres; let i = index" (click)="selectGenre(i)">{{ genre.label }}</a>
2121
</div>
22-
<div class="flex mobile-menu">
22+
<div class="flex mobile-menu" *ngIf="musicGenres.length != 0">
2323
<a class="item" *ngFor="let subGenre of musicGenres[selectedGenreIndex].subGenres; let i = index"
2424
(click)="selectSubGenre(i)">{{ subGenre.label }}</a>
2525
</div>

src/app/app.component.ts

+8-22
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {Component, OnInit} from '@angular/core';
22
import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';
3-
import {Subgenre} from './models/subgenre';
43
import {Genre} from './models/genre';
54
import {BehaviorSubject} from 'rxjs';
5+
import {DataService} from './services/data.service';
66

77
@Component({
88
selector: 'app-root',
@@ -13,28 +13,10 @@ export class AppComponent implements OnInit {
1313
isMobileDisplay: boolean = true;
1414
selectedGenreIndex: number = 0;
1515
selectedSubGenreIndex: number = 0;
16-
musicGenres: Genre[] = [
17-
new Genre('Metal',
18-
[
19-
new Subgenre('Metal', 'metal'),
20-
new Subgenre('Rock', 'rock-beat'),
21-
new Subgenre('Rock variation', 'rock-beat-variation'),
22-
new Subgenre('Half time groove', 'half-time-groove'),
23-
]),
24-
new Genre('Techno', [
25-
new Subgenre('Basique', 'techno'),
26-
]),
27-
new Genre('Garage', [
28-
new Subgenre('Drum & Bass', 'drum-n-bass'),
29-
new Subgenre('Garage - 2 step', 'garage'),
30-
]),
31-
new Genre('Trance', [
32-
new Subgenre('Psytrance', 'psytrance'),
33-
])
34-
];
16+
musicGenres: Genre[] = [];
3517
fileNameBehaviourSubject: BehaviorSubject<string>;
3618

37-
constructor(private responsive: BreakpointObserver) {
19+
constructor(private responsive: BreakpointObserver, private dataService: DataService) {
3820
this.fileNameBehaviourSubject = new BehaviorSubject<string>('metal');
3921
}
4022

@@ -45,6 +27,10 @@ export class AppComponent implements OnInit {
4527
.subscribe(result => {
4628
this.isMobileDisplay = !result.matches;
4729
});
30+
31+
this.dataService.getData<Genre[]>('genres').subscribe((result: Genre[]) => {
32+
this.musicGenres = result;
33+
});
4834
}
4935

5036
selectGenre(i: number) {
@@ -58,7 +44,7 @@ export class AppComponent implements OnInit {
5844
this.updateFileName();
5945
}
6046

61-
private updateFileName() {
47+
updateFileName() {
6248
const fileName = this.musicGenres[this.selectedGenreIndex].subGenres[this.selectedSubGenreIndex].fileName;
6349
this.fileNameBehaviourSubject.next(fileName);
6450
}

src/app/components/sequencer/sequencer.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class SequencerComponent implements OnInit {
2121

2222
ngOnInit(): void {
2323
this.fileNameBehaviourSubject.subscribe(fileName => {
24-
this.dataService.getData(fileName).subscribe((result: JsonBeat) => {
24+
this.dataService.getData<JsonBeat>(fileName, 'beats/').subscribe((result: JsonBeat) => {
2525
this.beat = Convert.toBeat(result);
2626
if (this.soundService.isPlaying)
2727
this.soundService.pause();

src/app/services/data.service.ts

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
1-
import { Injectable } from '@angular/core';
2-
import { HttpClient } from '@angular/common/http';
3-
import { Observable } from 'rxjs';
4-
import {JsonBeat} from "../models/primary/jsonBeat";
1+
import {Injectable} from '@angular/core';
2+
import {HttpClient} from '@angular/common/http';
3+
import {Observable} from 'rxjs';
54

65
@Injectable({
76
providedIn: 'root'
87
})
98
export class DataService {
10-
private apiUrl = 'assets/beats/';
9+
private apiUrl = 'assets/';
1110
private fileExtension = '.json';
1211

13-
constructor(private http: HttpClient) { }
12+
constructor(private http: HttpClient) {
13+
}
1414

15-
getData(fileName: string): Observable<JsonBeat> {
16-
const url = this.apiUrl + fileName + this.fileExtension;
17-
return this.http.get<JsonBeat>(url);
15+
getData<T>(fileName: string, folder: string | undefined = undefined): Observable<T> {
16+
let url = this.apiUrl;
17+
if (folder)
18+
url += folder;
19+
url += fileName + this.fileExtension;
20+
return this.http.get<T>(url);
1821
}
1922
}

src/assets/genres.json

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
[
2+
{
3+
"label": "Metal",
4+
"subGenres": [
5+
{
6+
"label": "Metal",
7+
"fileName": "metal"
8+
},
9+
{
10+
"label": "Rock",
11+
"fileName": "rock-beat"
12+
},
13+
{
14+
"label": "Rock variation",
15+
"fileName": "rock-beat-variation"
16+
},
17+
{
18+
"label": "Half time groove",
19+
"fileName": "half-time-groove"
20+
}
21+
]
22+
},
23+
{
24+
"label": "Techno",
25+
"subGenres" : [
26+
{
27+
"label": "4 on the floor",
28+
"fileName": "techno"
29+
}
30+
]
31+
},
32+
{
33+
"label": "Garage",
34+
"subGenres" : [
35+
{
36+
"label": "2 Step",
37+
"fileName": "garage"
38+
},
39+
{
40+
"label": "Drum & Bass",
41+
"fileName": "drum-n-bass"
42+
}
43+
]
44+
},
45+
{
46+
"label": "Trance",
47+
"subGenres" : [
48+
{
49+
"label": "Psytrance",
50+
"fileName": "psytrance"
51+
}
52+
]
53+
}
54+
]

0 commit comments

Comments
 (0)