playball
Version:
Watch MLB games from the comfort of your terminal
70 lines • 2.6 kB
JavaScript
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { useDispatch, useSelector } from "react-redux/lib/alternate-renderers.js";
import { fetchStandings, selectData } from "../features/standings.js";
import { teamFavoriteStar } from "../utils.js";
function formatHeaderRow(record) {
return record.division.nameShort.padEnd(15) + ' W' + ' L' + ' PCT' + ' GB' + ' WCGB' + ' L10' + ' STRK';
}
function formatTeamRow(record) {
var _record$streak;
const lastTen = record.records.splitRecords.find(o => o.type === 'lastTen');
const star = teamFavoriteStar(record.team);
return star + record.team.teamName.padEnd(star ? 13 : 15) + record.wins.toString().padStart(5) + record.losses.toString().padStart(5) + record.winningPercentage.padStart(7) + record.gamesBack.padStart(6) + record.wildCardGamesBack.padStart(6) + `${lastTen.wins}-${lastTen.losses}`.padStart(6) + (((_record$streak = record.streak) === null || _record$streak === void 0 ? void 0 : _record$streak.streakCode) || '').padStart(5);
}
function Division({
record,
top,
left,
width
}) {
return /*#__PURE__*/React.createElement("box", {
top: top,
left: left,
height: 6,
width: width
}, /*#__PURE__*/React.createElement("box", {
top: 0,
left: 0,
height: 1,
fg: "black",
bg: "white",
content: formatHeaderRow(record),
wrap: false
}), /*#__PURE__*/React.createElement("box", {
top: 1,
left: 0,
height: 5,
content: record.teamRecords.map(formatTeamRow).join('\n'),
wrap: false,
tags: true
}));
}
Division.propTypes = {
record: PropTypes.object,
top: PropTypes.number,
left: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
};
function Standings() {
const dispatch = useDispatch();
const standings = useSelector(selectData);
useEffect(() => dispatch(fetchStandings()), []);
if (!standings) {
return /*#__PURE__*/React.createElement("element", null);
}
return /*#__PURE__*/React.createElement("element", null, standings.records.filter(record => record.league.id === 103).map((record, idx) => /*#__PURE__*/React.createElement(Division, {
top: idx * 7,
left: 0,
width: "50%-1",
key: record.division.id,
record: record
})), standings.records.filter(record => record.league.id === 104).map((record, idx) => /*#__PURE__*/React.createElement(Division, {
top: idx * 7,
left: "50%+1",
width: "50%-1",
key: record.division.id,
record: record
})));
}
export default Standings;