spolnik/JAlgoArena-UI

View on GitHub
src/client/ranking/components/TeamRankingTable.tsx

Summary

Maintainability
D
2 days
Test Coverage
import * as React from 'react';
import * as _ from 'lodash';
import {BootstrapTable, TableHeaderColumn} from 'react-bootstrap-table';
 
import {RankingEntry} from "../domain/RankingEntry";
 
interface TeamRankingTableProps {
ranking: Array<RankingEntry>
}
 
Function `TeamRankingTable` has 28 lines of code (exceeds 25 allowed). Consider refactoring.
Similar blocks of code found in 2 locations. Consider refactoring.
export const TeamRankingTable = (props: TeamRankingTableProps) => {
let teams = _.groupBy(props.ranking, 'team');
let teamsRank = _.orderBy(_.map(teams, (rankNodes, team) => {
return {team: team, score: _.sumBy(rankNodes, 'score'), size: rankNodes.length};
}), ['score'], ['desc']);
 
let teamRankingData = teamsRank.map((teamRank, idx) => {
return {
place: idx + 1,
team: teamRank.team,
score: teamRank.score,
size: teamRank.size,
avg: Math.round(teamRank.score / teamRank.size)
};
}
);
 
return <BootstrapTable data={teamRankingData} striped hover pagination search>
<TableHeaderColumn isKey
width={'50'}
dataSort
dataField='place'>#</TableHeaderColumn>
<TableHeaderColumn dataField='team'
dataSort>Team</TableHeaderColumn>
<TableHeaderColumn dataField='score'
dataSort>Score</TableHeaderColumn>
<TableHeaderColumn dataField='size'
dataSort>Team Size</TableHeaderColumn>
<TableHeaderColumn dataField='avg'
dataSort>Avg</TableHeaderColumn>
</BootstrapTable>;
};