main-page.component.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <!-- app.component.html -->
  2. <div class="container">
  3. <!-- ----------------------------------------------------------------------------------------------------col1 -->
  4. <div class="margin-column">
  5. <!-- Add the remove button here -->
  6. <button mat-raised-button color="warn" *ngIf="canRemoveSongs()" (click)="removeSelectedSong()" [disabled]="!selectedSong">
  7. <mat-icon>delete</mat-icon>
  8. Remove Song
  9. </button>
  10. </div>
  11. <!-- ----------------------------------------------------------------------------------------------------col2 -->
  12. <div class="col-left">
  13. <mat-card class="song-list-card">
  14. <mat-card-header>
  15. <mat-card-title class="card-title">Song List</mat-card-title>
  16. </mat-card-header>
  17. <mat-card-content>
  18. <mat-form-field appearance="fill">
  19. <mat-label>Search songs</mat-label>
  20. <input matInput type="text" placeholder="Search songs" [(ngModel)]="searchQuery">
  21. </mat-form-field>
  22. <div class="song-list">
  23. <mat-radio-group class="vertical-radio-group" [(ngModel)]="selectedSong" (change)="displaySongInformation(selectedSong)">
  24. <mat-radio-button *ngFor="let song of filteredSongs" [value]="song">
  25. {{ song.name }}
  26. </mat-radio-button>
  27. </mat-radio-group>
  28. </div>
  29. </mat-card-content>
  30. </mat-card>
  31. </div>
  32. <!-- ----------------------------------------------------------------------------------------------------col3 -->
  33. <div class="col-right">
  34. <div class="buttons-container">
  35. <!-- ##################################################################_ROW 1-->
  36. <div class="button-row">
  37. <button mat-raised-button (click)="download()">
  38. <mat-icon>cloud_download</mat-icon>
  39. Download
  40. </button>
  41. <button mat-raised-button color="accent" (click)="upload()" [disabled]="!selectedFileName">
  42. <mat-icon>cloud_upload</mat-icon>
  43. Upload
  44. </button>
  45. </div>
  46. <!-- ##################################################################_ROW 2-->
  47. <div class="button-row">
  48. <button mat-raised-button color="primary" (click)="generatePdf()">
  49. <mat-icon>picture_as_pdf</mat-icon>
  50. Generate PDF summary
  51. </button>
  52. </div>
  53. <!-- ##################################################################_ROW 3-->
  54. <div class="button-row">
  55. <input type="file" (change)="onFileSelected($event)" class="file-input">
  56. </div>
  57. <!-- ##################################################################_ROW 4-->
  58. <div class="text-block-row">
  59. <div class="text-block">
  60. <p>uploaded: {{ selectedSong?.uploadDate | date:'short'}} ({{ selectedSong?.userId }})</p>
  61. <p>last update: {{ selectedSong?.updateDate | date:'short' }} ({{ selectedSong?.lastUpdateUserId }})</p>
  62. <p>Selected Song: {{ selectedSong?.name }}</p> <!-- Display selected song name -->
  63. <!-- You can display other song information as needed -->
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <!-- ----------------------------------------------------------------------------------------------------col4 -->
  69. <div class="margin-column"></div> <!-- Second margin column -->
  70. </div>
  71. <div class="riff-list-container" *ngIf="selectedSong?.riffs && selectedSong.riffs.length > 0; else noRiffsMessage">
  72. <mat-card class="riff-list-card">
  73. <mat-card-header>
  74. <mat-card-title class="card-title">Riff List</mat-card-title>
  75. </mat-card-header>
  76. <mat-card-content>
  77. <table mat-table [dataSource]="selectedSong?.riffs || []">
  78. <ng-container matColumnDef="name">
  79. <th mat-header-cell *matHeaderCellDef>Riff Name</th>
  80. <td mat-cell *matCellDef="let riff">{{ riff.name }}</td>
  81. </ng-container>
  82. <ng-container matColumnDef="startMs">
  83. <th mat-header-cell *matHeaderCellDef>Start (ms)</th>
  84. <td mat-cell *matCellDef="let riff">{{ riff.startMs }}</td>
  85. </ng-container>
  86. <ng-container matColumnDef="endMs">
  87. <th mat-header-cell *matHeaderCellDef>End (ms)</th>
  88. <td mat-cell *matCellDef="let riff">{{ riff.endMs }}</td>
  89. </ng-container>
  90. <ng-container matColumnDef="groupColor">
  91. <th mat-header-cell *matHeaderCellDef>GroupColor</th>
  92. <td mat-cell *matCellDef="let riff">
  93. <div class="color-container">
  94. <span [ngClass]="{'color-box': riff.groupColor !== 'Transparent', 'empty-color-box': riff.groupColor === 'Transparent'}" [style.backgroundColor]="riff.groupColor"></span>
  95. <span>{{ riff.groupColor }}</span>
  96. </div>
  97. </td>
  98. </ng-container>
  99. <tr mat-header-row *matHeaderRowDef="['name', 'startMs', 'endMs', 'groupColor']"></tr>
  100. <tr mat-row *matRowDef="let row; columns: ['name', 'startMs', 'endMs', 'groupColor']"></tr>
  101. </table>
  102. </mat-card-content>
  103. </mat-card>
  104. </div>
  105. <ng-template #noRiffsMessage>
  106. <p>No riffs found for this song.</p>
  107. </ng-template>