8 changed files with 188 additions and 32 deletions
@ -1,11 +1,11 @@ |
|||||
export interface CardInfo { |
export class CardInfo { |
||||
setCode: string; |
setCode!: string; |
||||
setNumber: number; |
setNumber!: number; |
||||
hyperspaceSetNumber: number; |
hyperspaceSetNumber: number = -1; |
||||
standardQuantity: number; |
standardQuantity!: number; |
||||
foilQuantity: number; |
foilQuantity!: number; |
||||
hyperspaceQuantity: number; |
hyperspaceQuantity!: number; |
||||
hyperspaceFoilQuantity: number; |
hyperspaceFoilQuantity!: number; |
||||
isLeader: boolean; |
isLeader!: boolean; |
||||
isBase: boolean; |
isBase!: boolean; |
||||
} |
} |
||||
@ -1,10 +1,26 @@ |
|||||
export interface SetInfo { |
export class SetInfo { |
||||
name: string; |
name!: string; |
||||
code: string; |
code!: string; |
||||
total: number; |
total!: number; |
||||
leaders: number; |
leaders!: number; |
||||
bases: number; |
bases!: number; |
||||
showcaseStart: number, |
showcaseStart!: number; |
||||
numShowcase: number, |
numShowcase!: number; |
||||
noHypers: Array<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