UNPKG

playball

Version:

Watch MLB games from the comfort of your terminal

93 lines 3.47 kB
import React from 'react'; import { useSelector } from "react-redux/lib/alternate-renderers.js"; import { selectAllPlays, selectTeams } from "../features/games.js"; import { get } from "../config.js"; import style from "../style/index.js"; function getPlayResultColor(play) { var _play$playEvents; const lastPlay = (_play$playEvents = play.playEvents[play.playEvents.length - 1]) === null || _play$playEvents === void 0 ? void 0 : _play$playEvents.details; if (!lastPlay) { return get('color.other-event'); } else if (lastPlay.isBall) { return get('color.walk'); } else if (lastPlay.isStrike) { return get('color.strike-out'); } else if (lastPlay.isInPlay && !play.about.hasOut) { return get('color.in-play-no-out'); } else { return get('color.in-play-out'); } } function formatOut(out) { return ` {bold}${out} out{/}`; } function AllPlays() { const plays = useSelector(selectAllPlays); const teams = useSelector(selectTeams); const formatScoreDetail = scoreObj => ` {bold}{${get('color.in-play-runs-bg')}-bg}{${get('color.in-play-runs-fg')}-fg} ` + `${teams.away.abbreviation} ${scoreObj.awayScore} - ` + `${teams.home.abbreviation} ${scoreObj.homeScore}` + ' {/}'; let inning = ''; const lines = []; plays && plays.slice().reverse().forEach((play, playIdx, plays) => { let lastPlay; if (playIdx < plays.length - 1) { lastPlay = plays[playIdx + 1]; } const playInning = play.about.halfInning + ' ' + play.about.inning; if (playInning !== inning) { inning = playInning; if (lines.length > 0) { lines.push(''); } lines.push(`{bold}[${inning.toUpperCase()}]{/}`); } if (play.about.isComplete) { const color = getPlayResultColor(play); let line = `{${color}-fg}[${play.result.event}]{/} ${play.result.description}`; if (play.about.hasOut) { const lastOut = play.playEvents[play.playEvents.length - 1].count.outs; if (lastOut !== play.count.outs) { line += formatOut(play.count.outs); } } if (play.about.isScoringPlay) { line += formatScoreDetail(play.result); } lines.push(line); } play.playEvents && play.playEvents.slice().reverse().forEach((event, eventIdx, events) => { if (event.type === 'action') { var _event$count; let line = ''; if (event.details.event) { line += `{${get('color.other-event')}-fg}[${event.details.event}]{/} `; } line += event.details.description; if (event.isScoringPlay || event.details.isScoringPlay) { line += formatScoreDetail(event.details); } const currentOut = (_event$count = event.count) === null || _event$count === void 0 ? void 0 : _event$count.outs; let prevOut = lastPlay ? lastPlay.count.outs : 0; if (eventIdx < events.length - 1) { var _events$count; prevOut = (_events$count = events[eventIdx + 1].count) === null || _events$count === void 0 ? void 0 : _events$count.outs; } if (currentOut > prevOut) { line += formatOut(currentOut); } lines.push(line); } }); }); return /*#__PURE__*/React.createElement("box", { content: lines.join('\n'), focused: true, mouse: true, keys: true, vi: true, scrollable: true, scrollbar: style.scrollbar, alwaysScroll: true, tags: true }); } export default AllPlays;