Card.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import React from 'react';
  2. export function Card({value: {suit, denom}, play, animate, selected, select}) {
  3. console.log({suit, denom, play})
  4. return <div className={`playing-card card-${suit || Joker} ${animate ? "animate" : ""} ${selected ? "selected" : ""}`}
  5. onClick={select || (() => {})}>
  6. <div className="card-top">
  7. <span className="card-denom">{denomToChar(denom)}</span>
  8. <span className="card-suit">{suitToIcon(suit)}</span>
  9. </div>
  10. {play && <button className="btn btn-success" onClick={(event) => {
  11. event.preventDefault();
  12. event.stopPropagation();
  13. play(event);
  14. }}><i className="fa fa-arrow-up"/></button>}
  15. </div>;
  16. }
  17. function suitToIcon(suit) {
  18. let icon = null
  19. switch (suit) {
  20. case Suits.SPADES:
  21. icon = "icon-spades"
  22. break
  23. case Suits.CLUBS:
  24. icon = "icon-clubs"
  25. break
  26. case Suits.HEARTS:
  27. icon = "icon-hearts"
  28. break
  29. case Suits.DIAMONDS:
  30. icon = "icon-diamonds"
  31. break
  32. }
  33. return icon && <i className={icon}/>
  34. }
  35. function denomToChar(denom) {
  36. switch (denom) {
  37. case Denoms.ACE:
  38. return "A"
  39. case Denoms.KING:
  40. return "K"
  41. case Denoms.QUEEN:
  42. return "V"
  43. case Denoms.JACK:
  44. return "J"
  45. case Joker:
  46. return "Joker"
  47. default:
  48. return denom
  49. }
  50. }
  51. export const Joker = "joker"
  52. export const Suits = {
  53. HEARTS: "hearts",
  54. DIAMONDS: "diamonds",
  55. CLUBS: "clubs",
  56. SPADES: "spades"
  57. }
  58. export const Denoms = {
  59. ACE: "ace",
  60. KING: "king",
  61. QUEEN: "queen",
  62. JACK: "jack",
  63. D10: "10",
  64. D9: "9",
  65. D8: "8",
  66. D7: "7",
  67. D6: "6",
  68. D5: "5",
  69. D4: "4",
  70. D3: "3",
  71. D2: "2",
  72. }