library.html 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <div class="library-container">
  2. <div class="library-header">
  3. <h1>My Library</h1>
  4. <p>Manage your collection, track playtime, and launch games.</p>
  5. </div>
  6. <div *ngIf="successMessage" class="alert alert-success">
  7. {{ successMessage }}
  8. </div>
  9. <div *ngIf="errorMessage" class="alert alert-danger">
  10. {{ errorMessage }}
  11. </div>
  12. <div *ngIf="items.length === 0" class="empty-state">
  13. <p>No games in your library yet. Visit the Storefront to purchase games.</p>
  14. </div>
  15. <div class="games-grid" *ngIf="items.length > 0">
  16. <div class="game-card" *ngFor="let item of items">
  17. <div class="game-image-wrapper">
  18. <img [src]="'http://localhost:8085' + item.game.imagePath" [alt]="item.game.title" class="game-image" />
  19. </div>
  20. <div class="game-info">
  21. <h3>{{ item.game.title }}</h3>
  22. <p class="purchase-date">Purchased: {{ item.lastPlayedAt | date }}</p>
  23. <p class="game-price">{{ item.game.price | currency }}</p>
  24. <div class="card-actions">
  25. <button class="btn btn-primary" (click)="launchGame(item.game.title)">
  26. Launch Game
  27. </button>
  28. <button class="btn btn-danger" (click)="returnGame(item.itemId, item.game.title)">
  29. Return & Refund
  30. </button>
  31. <button class="btn btn-secondary" (click)="openReportPage(item.game.gameId)">
  32. Report Bug
  33. </button>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </div>