All files / components/Commons CommonsOverview.jsx

100% Statements 57/57
100% Branches 4/4
100% Functions 2/2
100% Lines 57/57

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 891x 1x 1x 1x 1x 1x   1x 66x   66x 66x 1x 1x 66x   66x 66x   66x 66x 66x 66x 66x 66x 66x 66x 66x 66x 66x   66x   66x 66x   66x 66x 66x       66x 66x 66x 66x     66x 66x 66x   66x     66x   66x 66x 66x 66x 66x 66x 66x   66x             66x 66x 66x 66x 66x 66x 66x                 66x  
import React from "react";
import { Row, Card, Col, Button, Alert } from "react-bootstrap";
import { useNavigate } from "react-router";
import { hasRole } from "main/utils/currentUser";
import { daysSinceTimestamp } from "main/utils/dateUtils";
import { useBackend } from "main/utils/useBackend";
 
export default function CommonsOverview({ commonsPlus, currentUser }) {
  let navigate = useNavigate();
 
  // Stryker disable all
  const leaderboardButtonClick = () => {
    navigate("/leaderboard/" + commonsPlus.commons.id);
  };
  // Stryker restore all
 
  const showLeaderboard =
    hasRole(currentUser, "ROLE_ADMIN") || commonsPlus.commons.showLeaderboard;
 
  // Stryker disable all
  const { data: announcementsData } = useBackend(
    [`/api/announcements/current?commonsId=${commonsPlus.commons.id}`],
    {
      method: "GET",
      url: "/api/announcements/current",
      params: {
        commonsId: commonsPlus.commons.id,
      },
    },
    [],
  );
  // Stryker restore all
 
  // Stryker disable next-line all : fallback handling
  const announcements = announcementsData?.content || [];
 
  return (
    <Card data-testid="CommonsOverview">
      <Card.Header as="h5" className="woodenboardtable">
        Announcements
      </Card.Header>
 
      <Card.Body
        style={
          // Stryker disable next-line all: don't test CSS params
          { backgroundColor: "rgb(245, 210, 140)" }
        }
      >
        <Row>
          <Col>
            <Card.Title>
              Today is day
              {daysSinceTimestamp(commonsPlus.commons.startingDate)}!
            </Card.Title>
 
            <Card.Text>Total Players: {commonsPlus.totalUsers}</Card.Text>
 
            {announcements.length > 0 && (
              <div className="mt-3" data-testid="announcements-container">
                {announcements.map((announcement) => (
                  <Alert
                    key={announcement.id}
                    variant="warning"
                    data-testid={`CommonsOverview-announcement-${announcement.id}`}
                  >
                    {announcement.announcementText}
                  </Alert>
                ))}
              </div>
            )}
          </Col>
 
          <Col>
            {showLeaderboard && (
              <Button
                variant="outline-success"
                data-testid="user-leaderboard-button"
                onClick={leaderboardButtonClick}
              >
                Leaderboard
              </Button>
            )}
          </Col>
        </Row>
      </Card.Body>
    </Card>
  );
}