type ui/lobby pool member

pull/3353/head
Thibault Duplessis 2017-07-26 13:03:17 +02:00
parent a22d0c0421
commit ddcb419e36
5 changed files with 21 additions and 12 deletions

View File

@ -4,7 +4,7 @@ import * as seekRepo from './seekRepo';
import { make as makeStores, Stores } from './store';
import * as xhr from './xhr';
import * as poolRangeStorage from './poolRangeStorage';
import { LobbyOpts, LobbyData, Tab, Mode, Sort, Filter, Hook, Seek } from './interfaces';
import { LobbyOpts, LobbyData, Tab, Mode, Sort, Filter, Hook, Seek, PoolMember } from './interfaces';
import LobbySocket from './socket';
const li = window.lichess;
@ -24,7 +24,7 @@ export default class LobbyController {
stepHooks: Hook[] = [];
stepping: boolean = false;
redirecting: boolean = false;
poolMember?: any;
poolMember?: PoolMember;
trans: Trans;
redraw: () => void;
@ -167,7 +167,7 @@ export default class LobbyController {
}
};
enterPool = (member) => {
enterPool = (member: PoolMember) => {
poolRangeStorage.set(member.id, member.range);
this.setTab('pools');
this.poolMember = member;
@ -177,11 +177,12 @@ export default class LobbyController {
leavePool = () => {
if (!this.poolMember) return;
this.socket.poolOut(this.poolMember);
this.poolMember = null;
this.poolMember = undefined;
this.redraw();
};
poolIn = () => {
if (!this.poolMember) return;
this.poolInStorage.set(li.StrongSocket.sri);
this.socket.poolIn(this.poolMember);
};

View File

@ -29,3 +29,11 @@ export interface LobbyData extends Untyped {
hooks: Hook[];
seeks: Seek[];
}
export interface PoolMember {
id: PoolId;
range?: PoolRange
}
export type PoolId = string;
export type PoolRange = string;

View File

@ -1,7 +1,7 @@
import * as xhr from './xhr';
import * as hookRepo from './hookRepo';
import LobbyController from './ctrl';
import { Hook } from './interfaces';
import { Hook, PoolMember } from './interfaces';
interface Handlers {
[key: string]: (data: any) => void;
@ -70,7 +70,7 @@ export default class LobbySocket {
this.send('hookOut');
};
poolIn(member) {
poolIn(member: PoolMember) {
// last arg=true: must not retry
// because if poolIn is sent before socket opens,
// then poolOut is sent,
@ -79,7 +79,7 @@ export default class LobbySocket {
this.send('poolIn', member, {}, true);
};
poolOut(member) {
poolOut(member: PoolMember) {
this.send('poolOut', member.id);
};

View File

@ -9,8 +9,8 @@ function renderRange(range: string) {
export default function(ctrl: LobbyController) {
const member = ctrl.poolMember;
return ctrl.data.pools.map(function(pool) {
const active = member && member.id === pool.id,
transp = member && !active;
const active = !!member && member.id === pool.id,
transp = !!member && !active;
return h('div.pool', {
class: {
active,
@ -19,12 +19,12 @@ export default function(ctrl: LobbyController) {
hook: bind('click', _ => ctrl.clickPool(pool.id), ctrl.redraw)
}, [
h('div.clock', pool.lim + '+' + pool.inc),
(active && member.range) ? renderRange(member.range) : h('div.perf', pool.perf),
(active && member!.range) ? renderRange(member!.range!) : h('div.perf', pool.perf),
active ? spinner() : null
]);
}).concat(
h('div.custom', {
class: { transp: member },
class: { transp: !!member },
hook: bind('click', _ => $('#start_buttons .config_hook').mousedown())
}, ctrl.trans.noarg('custom'))
);

View File

@ -7,7 +7,7 @@ function tab(ctrl: LobbyController, key: Tab, active: Tab, content: MaybeVNodes)
return h('a', {
class: {
active: key === active,
glow: key !== active && key === 'pools' && ctrl.poolMember
glow: key !== active && key === 'pools' && !!ctrl.poolMember
},
hook: bind('mousedown', _ => ctrl.setTab(key), ctrl.redraw)
}, content);