Browse Source

Add a new service to generate csvs for swudb

master
Dan 2 years ago
parent
commit
0524a18bd2
  1. 4
      src/app/app.component.html
  2. 3
      src/app/components/top-bar/top-bar.component.html
  3. 7
      src/app/components/top-bar/top-bar.component.ts
  4. 101
      src/app/services/swudb.service.ts

4
src/app/app.component.html

@ -11,14 +11,14 @@
</mat-tab>
<mat-tab label="Hyperspace">
<div class="card-container">
@for(card of cardService.cardsInCurrentSet;; track card) {
@for(card of cardService.cardsInCurrentSet; track card) {
<app-card-display [card]="card" [set]="selectedSet" [displayHyperspace]="true"></app-card-display>
}
</div>
</mat-tab>
<mat-tab label="Showcase">
<div class="card-container">
@for(card of cardService.cardsInCurrentSet;; track card) {
@for(card of cardService.cardsInCurrentSet; track card) {
<app-card-display [card]="card" [set]="selectedSet" [displayShowcase]="true"></app-card-display>
}
</div>

3
src/app/components/top-bar/top-bar.component.html

@ -10,6 +10,9 @@
</mat-form-field>
}
<span class="spacer"></span>
<button mat-icon-button aria-label="Example icon-button with share icon" (click)="downloadSWUDB_CSV_File();">
<mat-icon>cloud_download</mat-icon>
</button>
<button mat-icon-button [matMenuTriggerFor]="menu" aria-label="Example icon-button with a menu">
<mat-icon>filter_list</mat-icon>
</button>

7
src/app/components/top-bar/top-bar.component.ts

@ -12,6 +12,7 @@ import { SetInfo } from '../../models/setInfo.model';
import { FilterService } from '../../services/filter.service';
import { CardService } from '../../services/card.service';
import { googleSheetService } from '../../services/googleSheets.service';
import { SWUDBService } from '../../services/swudb.service';
@Component({
selector: 'app-top-bar',
@ -36,6 +37,7 @@ export class TopBarComponent {
private filterService: FilterService,
private sheets: googleSheetService,
private cardService: CardService,
private swudbService: SWUDBService,
)
{}
@ -77,4 +79,9 @@ export class TopBarComponent {
})
console.log(data)
}
downloadSWUDB_CSV_File()
{
this.swudbService.GenerateCSVForCards(this.cardService.cardsInCurrentSet);
}
}

101
src/app/services/swudb.service.ts

@ -0,0 +1,101 @@
import { Injectable } from '@angular/core';
import { CardInfo } from '../models/card.model';
interface CSVInfo
{
Set: string;
CardNumber: string;
Count: string;
IsFoil: boolean;
}
@Injectable({
providedIn: 'root',
})
export class SWUDBService {
GenerateCSVForCards(cards: Array<CardInfo>)
{
let exportInfo = new Array<any>();
for(let index in cards)
{
let card = cards[index] as CardInfo;
if(card.setNumber != -1 && (card.standardQuantity != undefined &&card.standardQuantity > 0))
{
let info = {} as CSVInfo;
info.Set = card.setCode;
info.CardNumber = card.setNumber.toString();
info.Count = card.standardQuantity.toString();
info.IsFoil = false;
exportInfo.push(info);
}
if(card.setNumber != -1 && (card.foilQuantity != undefined &&card.foilQuantity > 0))
{
let info = {} as CSVInfo;
info.Set = card.setCode;
info.CardNumber = card.setNumber.toString();
info.Count = card.foilQuantity.toString();
info.IsFoil = true;
exportInfo.push(info);
}
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceQuantity != undefined &&card.hyperspaceQuantity > 0))
{
let info = {} as CSVInfo;
info.Set = card.setCode;
info.CardNumber = card.hyperspaceSetNumber.toString();
info.Count = card.hyperspaceQuantity.toString();
info.IsFoil = false;
exportInfo.push(info);
}
if(card.hyperspaceSetNumber != -1 && (card.hyperspaceFoilQuantity != undefined &&card.hyperspaceFoilQuantity > 0))
{
let info = {} as CSVInfo;
info.Set = card.setCode;
info.CardNumber = card.hyperspaceSetNumber.toString();
info.Count = card.hyperspaceFoilQuantity.toString();
info.IsFoil = true;
exportInfo.push(info);
}
}
let separator: string = ',';
let keys = Object.keys(exportInfo[0]);
let csvContent =
keys.join(separator) +
'\n' +
exportInfo.map(row =>
{
return keys.map(k =>
{
let cell = row[k] === null || row[k] === undefined ? '' : row[k];
cell = cell instanceof Date ? cell.toLocaleString() : cell.toString().replace(/"/g, '""');
if (cell.search(/("|,|\n)/g) >= 0)
{
cell = `"${cell}"`;
}
return cell;
}).join(separator);
}).join('\n');
const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
if (link.download !== undefined)
{
let now = new Date(Date.now());
// Browsers that support HTML5 download attribute
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', "swu_export_" + cards[0].setCode + "_" + now.toISOString()+".csv");
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
}
Loading…
Cancel
Save