lila/ui/swiss/src/interfaces.ts

110 lines
1.9 KiB
TypeScript

import { VNode } from 'snabbdom/vnode'
export type MaybeVNode = VNode | string | null | undefined;
export type MaybeVNodes = MaybeVNode[];
export type Redraw = () => void;
export interface SwissOpts {
data: SwissData;
userId?: string;
element: HTMLElement;
$side: JQuery;
socketSend: SocketSend;
chat: any;
i18n: any;
classes: string;
}
export interface SwissData {
id: string;
name: string;
createdBy: number;
startsAt: string;
perf: PerfType;
clock: Clock;
variant: string;
me?: MyInfo;
canJoin: boolean;
round: number;
nbRounds: number;
nbPlayers: number;
nbOngoing: number;
status: Status;
standing: Standing;
playerInfo?: PlayerExt;
isStarted?: boolean;
isFinished?: boolean;
socketVersion?: number;
quote?: {
author: string;
text: string;
};
description?: string;
nextRound?: {
at: string;
in: number;
}
greatPlayer?: {
name: string;
url: string;
};
}
export type Status = 'created' | 'started' | 'finished';
export interface MyInfo {
id: string;
rank: number;
withdraw: boolean;
gameId?: string;
}
export interface Pairing {
g: string; // game
c: boolean; // color
w?: boolean; // won
o?: boolean; // ongoing
}
export interface PairingExt extends Pairing {
user: LightUser;
rating: number;
}
export interface Standing {
page: number;
players: Player[];
failed?: boolean;
}
export interface Player {
user: LightUser;
rating: number;
provisional?: boolean;
withdraw?: boolean;
points: number;
tieBreak: number;
performance: number;
rank: number;
pairings: [Pairing | null];
}
export interface PerfType {
icon: string;
name: string;
}
export interface Clock {
limit: number;
increment: number;
}
export type Page = Player[];
export interface Pages {
[n: number]: Page
}
export interface PlayerExt extends Player {
pairings: [PairingExt | null];
}