modaq
Version:
Quiz Bowl Reader using TypeScript, React, and MobX
95 lines • 4.04 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.newPlayerNameUnique = exports.playerTeamsUnique = exports.isValid = void 0;
const PendingNewGameUtils = __importStar(require("./PendingNewGameUtils"));
require("./TeamState");
const IPendingNewGame_1 = require("./IPendingNewGame");
function isValid(pendingNewGame) {
const [firstTeamPlayers, secondTeamPlayers] = PendingNewGameUtils.getPendingNewGamePlayers(pendingNewGame);
const nonEmptyFirstTeamPlayers = firstTeamPlayers.filter((player) => player.name !== "");
if (nonEmptyFirstTeamPlayers.length === 0) {
return false;
}
const nonEmptySecondTeamPlayers = secondTeamPlayers.filter((player) => player.name !== "");
if (nonEmptySecondTeamPlayers.length === 0) {
return false;
}
return (playerTeamsUnique(nonEmptyFirstTeamPlayers, nonEmptySecondTeamPlayers) === undefined &&
playerNamesUnique(nonEmptyFirstTeamPlayers) &&
playerNamesUnique(nonEmptySecondTeamPlayers) &&
atLeastOneStarter(nonEmptyFirstTeamPlayers) &&
atLeastOneStarter(nonEmptySecondTeamPlayers) &&
atLeastOneCycleIfCyclesExist(pendingNewGame) &&
pendingNewGame.packet.tossups.length !== 0);
}
exports.isValid = isValid;
function playerTeamsUnique(firstTeamPlayers, secondTeamPlayers) {
if (firstTeamPlayers == undefined ||
firstTeamPlayers.length === 0 ||
secondTeamPlayers == undefined ||
secondTeamPlayers.length === 0) {
return undefined;
}
if (firstTeamPlayers[0].teamName === secondTeamPlayers[0].teamName) {
return "Team names must be unique";
}
return undefined;
}
exports.playerTeamsUnique = playerTeamsUnique;
function newPlayerNameUnique(players, newName) {
if (players.length === 0) {
// No players to validate against
return undefined;
}
else if (newName === "") {
// Empty named players should be treated as non-existent
return undefined;
}
const trimmedNewName = newName.trim();
let playerFound = false;
for (const player of players) {
if (player.name.trim() === trimmedNewName) {
if (playerFound) {
return "Player names must be unique on each team";
}
else {
playerFound = true;
}
}
}
return undefined;
}
exports.newPlayerNameUnique = newPlayerNameUnique;
// TODO: When the format interface is better understood, validate that # starters doesn't exceed the maximum
function playerNamesUnique(players) {
const nameSet = new Set(players.map((player) => player.name));
return nameSet.size === players.length;
}
function atLeastOneStarter(players) {
return players.some((player) => player.isStarter);
}
function atLeastOneCycleIfCyclesExist(pendingNewGame) {
return (pendingNewGame.type !== IPendingNewGame_1.PendingGameType.Manual ||
pendingNewGame.manual.cycles == undefined ||
pendingNewGame.manual.cycles.length > 0);
}
//# sourceMappingURL=NewGameValidator.js.map