mavend/octoboard

View on GitHub
src/games/splendid/GameCard/BonusCard.js

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import React from "react";
import PropTypes from "prop-types";
import { Card, Image } from "semantic-ui-react";

import { imgUrl } from "../utils";
import { RESOURCES } from "../config";
import CardSymbol from "../CardSymbol";
import PointsBadge from "./PointsBadge";

import styles from "./GameCard.module.css";

const propTypes = {
  points: PropTypes.number.isRequired,
  img: PropTypes.string.isRequired,
  cost: PropTypes.shape(Object.fromEntries(RESOURCES.map((res) => [res, PropTypes.number])))
    .isRequired,
  onClick: PropTypes.func,
};

const BonusCard = ({ points, img, cost, onClick }) => {
  return (
    <Card onClick={onClick} className={`${styles.bonusCard}`}>
      <Card.Content className={styles.topContent}>
        <PointsBadge resource="gold" points={points} />
      </Card.Content>
      <div className={styles.imageBox}>
        <Image src={imgUrl(img)} ui={false} />
      </div>
      <Card.Content className={styles.bottomContent}>
        {Object.entries(cost).map(
          ([res, count]) =>
            count > 0 && <CardSymbol key={res} resource={res} count={count} raised />
        )}
      </Card.Content>
    </Card>
  );
};

BonusCard.propTypes = propTypes;

export default BonusCard;