diff --git a/src/app/app.component.html b/src/app/app.component.html index b187592..30b2393 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -11,14 +11,14 @@ - @for(card of cardService.cardsInCurrentSet;; track card) { + @for(card of cardService.cardsInCurrentSet; track card) { } - @for(card of cardService.cardsInCurrentSet;; track card) { + @for(card of cardService.cardsInCurrentSet; track card) { } diff --git a/src/app/components/top-bar/top-bar.component.html b/src/app/components/top-bar/top-bar.component.html index d7ea224..7caa28b 100644 --- a/src/app/components/top-bar/top-bar.component.html +++ b/src/app/components/top-bar/top-bar.component.html @@ -10,6 +10,9 @@ } + + cloud_download + filter_list diff --git a/src/app/components/top-bar/top-bar.component.ts b/src/app/components/top-bar/top-bar.component.ts index 1cc3ef0..d9b220f 100644 --- a/src/app/components/top-bar/top-bar.component.ts +++ b/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); + } } diff --git a/src/app/services/swudb.service.ts b/src/app/services/swudb.service.ts new file mode 100644 index 0000000..19aeb30 --- /dev/null +++ b/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) + { + let exportInfo = new Array(); + 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); + } + } +} \ No newline at end of file