8 changed files with 188 additions and 32 deletions
@ -1,11 +1,11 @@ |
|||
export interface CardInfo { |
|||
setCode: string; |
|||
setNumber: number; |
|||
hyperspaceSetNumber: number; |
|||
standardQuantity: number; |
|||
foilQuantity: number; |
|||
hyperspaceQuantity: number; |
|||
hyperspaceFoilQuantity: number; |
|||
isLeader: boolean; |
|||
isBase: boolean; |
|||
export class CardInfo { |
|||
setCode!: string; |
|||
setNumber!: number; |
|||
hyperspaceSetNumber: number = -1; |
|||
standardQuantity!: number; |
|||
foilQuantity!: number; |
|||
hyperspaceQuantity!: number; |
|||
hyperspaceFoilQuantity!: number; |
|||
isLeader!: boolean; |
|||
isBase!: boolean; |
|||
} |
|||
@ -1,10 +1,26 @@ |
|||
export interface SetInfo { |
|||
name: string; |
|||
code: string; |
|||
total: number; |
|||
leaders: number; |
|||
bases: number; |
|||
showcaseStart: number, |
|||
numShowcase: number, |
|||
noHypers: Array<number>; |
|||
export class SetInfo { |
|||
name!: string; |
|||
code!: string; |
|||
total!: number; |
|||
leaders!: number; |
|||
bases!: number; |
|||
showcaseStart!: number; |
|||
numShowcase!: number; |
|||
noHypers!: Array<number>; |
|||
|
|||
sheetName!: string; |
|||
sheetRange!: Array<string>; |
|||
typesColumn!: string; |
|||
isPromo!: boolean; |
|||
|
|||
getQueryRange() : string |
|||
{ |
|||
return this.sheetRange[0] + ':' + this.sheetName[1]; |
|||
} |
|||
|
|||
getQueryRangeIncTypes() : string |
|||
{ |
|||
let bottom_right = this.typesColumn + this.sheetRange[1].slice(1); |
|||
return this.sheetRange[0] + ':' + bottom_right; |
|||
} |
|||
} |
|||
@ -0,0 +1,71 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { SetInfo } from '../models/setInfo.model'; |
|||
import { CardInfo } from '../models/card.model'; |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
|
|||
export class CardService { |
|||
|
|||
convertToCardInfo(set: SetInfo, data : Array<Object>) : Array<CardInfo> { |
|||
let cards = new Array<CardInfo>; |
|||
|
|||
let hypercount = 0; |
|||
for (let index in data) |
|||
{ |
|||
let item = data[index] as Array<Object> |
|||
let info = {} as CardInfo; |
|||
|
|||
if(set.isPromo) |
|||
{ |
|||
info = this.convertPromoCard(set, item, hypercount); |
|||
if(info.hyperspaceSetNumber != -1) |
|||
{ |
|||
hypercount = hypercount + 1; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
info = this.convertStandardCard(set, item, hypercount); |
|||
} |
|||
|
|||
cards.push(info); |
|||
} |
|||
|
|||
return cards; |
|||
} |
|||
|
|||
convertStandardCard(set: SetInfo, data : Array<Object>, hypercount: number) : CardInfo { |
|||
let info = {} as CardInfo; |
|||
|
|||
info.setNumber = parseInt(data[0].toString()); |
|||
|
|||
if(set.noHypers.includes(info.setNumber) == false) |
|||
{ |
|||
info.hyperspaceSetNumber = set.total + hypercount + 1; |
|||
} |
|||
|
|||
// The types are included in the last cell.
|
|||
let typesString = data[data.length-1] as string; |
|||
let types = typesString.split(/\s*,\s*/); |
|||
|
|||
info.setCode = set.code; |
|||
info.isLeader = "Leader" in types; |
|||
info.isBase = "Base" in types; |
|||
info.standardQuantity = data[1] ? parseInt(data[1].toString()) : 0; |
|||
info.foilQuantity = data[2] ? parseInt(data[2].toString()) as number : 0; |
|||
info.hyperspaceQuantity = data[3] ? parseInt(data[3].toString()) as number : 0; |
|||
info.hyperspaceFoilQuantity = data[4] ? parseInt(data[4].toString()) as number : 0; |
|||
|
|||
return info; |
|||
} |
|||
|
|||
convertPromoCard(set: SetInfo, data : Array<Object>, hypercount: number) : CardInfo { |
|||
let info = {} as CardInfo; |
|||
|
|||
info.setNumber = parseInt(data[0].toString()); |
|||
|
|||
return info; |
|||
} |
|||
} |
|||
@ -0,0 +1,27 @@ |
|||
import { Injectable } from '@angular/core'; |
|||
import { SetInfo } from '../models/setInfo.model'; |
|||
import { HttpClient } from '@angular/common/http'; |
|||
import { Observable } from 'rxjs'; |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
|
|||
export class SetService { |
|||
sets!: Array<SetInfo>; |
|||
selectedSet!: SetInfo; |
|||
|
|||
constructor( |
|||
private httpClient: HttpClient |
|||
) |
|||
{} |
|||
|
|||
loadSetInfo(path: string) : Observable<Array<SetInfo>> |
|||
{ |
|||
let ret = this.httpClient.get<Array<SetInfo>>(path); |
|||
ret.subscribe( data => { |
|||
this.sets = data; |
|||
}) |
|||
return ret; |
|||
} |
|||
} |
|||
Loading…
Reference in new issue