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 69x   69x 69x 1x 1x 69x   69x 69x   69x 69x 69x 69x 69x 69x 69x 69x 69x 69x 69x   69x   69x 69x   69x 69x 69x       69x 69x 69x 69x     69x 69x 69x   69x     69x   69x 69x 69x 69x 69x 69x 69x   69x             69x 69x 69x 69x 69x 69x 69x                 69x  
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>
  );
}