Card.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React from 'react';
  2. export function CardComponent({value: {suit, denom}}, play) {
  3. console.log({suit, denom})
  4. return <div className={`playing-card card-${suit}`}>
  5. <div className="card-top">
  6. <span className="card-denom">{denomToChar(denom)}</span>
  7. <span className="card-suit">{suitToIcon(suit)}</span>
  8. </div>
  9. <button className="btn btn-success" onClick={play}><i className="fa fa-arrow-up"/></button>
  10. </div>;
  11. }
  12. function suitToIcon(suit) {
  13. let icon = null
  14. switch (suit) {
  15. case Suits.SPADES:
  16. icon = "icon-spades"
  17. break
  18. case Suits.CLUBS:
  19. icon = "icon-clubs"
  20. break
  21. case Suits.HEARTS:
  22. icon = "icon-hearts"
  23. break
  24. case Suits.DIAMONDS:
  25. icon = "icon-diamonds"
  26. break
  27. }
  28. return icon && <i className={icon}/>
  29. }
  30. function denomToChar(denom) {
  31. switch (denom) {
  32. case Denoms.ACE:
  33. return "A"
  34. case Denoms.KING:
  35. return "K"
  36. case Denoms.QUEEN:
  37. return "V"
  38. case Denoms.JACK:
  39. return "J"
  40. default:
  41. return denom
  42. }
  43. }
  44. export function fromString(s) {
  45. s = s.toLowerCase()
  46. if (s.toLowerCase() === Joker) {
  47. return {denom: "Joker", suit: null}
  48. }
  49. const split = s.split(" ")
  50. if (split.length !== 2) {
  51. console.error("Unknown card", s)
  52. return null
  53. }
  54. return {suit: split[0], denom: split[1]}
  55. }
  56. export const Joker = "joker"
  57. export const Suits = {
  58. HEARTS: "harten",
  59. DIAMONDS: "ruiten",
  60. CLUBS: "klaver",
  61. SPADES: "schoppen"
  62. }
  63. export const Denoms = {
  64. ACE: "aas",
  65. KING: "koning",
  66. QUEEN: "vrouw",
  67. JACK: "boer",
  68. D10: "10",
  69. D9: "9",
  70. D8: "8",
  71. D7: "7",
  72. D6: "6",
  73. D5: "5",
  74. D4: "4",
  75. D3: "3",
  76. D2: "2",
  77. }