<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crsrusti</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Crsrusti"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Crsrusti"/>
	<updated>2026-05-22T13:57:39Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2441_Reimplement_grades/view_team_(Phase_2)&amp;diff=156816</id>
		<title>CSC/ECE 517 Spring 2024 - E2441 Reimplement grades/view team (Phase 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2441_Reimplement_grades/view_team_(Phase_2)&amp;diff=156816"/>
		<updated>2024-04-24T03:58:54Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza, a learning management system available as open-source software, utilizes the Ruby on Rails framework as its foundation. Its features encompass the creation of assignments, tests, assignment teams, and courses, among others. Particularly noteworthy is its comprehensive system designed to facilitate peer reviews and feedback within teams and groups. The primary focus of this project lies in developing frontend React Components, specifically targeting User, Institution, and Roles functionalities. The objective is to create a fully operational user interface for these components using React.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement ==&lt;br /&gt;
The main objective of this project is to redesign the front end for the grades/view_team page within Expertiza. The current layout suffers from performance issues and outdated design, resulting in decreased usability. Our aim is to improve user experience and interface efficiency by developing a refreshed front end using React JS and TypeScript. The project will concentrate on several key features including displaying team information such as names and assignment details, listing reviews and their comments/feedback for each question while ensuring consistency, indicating review scores with color-coding(Heat map) from green to red.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
In the re-implementation of Expertiza's front end, we have utilized several design patterns to enhance maintainability and promote code reusability:&lt;br /&gt;
&lt;br /&gt;
1. Composite Design Pattern: We employ the Composite Design Pattern by nesting and composing components like Table, Modal, and others to construct our Course component effectively.&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle: Adhering to the DRY Principle, we leverage React's capabilities to reuse existing components such as Table and Modal, thereby minimizing redundancy in our codebase.&lt;br /&gt;
&lt;br /&gt;
3. Provider Pattern: Using React's Context API, we implement the Provider Pattern to seamlessly pass props down the component tree without explicit prop drilling.&lt;br /&gt;
&lt;br /&gt;
4. Observer Pattern: We harness the Observer Pattern using React's Context API alongside hooks like useEffect and useState to efficiently manage component state and side effects.&lt;br /&gt;
&lt;br /&gt;
5. HOC Pattern: The HOC Pattern, or Higher-Order Component pattern, is adopted to facilitate routing for new pages by creating functions that take in a component and return a modified component with routing capabilities.&lt;br /&gt;
&lt;br /&gt;
6. Mediator Pattern: Given the disparity between backend data structures and frontend requirements, we employ the Mediator Pattern to transform data as needed, ensuring compatibility and coherence within our application.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/App.tsx App.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;Added code that sets up a React component (ReviewTable) to manage and display Reviews in Tabular Format. It handles data fetching from data stub, configures a dynamic table, and provides user interactions for viewing scores.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTable.tsx ReviewTable.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;Here a component called `ReviewTable` responsible for displaying review data was created. It allows users to toggle between different rounds of reviews and customize the display by filtering reviews based on word count. The component calculates and displays the average peer review score, along with individual question scores and overall averages. Users can also navigate between different rounds of reviews using a selector. Additionally, it provides a link to navigate back to the homepage. Overall, the `ReviewTable` component provides a summary report of peer reviews for a specific assignment, enhancing the user's understanding of the review data.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTableRow.tsx ReviewTableRow.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;This file is responsible for rendering a single row of review data within a table. It receives props containing information about the review data for that row, such as the review scores, question numbers, and average score. The component dynamically applies styling based on the review scores and calculates word counts for comments if enabled by the user. Overall, ReviewTableRow enhances the readability and presentation of individual review data within the larger review table.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/RoundSelector.tsx RoundSelector.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;This React code defines a component called `RoundSelector`, enabling users to switch between different rounds of reviews. It presents buttons for each review round, allowing users to easily navigate and view review data for specific rounds, along with displaying team member names involved in the review process.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/tree/main/src/pages/ViewTeamGrades/Data Dummy_Data]===&lt;br /&gt;
&amp;lt;pre&amp;gt;This code represents dummy data for reviews of a feature, where each feature has several questions with corresponding scores and comments from reviewers. The data is structured as an array of arrays, with each inner array containing review information for a specific round of reviews. Each round includes reviews for different questions about the feature, along with scores and comments from reviewers. This dummy data is used for testing and demonstration purposes in the application.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/grades.scss grades.css]===&lt;br /&gt;
&amp;lt;pre&amp;gt;This CSS code provides styling for various elements in a web application, such as tables, buttons, circles, and tooltips. It defines the appearance of table containers, circles used for indicating scores, heatgrid tables for displaying data, and tags for student reports. Additionally, it styles round selectors and provides hover effects for buttons. This CSS is crucial for ensuring a visually appealing and user-friendly interface in the web application.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/utils.ts utils.ts]===&lt;br /&gt;
&amp;lt;pre&amp;gt;This JavaScript code provides several utility functions for processing review data in a web application. `getColorClass` calculates a color class based on a score and maximum score, which is useful for visually indicating the performance level. `getWordCount10` and `getWordCount20` count the number of reviews with more than 10 and 20 words, respectively, helping to identify reviews with substantial feedback. `calculateAverages` computes average scores for rows and columns of review data, as well as sorting the data based on row averages. These functions are essential for analyzing and presenting review data effectively in the application.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notable Code ReImplementation==&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTableRow.tsx ReviewTable]===&lt;br /&gt;
we have created component &amp;quot;ReviewTableRow&amp;quot; renders a table row with review data. It includes the question number, review comments, score, and word count. The component also has optional columns for word count that are conditionally rendered based on the showWordCount16 and showWordCount20 props. The styling and data population of the rendered elements are dynamically handled by functions like `getQtrColorClass` and `getWordCount28`. The component is designed to be used in a larger table structure where each row represents a review.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from 'react';&lt;br /&gt;
import { getColorClass, getWordCount10, getWordCount20 } from './utils'; // Importing utility functions&lt;br /&gt;
import { ReviewData } from './App'; // Importing the ReviewData interface from App&lt;br /&gt;
&lt;br /&gt;
// Props interface for ReviewTableRow component&lt;br /&gt;
interface ReviewTableRowProps {&lt;br /&gt;
  row: ReviewData; // Data for the row&lt;br /&gt;
  showWordCount10: boolean; // Flag to show reviews with 10+ words&lt;br /&gt;
  showWordCount20: boolean; // Flag to show reviews with 20+ words&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Functional component ReviewTableRow&lt;br /&gt;
const ReviewTableRow: React.FC&amp;lt;ReviewTableRowProps&amp;gt; = ({ row, showWordCount10, showWordCount20 }) =&amp;gt; {&lt;br /&gt;
  return (&lt;br /&gt;
    &amp;lt;tr className={row.maxScore === 1 ? &amp;quot;no-bg&amp;quot; : &amp;quot;&amp;quot;}&amp;gt;&lt;br /&gt;
      {/* Question Number */}&lt;br /&gt;
      &amp;lt;td className=&amp;quot;py-2 px-4 text-center&amp;quot; data-question={row.questionText}&amp;gt;&lt;br /&gt;
        &amp;lt;div className=&amp;quot;circle-container&amp;quot;&amp;gt;&lt;br /&gt;
          {row.maxScore !== 1 ? (&lt;br /&gt;
            &amp;lt;span className=&amp;quot;circle&amp;quot;&amp;gt;{row.maxScore}&amp;lt;/span&amp;gt;&lt;br /&gt;
          ) : (&lt;br /&gt;
            &amp;lt;span className=&amp;quot;tick&amp;quot;&amp;gt;✓&amp;lt;/span&amp;gt;&lt;br /&gt;
          )}&lt;br /&gt;
          &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;{row.questionNumber}&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      {/* Review Cells */}&lt;br /&gt;
      {row.reviews.map((review, idx) =&amp;gt; (&lt;br /&gt;
        &amp;lt;td&lt;br /&gt;
          key={idx}&lt;br /&gt;
          className={`py-2 px-4 text-center ${getColorClass(review.score, row.maxScore)}`}&lt;br /&gt;
          data-question={review.comment}&lt;br /&gt;
        &amp;gt;&lt;br /&gt;
          &amp;lt;span style={{ textDecoration: review.comment ? &amp;quot;underline&amp;quot; : &amp;quot;none&amp;quot; }}&amp;gt;{review.score}&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/td&amp;gt;&lt;br /&gt;
      ))}&lt;br /&gt;
&lt;br /&gt;
      {/* Row Average */}&lt;br /&gt;
      &amp;lt;td className=&amp;quot;py-2 px-4 text-center&amp;quot;&amp;gt;{row.RowAvg.toFixed(2)}&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      {/* Optional columns for word count */}&lt;br /&gt;
      {showWordCount10 &amp;amp;&amp;amp; &amp;lt;td className=&amp;quot;py-2 px-4 text-center&amp;quot;&amp;gt;{getWordCount10(row)}&amp;lt;/td&amp;gt;}&lt;br /&gt;
      {showWordCount20 &amp;amp;&amp;amp; &amp;lt;td className=&amp;quot;py-2 px-4 text-center&amp;quot;&amp;gt;{getWordCount20(row)}&amp;lt;/td&amp;gt;}&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
  );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
export default ReviewTableRow; // Exporting the ReviewTableRow component as default&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/RoundSelector.tsx RoundSelectorCode]===&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component. Using buttons to represent separate review rounds offers several advantages over simply stacking them one below another:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1. Improved User Experience (UX): Buttons provide a clear visual cue for interactive elements, making it easier for users to understand that they can switch between rounds.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Better Organization: Buttons can be laid out horizontally or vertically, depending on space constraints, potentially saving space compared to a long list of rounds.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. Faster Navigation: With buttons, users can directly jump to the desired review round, improving navigation efficiency, especially for pages with many rounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
interface RoundSelectorProps {&lt;br /&gt;
  currentRound: number;&lt;br /&gt;
  handleRoundChange: (roundIndex: number) =&amp;gt; void;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// RoundSelector component to display buttons for selecting rounds&lt;br /&gt;
const RoundSelector: React.FC&amp;lt;RoundSelectorProps&amp;gt; = ({ currentRound, handleRoundChange }) =&amp;gt; {&lt;br /&gt;
  const [teamMembers, setTeamMembers] = useState&amp;lt;string[]&amp;gt;([]);&lt;br /&gt;
&lt;br /&gt;
  // Fetch team members from the teamData.json file on component mount&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    setTeamMembers(teamData.members);&lt;br /&gt;
  }, []); // Empty dependency array means it runs only once on component mount&lt;br /&gt;
&lt;br /&gt;
  return (&lt;br /&gt;
    &amp;lt;div className=&amp;quot;round-selector&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;div className=&amp;quot;flex items-center&amp;quot;&amp;gt;&lt;br /&gt;
        {/* Mapping over dummyDataRounds to render round buttons */}&lt;br /&gt;
        {dummyDataRounds.map((round, index) =&amp;gt; (&lt;br /&gt;
          &amp;lt;button&lt;br /&gt;
            key={index}&lt;br /&gt;
            className={`round-button mr-4 ${currentRound === index ? &amp;quot;current&amp;quot; : &amp;quot;&amp;quot;}`}&lt;br /&gt;
            onClick={() =&amp;gt; handleRoundChange(index)}&lt;br /&gt;
          &amp;gt;&lt;br /&gt;
            Round {index + 1}&lt;br /&gt;
          &amp;lt;/button&amp;gt;&lt;br /&gt;
        ))}&lt;br /&gt;
        {/* Displaying team members */}&lt;br /&gt;
        &amp;lt;span className=&amp;quot;ml-4&amp;quot;&amp;gt;&lt;br /&gt;
          Team members: {teamMembers.map((member, index) =&amp;gt; (&lt;br /&gt;
          &amp;lt;span key={index}&amp;gt;&lt;br /&gt;
              ({member})&lt;br /&gt;
            {index !== teamMembers.length - 1 &amp;amp;&amp;amp; ' '}&lt;br /&gt;
            &amp;lt;/span&amp;gt;&lt;br /&gt;
        ))}&lt;br /&gt;
        &amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
export default RoundSelector;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/utils.ts HelperFunctions]===&lt;br /&gt;
The codes given below shows three functions written in TypeScript or JavaScript:&lt;br /&gt;
&lt;br /&gt;
1. getColorClass takes a score and maxScore as input and returns a string representing a color class based on the score's percentage of the maximum score. It uses a series of if-else statements to assign a color class ('c1', 'c2', 'c3', 'c4', 'c5', or 'cf') based on different score percentage ranges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. getWordCount10 takes a ReviewData object as input and returns the count of reviews where the comment has more than 10 words. It filters the reviews array, splits each comment string by spaces, and counts the length of the resulting array &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. getWordCount20 is similar to getWordCount10 but counts reviews with more than 20 words in the comment.&lt;br /&gt;
The second image shows the calculateAverages function, which seems to be responsible for calculating various averages and scores displayed in a table or grid. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. calculateAverages function, is to be responsible for calculating various averages and scores displayed in a table or grid. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import { ReviewData } from './App';&lt;br /&gt;
&lt;br /&gt;
// Function to get color class based on score and maxScore&lt;br /&gt;
export const getColorClass = (score: number, maxScore: number) =&amp;gt; {&lt;br /&gt;
  let scoreColor = score;&lt;br /&gt;
 &lt;br /&gt;
  scoreColor = ((maxScore - scoreColor) / maxScore) * 100;&lt;br /&gt;
  if (scoreColor &amp;gt;= 80) return 'c1';&lt;br /&gt;
  else if (scoreColor &amp;gt;= 60 &amp;amp;&amp;amp; scoreColor &amp;lt; 80) return 'c2';&lt;br /&gt;
  else if (scoreColor &amp;gt;= 40 &amp;amp;&amp;amp; scoreColor &amp;lt; 60) return 'c3';&lt;br /&gt;
  else if (scoreColor &amp;gt;= 20 &amp;amp;&amp;amp; scoreColor &amp;lt; 40) return 'c4';&lt;br /&gt;
  else if (scoreColor &amp;gt;= 0 &amp;amp;&amp;amp; scoreColor &amp;lt; 20) return 'c5';&lt;br /&gt;
  else return 'cf';&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Function to get count of reviews with more than 10 words&lt;br /&gt;
export const getWordCount10 = (row: ReviewData) =&amp;gt; {&lt;br /&gt;
  return row.reviews.filter(&lt;br /&gt;
    (review) =&amp;gt; review.comment &amp;amp;&amp;amp; review.comment.trim().split(' ').length &amp;gt; 10&lt;br /&gt;
  ).length;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Function to get count of reviews with more than 20 words&lt;br /&gt;
export const getWordCount20 = (row: ReviewData) =&amp;gt; {&lt;br /&gt;
  return row.reviews.filter(&lt;br /&gt;
    (review) =&amp;gt; review.comment &amp;amp;&amp;amp; review.comment.trim().split(' ').length &amp;gt; 20&lt;br /&gt;
  ).length;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Function to calculate averages for rows and columns&lt;br /&gt;
export const calculateAverages = (&lt;br /&gt;
  currentRoundData: ReviewData[],&lt;br /&gt;
  sortOrderRow: 'asc' | 'desc' | 'none'&lt;br /&gt;
) =&amp;gt; {&lt;br /&gt;
  let totalAvg = 0;&lt;br /&gt;
  let questionCount = 0;&lt;br /&gt;
  let totalMaxScore = 0;&lt;br /&gt;
  currentRoundData.forEach((row) =&amp;gt; {&lt;br /&gt;
    const sum = row.reviews.reduce((acc, val) =&amp;gt; acc + val.score, 0);&lt;br /&gt;
    row.RowAvg = sum / row.reviews.length;&lt;br /&gt;
    totalAvg = row.RowAvg + totalAvg;&lt;br /&gt;
    totalMaxScore = totalMaxScore + row.maxScore;&lt;br /&gt;
    questionCount++;&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  const averagePeerReviewScore =&lt;br /&gt;
    questionCount &amp;gt; 0&lt;br /&gt;
      ? (((totalAvg / totalMaxScore) * 100) &amp;gt; 0 ? ((totalAvg / totalMaxScore) * 100).toFixed(2) : '0.00')&lt;br /&gt;
      : '0.00';&lt;br /&gt;
&lt;br /&gt;
  const columnAverages: number[] = Array.from({ length: currentRoundData[0].reviews.length }, () =&amp;gt; 0);&lt;br /&gt;
&lt;br /&gt;
  currentRoundData.forEach((row) =&amp;gt; {&lt;br /&gt;
    row.reviews.forEach((val, index) =&amp;gt; {&lt;br /&gt;
      columnAverages[index] += val.score;&lt;br /&gt;
    });&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  columnAverages.forEach((sum, index) =&amp;gt; {&lt;br /&gt;
    columnAverages[index] = (sum / totalMaxScore) * 5;&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  let sortedData = [...currentRoundData];&lt;br /&gt;
&lt;br /&gt;
  if (sortOrderRow === 'asc') {&lt;br /&gt;
    sortedData = currentRoundData.slice().sort((a, b) =&amp;gt; a.RowAvg - b.RowAvg);&lt;br /&gt;
  } else if (sortOrderRow === 'desc') {&lt;br /&gt;
    sortedData = currentRoundData.slice().sort((a, b) =&amp;gt; b.RowAvg - a.RowAvg);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return { averagePeerReviewScore, columnAverages, sortedData };&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Existing GradesView Page===&lt;br /&gt;
&lt;br /&gt;
The user interface design presents users in a tabular format, but it becomes cluttered when displaying the review tables for both round 1 and round 2 stacked together. Additionally, it only shows the average score calculated from both rounds, making it difficult to discern individual round scores. Overall, the current page layout is overloaded with information and challenging to navigate.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_original.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
We've implemented buttons that display review data upon clicking. This view maintains a clean layout, ensuring easy navigation, and allows for separate visibility of the average score for each round. All previously existing functionalities remain unchanged.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the reviews on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:ReImplementation Grades Round 1.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ReImplementation Grades Round 2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These design patterns play a pivotal role in ensuring the scalability, maintainability, and extensibility of our front-end implementation for Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Dummy Data ==&lt;br /&gt;
&lt;br /&gt;
The purpose of the dummy data is test the functionality of our frontend. For this purpose we have chosen JSON data as a template for test data, the future team working on the backend can delete this file if the data can be successfully retrieved from the database. &lt;br /&gt;
&lt;br /&gt;
=====JSON Files =====&lt;br /&gt;
&lt;br /&gt;
JSON files can be found here [Link]&lt;br /&gt;
&lt;br /&gt;
1. This dummy JSON is used to show the team name, team members, grades and the comments they got for the submission&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;team&amp;quot;: &amp;quot;Straw Hat Pirates&amp;quot;,&lt;br /&gt;
  &amp;quot;members&amp;quot;: [&amp;quot;Chaitanya Srusti&amp;quot;, &amp;quot;Nisarg Nilesh Doshi&amp;quot;, &amp;quot;Aniruddha Rajnekar&amp;quot;, &amp;quot;Malick, Kashika&amp;quot;],&lt;br /&gt;
  &amp;quot;grade&amp;quot;: &amp;quot;Grade for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;comment&amp;quot;: &amp;quot;Comment for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;late_penalty&amp;quot;: 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
2. This dummy JSON  shows the question number, the actual question, the review scores and the review text for this feature.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Does this feature meet the project requirements?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0}&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 1&lt;br /&gt;
    },&lt;br /&gt;
    // Add more question as needed .....&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What is the main purpose of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is polished and professional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements make the feature a joy to use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could benefit from refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is user-friendly, with intuitive navigation.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance user interaction effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may require further attention.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design encourages exploration and discovery.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design sets a new standard for user interfaces.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements are confusing and could be clarified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers an inviting and engaging experience.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    // Add more questions as needed...&lt;br /&gt;
    &lt;br /&gt;
  ],&lt;br /&gt;
  // Add more rounds as needed...&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Phase 2 Proposed Changes==&lt;br /&gt;
Following are the changes we have been assigned to do after completion of project 3:&lt;br /&gt;
&lt;br /&gt;
'''1. Integrate a submission button at the top of the grades view page to streamline the user experience and facilitate easy access to the submitted link.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed Solution''':-  To enhance user experience and simplify access to submission functionality, we propose integrating a submission button prominently positioned at the top of the grades view page. By incorporating a submission button at the top of the grades view page, users can effortlessly access the submitted link, enhancing navigation efficiency. This strategic integration optimizes user experience by reducing the need for extensive scrolling and searching, thereby streamlining the submission process.This strategic placement ensures streamlined navigation for users, allowing them to swiftly view the submitted link without unnecessary scrolling or searching. By adhering to the '''Single Responsibility Principle (SRP)''' of the SOLID principles, we ensure that each component, including the submission button, has a clear and distinct responsibility. For instance, should the submission process or interface requirements evolve, modifications to the submission button can be implemented independently without disrupting other components, thereby enhancing the system's overall adaptability and robustness within the object-oriented design and development framework.&lt;br /&gt;
&lt;br /&gt;
'''2. Show Meaningful title for the checkbox that shows comments more than 10 or 20 words.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed Solution''':- To enhance usability and provide clear guidance to users, we propose assigning descriptive titles to checkboxes that display comments exceeding either 10 or 20 words.This ensures users easily grasp the checkbox's purpose, fostering clearer comprehension and smoother navigation within the interface. By implementing a title such as &amp;quot;Expand Comments&amp;quot; or &amp;quot;View Detailed Comments,&amp;quot; users can easily discern the purpose of the checkbox and its associated action. This approach aligns with the '''Open/Closed Principle (OCP)''' of the SOLID principles by allowing for extension without modification. By adhering to this principle, we enable the system to be extended without requiring modifications to existing code. Therefore, if the criteria for comment expansion were to change in the future, the checkbox titles could be updated accordingly without the need to alter the underlying codebase. This design strategy enhances maintainability and scalability within the object-oriented design and development framework, allowing for seamless adaptation to evolving requirements while minimizing the risk of introducing errors or disruptions.&lt;br /&gt;
&lt;br /&gt;
'''3. Show Questions in the table on the click of the toggle button.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed Solution''':- To optimize user interaction and improve accessibility, we propose implementing a toggle button that, upon activation, dynamically populates the table with relevant questions.This implementation streamlines user experience, allowing for seamless toggling between different data views within the table interface. Also, This functionality ensures a seamless user experience by providing immediate access to the desired information without cluttering the interface unnecessarily. By adhering to the '''Open/Closed Principle (OCP)'''.The Open/Closed Principle (OCP) is applied by ensuring that the existing code for displaying the table remains unchanged (closed for modification) while allowing for the extension of functionality to dynamically populate the table with questions (open for extension) upon the click of the toggle button. This approach promotes code maintainability and scalability within the object-oriented design and development paradigm, enhancing the overall robustness of the system.&lt;br /&gt;
&lt;br /&gt;
'''4. Add Legend at the top of the table.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed solution''':-To enhance clarity and improve user comprehension, we propose adding a legend at the top of the table.This addition provides users with quick reference points, promoting clearer interpretation of symbols, colors, or abbreviations utilized within the table, thus improving overall user experience and facilitating smoother navigation of the data. This legend will provide concise explanations or key indicators for the data presented in the table, aiding users in interpreting the information more effectively. By incorporating this feature, users can quickly reference the legend to understand any symbols, colors, or abbreviations used within the table, thus streamlining their workflow and reducing cognitive load. This approach aligns with the '''Single Responsibility Principle (SRP)''' of the SOLID principles by ensuring that the legend component has a clear and distinct responsibility within the user interface. Additionally, it facilitates easy maintenance and scalability of the table's design, allowing for seamless updates or modifications as needed in the future.&lt;br /&gt;
&lt;br /&gt;
'''5. Implement a three buttons on the page  to show round1 score, round2 score, round1 and round 2 score combined.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed Solution''':-To optimize user experience and provide seamless access to scoring information, we propose implementing three buttons on the page: one for displaying round 1 scores, another for round 2 scores, and a third for combined round 1 and round 2 scores. This design choice simplifies user interaction, allowing for straightforward navigation and providing users with immediate access to the specific scoring data they require, thus improving overall usability and user experience.By adhering to the '''Interface Segregation Principle (ISP)''' of the SOLID principles, each button serves a distinct function, ensuring clarity and simplicity for users. The &amp;quot;Round 1 Scores&amp;quot; button provides focused access to round 1 data, while the &amp;quot;Round 2 Scores&amp;quot; button does the same for round 2. The &amp;quot;Combined Scores&amp;quot; button allows users to view both rounds' scores simultaneously, offering a comprehensive overview. This design approach not only enhances user interaction but also promotes maintainability and scalability within the object-oriented paradigm by segregating interface functionalities based on their specific purposes, facilitating future updates or modifications with minimal disruption.&lt;br /&gt;
&lt;br /&gt;
'''6. Refactor Dummy Data to structure it  by review instead of question.'''&lt;br /&gt;
&lt;br /&gt;
'''Proposed Solution''':-To improve data organization and enhance clarity, we propose refactoring the Dummy Data structure by grouping it according to reviews rather than questions. This approach aligns with the '''Single Responsibility Principle (SRP)''' of the SOLID principles, ensuring that each data structure has a clear and distinct purpose. By structuring data around reviews, users can more easily discern the context of each review and its associated information. This refactoring not only enhances readability but also promotes maintainability and scalability within the object-oriented design and development framework, facilitating future updates or modifications to the data structure with minimal disruption.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[File: E2441 UML.png | 800px| center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;Figure 2: Flow-Chart of the grades/view team page.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
Incorporating test cases into your React project is important to ensure this application is robust and functions as expected. Typically, there are several approaches can be taken when organizing test files in your React project directory. One of which is Inline Tests&lt;br /&gt;
&lt;br /&gt;
'''Inline Tests (Next to Components):'''&lt;br /&gt;
&lt;br /&gt;
'''Structure:''' Place your test files next to the components they are testing, usually within the same directory.&lt;br /&gt;
&lt;br /&gt;
'''Naming Convention:''' If your component file is named ComponentName.js, you would name your test file ComponentName.test.js or ComponentName.spec.js.&lt;br /&gt;
&lt;br /&gt;
'''Why inline tests are important?'''&lt;br /&gt;
&lt;br /&gt;
1.Inline tests provide immediate feedback during development. Developers can quickly verify that their changes haven't introduced unintended consequences or regressions by running the associated tests directly within their development environment.&lt;br /&gt;
&lt;br /&gt;
2.Placing tests inline with the code they're testing provides clear context for future developers who might be reading or modifying the code. It's easier to understand the intended behavior of the code when the associated tests are right there.&lt;br /&gt;
&lt;br /&gt;
3.Inline tests serve as living documentation for the codebase. They describe the expected behavior of the code in a tangible and executable way, ensuring that the documented behavior stays up-to-date with the actual implementation.&lt;br /&gt;
&lt;br /&gt;
4.When a test fails, having it inline with the code allows developers to quickly locate the problem area and understand the specific conditions that caused the failure. This speeds up the debugging process and facilitates faster resolution of issues.&lt;br /&gt;
Tests are easy to locate as they are right next to the code they are testing. It simplifies imports in your test files and helps developers quickly identify whether corresponding tests exist for a component.&lt;br /&gt;
&lt;br /&gt;
Following are the test cases that we have written to check our code:-&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTable.test.tsx ReviewTable.test.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from 'react';&lt;br /&gt;
import { render, fireEvent } from '@testing-library/react';&lt;br /&gt;
import { BrowserRouter as Router } from 'react-router-dom';&lt;br /&gt;
import ReviewTable from './ReviewTable';&lt;br /&gt;
&lt;br /&gt;
describe('ReviewTable component', () =&amp;gt; {&lt;br /&gt;
    test('renders without crashing', () =&amp;gt; {&lt;br /&gt;
        render(&lt;br /&gt;
          &amp;lt;Router&amp;gt; {/* Wrap your component with Router */}&lt;br /&gt;
            &amp;lt;ReviewTable /&amp;gt;&lt;br /&gt;
          &amp;lt;/Router&amp;gt;&lt;br /&gt;
        );&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
});&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Explanation:'''This test file is designed to validate the behavior of the ReviewTable component using Jest and React Testing Library. It ensures that the component renders without crashing by utilizing the render function provided by React Testing Library. By wrapping the ReviewTable component inside a Router component imported from react-router-dom, it establishes the necessary routing context for components that rely on React Router. This configuration allows the test to accurately simulate the environment in which the component operates. Overall, the test file serves as a quality assurance measure, verifying that the ReviewTable component can render successfully and integrate correctly with React Router.&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTableRow.test.tsx ReviewTableRow.test.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from 'react';&lt;br /&gt;
import { render, screen } from '@testing-library/react';&lt;br /&gt;
import '@testing-library/jest-dom/extend-expect'; // Import jest-dom for custom assertions&lt;br /&gt;
import ReviewTableRow from './ReviewTableRow'; // Import the component to test&lt;br /&gt;
&lt;br /&gt;
// Mocked ReviewData&lt;br /&gt;
const mockReviewData = {&lt;br /&gt;
  questionText: 'How do you like the product?',&lt;br /&gt;
  questionNumber: 'Q1',&lt;br /&gt;
  maxScore: 5,&lt;br /&gt;
  RowAvg: 4.2,&lt;br /&gt;
  reviews: [&lt;br /&gt;
    { score: 5, comment: 'Great product!' },&lt;br /&gt;
    { score: 4, comment: 'Good product.' },&lt;br /&gt;
    { score: 3, comment: 'Average product.' }&lt;br /&gt;
  ]&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
describe('ReviewTableRow', () =&amp;gt; {&lt;br /&gt;
  test('renders question number by default', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ReviewTableRow row={mockReviewData} showWordCount10={true} showWordCount20={true} showFullQuestion={false} /&amp;gt;);&lt;br /&gt;
    expect(screen.getByText('Q1')).toBeInTheDocument();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('renders full question text when showFullQuestion is true', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ReviewTableRow row={mockReviewData} showWordCount10={true} showWordCount20={true} showFullQuestion={true} /&amp;gt;);&lt;br /&gt;
    expect(screen.getByText('How do you like the product?')).toBeInTheDocument();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('renders reviews with correct scores and comments', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ReviewTableRow row={mockReviewData} showWordCount10={true} showWordCount20={true} showFullQuestion={false} /&amp;gt;);&lt;br /&gt;
  &lt;br /&gt;
    // Find the score within the circle span&lt;br /&gt;
    const circleScoreElement = screen.getByRole('cell', { name: '5' });&lt;br /&gt;
  &lt;br /&gt;
    // Find the scores within the underlined spans&lt;br /&gt;
    const underlinedScoreElements = screen.getAllByRole('cell', { name: /5/ });&lt;br /&gt;
  &lt;br /&gt;
    // Assert that the elements are present&lt;br /&gt;
    expect(circleScoreElement).toBeInTheDocument();&lt;br /&gt;
    expect(underlinedScoreElements.length).toBe(2); // Assuming all scores are underlined&lt;br /&gt;
    // Add assertions for comments if needed&lt;br /&gt;
  });  &lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Explanation:'''This test file focuses on the ReviewTableRow component, aiming to validate its rendering and behavior under different conditions. It employs Jest and React Testing Library for testing purposes, along with the jest-dom library for custom assertions. The mockReviewData object simulates review data, providing sample information about a question, its number, maximum score, average score, and reviews. &lt;br /&gt;
The first test, 'renders question number by default', ensures that the component correctly displays the question number when no additional options are specified. The second test, 'renders full question text when showFullQuestion is true', verifies whether the component renders the full question text when the showFullQuestion prop is set to true. &lt;br /&gt;
Lastly, the 'renders reviews with correct scores and comments' test assesses the rendering of review scores and comments. It locates the elements displaying scores within circles and underlined spans and asserts their presence. Additional assertions for comments can be added if necessary. Overall, these tests comprehensively evaluate the rendering and functionality of the ReviewTableRow component.&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/RoundSelector.test.tsx RoundSelector.test.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from 'react';&lt;br /&gt;
import { render, screen, fireEvent } from '@testing-library/react';&lt;br /&gt;
import '@testing-library/jest-dom';&lt;br /&gt;
import RoundSelector from './RoundSelector';&lt;br /&gt;
import dummyDataRounds from './Data/heatMapData.json';&lt;br /&gt;
&lt;br /&gt;
describe('RoundSelector', () =&amp;gt; {&lt;br /&gt;
  const handleRoundChangeMock = jest.fn();&lt;br /&gt;
  const showAllRoundsMock = jest.fn();&lt;br /&gt;
&lt;br /&gt;
  beforeEach(() =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;RoundSelector currentRound={0} handleRoundChange={handleRoundChangeMock} showAllRounds={showAllRoundsMock} /&amp;gt;);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('renders without crashing', () =&amp;gt; {&lt;br /&gt;
    expect(screen.getByText(/Team members:/)).toBeInTheDocument();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('renders the correct number of round buttons', () =&amp;gt; {&lt;br /&gt;
    expect(screen.getAllByRole('button')).toHaveLength(dummyDataRounds.length + 1); // +1 for the 'Show All' button&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('calls handleRoundChange with correct index when a round button is clicked', () =&amp;gt; {&lt;br /&gt;
    const roundButtons = screen.getAllByRole('button');&lt;br /&gt;
    fireEvent.click(roundButtons[1]); // Click on &amp;quot;Round 2&amp;quot;&lt;br /&gt;
    expect(handleRoundChangeMock).toHaveBeenCalledWith(1);&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('toggles current class correctly when a round button is clicked', () =&amp;gt; {&lt;br /&gt;
    const firstButton = screen.getAllByRole('button')[0];&lt;br /&gt;
    fireEvent.click(firstButton);&lt;br /&gt;
    expect(firstButton).toHaveClass('current');&lt;br /&gt;
    const secondButton = screen.getAllByRole('button')[1];&lt;br /&gt;
    fireEvent.click(secondButton);&lt;br /&gt;
    expect(secondButton).toHaveClass('current');&lt;br /&gt;
    expect(firstButton).not.toHaveClass('current');&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('calls showAllRounds and toggles current class when &amp;quot;Show All&amp;quot; button is clicked', () =&amp;gt; {&lt;br /&gt;
    const showAllButton = screen.getByText('Show All');&lt;br /&gt;
    fireEvent.click(showAllButton);&lt;br /&gt;
    expect(showAllRoundsMock).toHaveBeenCalled();&lt;br /&gt;
    expect(showAllButton).toHaveClass('current');&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Explanation:'''This test file is dedicated to testing the RoundSelector component, assessing its rendering and behavior under different scenarios. Utilizing Jest and React Testing Library along with jest-dom for custom assertions, the tests ensure the component's functionality.&lt;br /&gt;
The beforeEach hook renders the RoundSelector component with mock functions for handling round change and showing all rounds. This setup prepares the component for testing in each individual test case.&lt;br /&gt;
The first test, 'renders without crashing', confirms that the component displays the expected text ('Team members:') when rendered.&lt;br /&gt;
The second test, 'renders the correct number of round buttons', verifies whether the component renders the appropriate number of round buttons, considering the length of the dummyDataRounds array plus one for the 'Show All' button.&lt;br /&gt;
The third test, 'calls handleRoundChange with correct index when a round button is clicked', ensures that clicking on a round button triggers the handleRoundChange function with the correct round index.&lt;br /&gt;
The fourth test, 'toggles current class correctly when a round button is clicked', examines whether clicking on a round button toggles the 'current' class appropriately, indicating the active round.&lt;br /&gt;
Lastly, the fifth test, 'calls showAllRounds and toggles current class when &amp;quot;Show All&amp;quot; button is clicked', validates that clicking on the 'Show All' button invokes the showAllRounds function and toggles the 'current' class on the button itself.&lt;br /&gt;
In summary, these tests comprehensively evaluate the rendering and functionality of the RoundSelector component, ensuring its correctness and responsiveness to user interactions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ShowSubmission.test.tsx ShowSubmission.test.tsx]===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import React from 'react';&lt;br /&gt;
import { render, screen, fireEvent } from '@testing-library/react';&lt;br /&gt;
import '@testing-library/jest-dom/extend-expect'; // Import jest-dom for custom assertions&lt;br /&gt;
import ShowSubmission from './ShowSubmission'; // Import the component to test&lt;br /&gt;
&lt;br /&gt;
describe('ShowSubmission', () =&amp;gt; {&lt;br /&gt;
  test('renders button with correct text', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ShowSubmission /&amp;gt;);&lt;br /&gt;
    expect(screen.getByRole('button', { name: 'Show Submission' })).toBeInTheDocument();&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  test('collapsible content is initially hidden', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ShowSubmission /&amp;gt;);&lt;br /&gt;
    const collapsibleContent = screen.queryByTestId('example-collapse-text'); // Update test ID here&lt;br /&gt;
    expect(collapsibleContent).toBeNull(); // Check if the collapsible content is initially null&lt;br /&gt;
  });&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
  test('renders links when collapsible content is open', () =&amp;gt; {&lt;br /&gt;
    render(&amp;lt;ShowSubmission /&amp;gt;);&lt;br /&gt;
    const button = screen.getByRole('button', { name: 'Show Submission' });&lt;br /&gt;
    fireEvent.click(button);&lt;br /&gt;
    expect(screen.getByText('https://github.ncsu.edu/Program-2-Ruby-on-Rails/WolfEvents')).toBeInTheDocument();&lt;br /&gt;
    expect(screen.getByText('http://152.7.177.44:8080/')).toBeInTheDocument();&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Explanation:'''This test file focuses on the ShowSubmission component and evaluates its rendering and behavior under different circumstances. Leveraging Jest and React Testing Library along with jest-dom for custom assertions, the tests ensure the correctness and responsiveness of the component.&lt;br /&gt;
The first test, 'renders button with correct text', confirms whether the component renders a button with the expected text ('Show Submission').&lt;br /&gt;
The second test, 'collapsible content is initially hidden', checks if the collapsible content is initially hidden when the component is rendered. It queries for the collapsible content using its test ID and expects it to be null.&lt;br /&gt;
The third test, 'renders links when collapsible content is open', validates whether the component renders links when the collapsible content is open. It triggers a click on the 'Show Submission' button to reveal the content and then expects specific links to be present in the rendered output.&lt;br /&gt;
In summary, these tests comprehensively assess the rendering and behavior of the ShowSubmission component, ensuring that it renders as expected and displays the correct content based on user interactions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:React_TestCase_Output.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
This Screenshot shows that all the test cases we have written  have run successfully.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[https://github.com/Program-3-Expertiza/reimplementation-front-end FrontEnd Repo Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Program-3-Expertiza/reimplementation-back-end BackEnd Repo Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/reimplementation-front-end/pull/45 Pull Request]&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/bWEoo3KKJQ4 Demo Video]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
Kashika Mallick  (kmallick@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
Aniruddha Rajnekar (aarajnek@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Chaitanya Srusti (crsrusti@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Nisarg Doshi (ndoshi2@ncsu.edu)&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=154629</id>
		<title>CSC/ECE 517 Spring 2024 - E2431. Reimplement grades/view team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=154629"/>
		<updated>2024-03-25T03:50:00Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza, a learning management system available as open-source software, utilizes the Ruby on Rails framework as its foundation. Its features encompass the creation of assignments, tests, assignment teams, and courses, among others. Particularly noteworthy is its comprehensive system designed to facilitate peer reviews and feedback within teams and groups. The primary focus of this project lies in developing frontend React Components, specifically targeting User, Institution, and Roles functionalities. The objective is to create a fully operational user interface for these components using React.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement ==&lt;br /&gt;
The main objective of this project is to redesign the front end for the grades/view_team page within Expertiza. The current layout suffers from performance issues and outdated design, resulting in decreased usability. Our aim is to improve user experience and interface efficiency by developing a refreshed front end using React JS and TypeScript. The project will concentrate on several key features including displaying team information such as names and assignment details, listing reviews and their comments/feedback for each question while ensuring consistency, indicating review scores with color-coding(Heat map) from green to red.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
In the re-implementation of Expertiza's front end, we have utilized several design patterns to enhance maintainability and promote code reusability:&lt;br /&gt;
&lt;br /&gt;
1. Composite Design Pattern: We employ the Composite Design Pattern by nesting and composing components like Table, Modal, and others to construct our Course component effectively.&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle: Adhering to the DRY Principle, we leverage React's capabilities to reuse existing components such as Table and Modal, thereby minimizing redundancy in our codebase.&lt;br /&gt;
&lt;br /&gt;
3. Provider Pattern: Using React's Context API, we implement the Provider Pattern to seamlessly pass props down the component tree without explicit prop drilling.&lt;br /&gt;
&lt;br /&gt;
4. Observer Pattern: We harness the Observer Pattern using React's Context API alongside hooks like useEffect and useState to efficiently manage component state and side effects.&lt;br /&gt;
&lt;br /&gt;
5. HOC Pattern: The HOC Pattern, or Higher-Order Component pattern, is adopted to facilitate routing for new pages by creating functions that take in a component and return a modified component with routing capabilities.&lt;br /&gt;
&lt;br /&gt;
6. Mediator Pattern: Given the disparity between backend data structures and frontend requirements, we employ the Mediator Pattern to transform data as needed, ensuring compatibility and coherence within our application.&lt;br /&gt;
&lt;br /&gt;
== Files Added ==&lt;br /&gt;
&lt;br /&gt;
We created an assignment folder inside the pages folder which includes the essentials for the implementation of all the changes mentioned in the previous sections.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 100%;&lt;br /&gt;
! &amp;amp;nbsp;#&amp;amp;nbsp; !! Change !! Rationale &lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/App.tsx App.tsx]&lt;br /&gt;
|Added code that sets up a React component (ReviewTable) to manage and display Reviews in Tabular Format. It handles data fetching from data stub, configures a dynamic table, and provides user interactions for viewing scores and.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTable.tsx ReviewTable.tsx]&lt;br /&gt;
|Here a component called `ReviewTable` responsible for displaying review data was created. It allows users to toggle between different rounds of reviews and customize the display by filtering reviews based on word count. The component calculates and displays the average peer review score, along with individual question scores and overall averages. Users can also navigate between different rounds of reviews using a selector. Additionally, it provides a link to navigate back to the homepage. Overall, the `ReviewTable` component provides a summary report of peer reviews for a specific assignment, enhancing the user's understanding of the review data.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/ReviewTableRow.tsx ReviewTableRow.tsx]&lt;br /&gt;
|This file is responsible for rendering a single row of review data within a table. It receives props containing information about the review data for that row, such as the review scores, question numbers, and average score. The component dynamically applies styling based on the review scores and calculates word counts for comments if enabled by the user. Overall, ReviewTableRow enhances the readability and presentation of individual review data within the larger review table.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/RoundSelector.tsx RoundSelector.tsx]&lt;br /&gt;
|This React code defines a component called `RoundSelector`, enabling users to switch between different rounds of reviews. It presents buttons for each review round, allowing users to easily navigate and view review data for specific rounds, along with displaying team member names involved in the review process.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/tree/main/src/pages/ViewTeamGrades/Data Dummy_Data]&lt;br /&gt;
|This code represents dummy data for reviews of a feature, where each feature has several questions with corresponding scores and comments from reviewers. The data is structured as an array of arrays, with each inner array containing review information for a specific round of reviews. Each round includes reviews for different questions about the feature, along with scores and comments from reviewers. This dummy data is used for testing and demonstration purposes in the application.&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/grades.scss grades.css]&lt;br /&gt;
|This CSS code provides styling for various elements in a web application, such as tables, buttons, circles, and tooltips. It defines the appearance of table containers, circles used for indicating scores, heatgrid tables for displaying data, and tags for student reports. Additionally, it styles round selectors and provides hover effects for buttons. This CSS is crucial for ensuring a visually appealing and user-friendly interface in the web application.&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|[https://github.com/Program-3-Expertiza/reimplementation-front-end/blob/main/src/pages/ViewTeamGrades/utils.ts utils.ts]&lt;br /&gt;
|This JavaScript code provides several utility functions for processing review data in a web application. `getColorClass` calculates a color class based on a score and maximum score, which is useful for visually indicating the performance level. `getWordCount10` and `getWordCount20` count the number of reviews with more than 10 and 20 words, respectively, helping to identify reviews with substantial feedback. `calculateAverages` computes average scores for rows and columns of review data, as well as sorting the data based on row averages. These functions are essential for analyzing and presenting review data effectively in the application.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
==Notable Code ReImplementation==&lt;br /&gt;
we have created component &amp;quot;ReviewTableRow&amp;quot; renders a table row with review data. It includes the question number, review comments, score, and word count. The component also has optional columns for word count that are conditionally rendered based on the showWordCount16 and showWordCount20 props. The styling and data population of the rendered elements are dynamically handled by functions like `getQtrColorClass` and `getWordCount28`. The component is designed to be used in a larger table structure where each row represents a review.&lt;br /&gt;
&lt;br /&gt;
[[File:ReviewTableRow_Code.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following design for users shows the tabular format in which the users are displayed. For our new components, we will be replicating this tabular format with the headers depending on the component. Using buttons to represent separate review rounds offers several advantages over simply stacking them one below another:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1. Improved User Experience (UX): Buttons provide a clear visual cue for interactive elements, making it easier for users to understand that they can switch between rounds.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. Better Organization: Buttons can be laid out horizontally or vertically, depending on space constraints, potentially saving space compared to a long list of rounds.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. Faster Navigation: With buttons, users can directly jump to the desired review round, improving navigation efficiency, especially for pages with many rounds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:RoundSelector_Code.jpeg |800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The images given below shows three functions written in TypeScript or JavaScript:&lt;br /&gt;
&lt;br /&gt;
1. getColorClass takes a score and maxScore as input and returns a string representing a color class based on the score's percentage of the maximum score. It uses a series of if-else statements to assign a color class ('c1', 'c2', 'c3', 'c4', 'c5', or 'cf') based on different score percentage ranges.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
2. getWordCount10 takes a ReviewData object as input and returns the count of reviews where the comment has more than 10 words. It filters the reviews array, splits each comment string by spaces, and counts the length of the resulting array &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
3. getWordCount20 is similar to getWordCount10 but counts reviews with more than 20 words in the comment.&lt;br /&gt;
The second image shows the calculateAverages function, which seems to be responsible for calculating various averages and scores displayed in a table or grid. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
4. calculateAverages function, is to be responsible for calculating various averages and scores displayed in a table or grid. &lt;br /&gt;
[[File:HeatMap_ColorCoding.jpeg|800px|center]] [[File:CalculateAverage_Code.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Designs ==&lt;br /&gt;
&lt;br /&gt;
Following designs are that of the users component which has already been done. This project aims to replicate these designs for the components that we will be creating as mentioned in the previous section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Existing GradesView Page===&lt;br /&gt;
&lt;br /&gt;
The user interface design presents users in a tabular format, but it becomes cluttered when displaying the review tables for both round 1 and round 2 stacked together. Additionally, it only shows the average score calculated from both rounds, making it difficult to discern individual round scores. Overall, the current page layout is overloaded with information and challenging to navigate.&lt;br /&gt;
&lt;br /&gt;
[[File:Expertiza_original.png|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Reimplementation Done ==&lt;br /&gt;
&lt;br /&gt;
The following are the snapshots of the functionality we tried to implement by leveraging the power of ReactJS and Typescript.&lt;br /&gt;
We've implemented buttons that display review data upon clicking. This view maintains a clean layout, ensuring easy navigation, and allows for separate visibility of the average score for each round. All previously existing functionalities remain unchanged.&lt;br /&gt;
&lt;br /&gt;
=== Displaying Assignments ===&lt;br /&gt;
&lt;br /&gt;
Our aim was to display relevant information while listing out the reviews on this page.&lt;br /&gt;
&lt;br /&gt;
[[File:ReImplementation Grades Round 1.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:ReImplementation Grades Round 2.jpeg|800px|center]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These design patterns play a pivotal role in ensuring the scalability, maintainability, and extensibility of our front-end implementation for Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Dummy Data ==&lt;br /&gt;
&lt;br /&gt;
The purpose of the dummy data is test the functionality of our frontend. For this purpose we have chosen JSON data as a template for test data, the future team working on the backend can delete this file if the data can be successfully retrieved from the database. &lt;br /&gt;
&lt;br /&gt;
=====JSON Files =====&lt;br /&gt;
&lt;br /&gt;
JSON files can be found here [Link]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;team&amp;quot;: &amp;quot;Straw Hat Pirates&amp;quot;,&lt;br /&gt;
  &amp;quot;members&amp;quot;: [&amp;quot;Chaitanya Srusti&amp;quot;, &amp;quot;Nisarg Nilesh Doshi&amp;quot;, &amp;quot;Aniruddha Rajnekar&amp;quot;, &amp;quot;Malick, Kashika&amp;quot;],&lt;br /&gt;
  &amp;quot;grade&amp;quot;: &amp;quot;Grade for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;comment&amp;quot;: &amp;quot;Comment for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;late_penalty&amp;quot;: 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Does this feature meet the project requirements?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0}&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 1&lt;br /&gt;
    },&lt;br /&gt;
    // Add more question as needed .....&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What is the main purpose of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is polished and professional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements make the feature a joy to use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could benefit from refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is user-friendly, with intuitive navigation.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance user interaction effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may require further attention.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design encourages exploration and discovery.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design sets a new standard for user interfaces.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements are confusing and could be clarified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers an inviting and engaging experience.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    // Add more questions as needed...&lt;br /&gt;
    &lt;br /&gt;
  ],&lt;br /&gt;
  // Add more rounds as needed...&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Future Scope==&lt;br /&gt;
1. Integrate a submission button at the top of the gradesview page to streamline the user experience and facilitate easy access to submission functionality.&lt;br /&gt;
&lt;br /&gt;
2. Develop a tagging table feature for reviews, enhancing organization and categorization capabilities to improve user navigation and analysis of review data.&lt;br /&gt;
&lt;br /&gt;
3. Optimize data structure by transitioning from storing dummy data by question to a more efficient organization by review, enhancing data management and retrieval processes.&lt;br /&gt;
&lt;br /&gt;
4. Incorporate a legend button into the interface to provide users with clear guidance and reference points, enhancing usability and accessibility of information.&lt;br /&gt;
&lt;br /&gt;
5. Enhance usability by implementing review sorting functionality based on the average score, enabling users to quickly identify and prioritize reviews based on performance metrics.&lt;br /&gt;
&lt;br /&gt;
6. Introduce visual aids such as graphs and charts to augment the presentation of review data, facilitating deeper insights and analysis for users through visual representations.&lt;br /&gt;
&lt;br /&gt;
7. Improve clarity and comprehension by displaying a color legend above the review table, providing users with a clear reference for interpreting color-coded indicators within the review interface.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
Kashika Mallick  (kmallick@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
Aniruddha Rajnekar (aarajnek@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Chaitanya Srusti (crsrusti@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Nisarg Doshi (ndoshi2@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
[https://github.com/Program-3-Expertiza/reimplementation-front-end FrontEnd Repo Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Program-3-Expertiza/reimplementation-back-end BackEnd Repo Link]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/expertiza/reimplementation-front-end/pull/45 Pull Request]&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153539</id>
		<title>CSC/ECE 517 Spring 2024 - E2431. Reimplement grades/view team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153539"/>
		<updated>2024-03-24T18:15:28Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza, a learning management system available as open-source software, utilizes the Ruby on Rails framework as its foundation. Its features encompass the creation of assignments, tests, assignment teams, and courses, among others. Particularly noteworthy is its comprehensive system designed to facilitate peer reviews and feedback within teams and groups. The primary focus of this project lies in developing frontend React Components, specifically targeting User, Institution, and Roles functionalities. The objective is to create a fully operational user interface for these components using React.&lt;br /&gt;
&lt;br /&gt;
==To Do ==&lt;br /&gt;
The main objective of this project is to redesign the front end for the grades/view_team page within Expertiza. The current layout suffers from performance issues and outdated design, resulting in decreased usability. Our aim is to improve user experience and interface efficiency by developing a refreshed front end using React JS and TypeScript. The project will concentrate on several key features including displaying team information such as names and assignment details, listing reviews and their comments/feedback for each question while ensuring consistency, indicating review scores with color-coding(Heat map) from green to red.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
In the re-implementation of Expertiza's front end, we have utilized several design patterns to enhance maintainability and promote code reusability:&lt;br /&gt;
&lt;br /&gt;
1. Composite Design Pattern: We employ the Composite Design Pattern by nesting and composing components like Table, Modal, and others to construct our Course component effectively.&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle: Adhering to the DRY Principle, we leverage React's capabilities to reuse existing components such as Table and Modal, thereby minimizing redundancy in our codebase.&lt;br /&gt;
&lt;br /&gt;
3. Provider Pattern: Using React's Context API, we implement the Provider Pattern to seamlessly pass props down the component tree without explicit prop drilling.&lt;br /&gt;
&lt;br /&gt;
4. Observer Pattern: We harness the Observer Pattern using React's Context API alongside hooks like useEffect and useState to efficiently manage component state and side effects.&lt;br /&gt;
&lt;br /&gt;
5. HOC Pattern: The HOC Pattern, or Higher-Order Component pattern, is adopted to facilitate routing for new pages by creating functions that take in a component and return a modified component with routing capabilities.&lt;br /&gt;
&lt;br /&gt;
6. Mediator Pattern: Given the disparity between backend data structures and frontend requirements, we employ the Mediator Pattern to transform data as needed, ensuring compatibility and coherence within our application.&lt;br /&gt;
&lt;br /&gt;
These design patterns play a pivotal role in ensuring the scalability, maintainability, and extensibility of our front-end implementation for Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Dummy Data ==&lt;br /&gt;
&lt;br /&gt;
The purpose of the dummy data is test the functionality of our frontend. For this purpose we have chosen JSON data as a template for test data, the future team working on the backend can delete this file if the data can be successfully retrieved from the database. &lt;br /&gt;
&lt;br /&gt;
=====JSON Files =====&lt;br /&gt;
&lt;br /&gt;
JSON files can be found here [Link]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;team&amp;quot;: &amp;quot;Straw Hat Pirates&amp;quot;,&lt;br /&gt;
  &amp;quot;members&amp;quot;: [&amp;quot;Chaitanya Srusti&amp;quot;, &amp;quot;Nisarg Nilesh Doshi&amp;quot;, &amp;quot;Aniruddha Rajnekar&amp;quot;, &amp;quot;Malick, Kashika&amp;quot;],&lt;br /&gt;
  &amp;quot;grade&amp;quot;: &amp;quot;Grade for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;comment&amp;quot;: &amp;quot;Comment for submission&amp;quot;,&lt;br /&gt;
  &amp;quot;late_penalty&amp;quot;: 0&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What is the main purpose of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Great work on this aspect!&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Could use some improvement here.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The presentation was well-organized and clear. However, some points could have been elaborated further to provide a deeper understanding of the topic.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The speaker demonstrated a profound understanding of the subject matter, making the session engaging and informative.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The visuals were compelling and helped in understanding complex concepts easily. However, there were a few slides with too much text, which made it hard to follow at times.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The use of real-world examples made the concepts more relatable and easier to grasp. Additionally, the speaker was engaging and kept the audience hooked throughout.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The interactive exercises were beneficial in reinforcing the learning. However, there were a few technical glitches that disrupted the flow.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The hands-on activities were the highlight of the session, providing practical experience that complemented the theoretical learning.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The guest speaker brought a fresh perspective to the topic, offering valuable insights that sparked further discussions among the participants.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The case studies presented were enlightening, providing practical examples that showcased the application of theoretical concepts.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How user-friendly is this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The interface was intuitive and easy to navigate.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;There were some confusing elements that could be simplified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature was straightforward to use, with clear instructions.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;The user experience could be improved, especially for new users.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some aspects were user-friendly, but others required a learning curve.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;More tooltips or hints could enhance the user-friendliness.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the feature was easy to grasp, but minor improvements could enhance the user experience.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The feature was generally user-friendly, with a few areas for improvement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain functions were straightforward, while others could use simplification.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;The feature would benefit from clearer labels and instructions.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Does this feature meet the project requirements?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0}&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 1&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;4&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How would you rate the performance of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The feature performs adequately under normal conditions.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Performance could be improved, especially for larger datasets.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The feature's performance is generally satisfactory.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1, &amp;quot;comment&amp;quot;: &amp;quot;Performance issues were encountered during testing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the feature performs well, but some optimizations could enhance speed.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;The feature's performance is acceptable but could be faster.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The feature handles most tasks efficiently, but a few functions could be optimized.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Performance is stable and meets expectations for regular use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The feature's performance meets the needs for the intended tasks.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;There were occasional lags in performance during heavy usage.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What are your thoughts on the design of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is sleek and modern, enhancing usability.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be more cohesive.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and visually appealing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;The design could be more user-centric.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design facilitates ease of use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices enhance functionality, while others could be refined.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design aligns well with the feature's purpose.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design elements contribute to a seamless user experience.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Design considerations are apparent, benefiting user interaction.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may confuse new users.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;6&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Were the documentation and help resources helpful?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The design is average, with room for improvement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance usability effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design stands out with its intuitive layout.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could be more cohesive.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is modern and visually appealing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Design considerations are apparent, benefiting user interaction.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The design offers room for improvement in certain areas.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is clean and uncluttered.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements contribute significantly to usability.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The design could be more user-centric.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;7&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Did the feature perform well under stress/load?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is sleek and modern, enhancing usability.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and visually appealing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be streamlined for clarity.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design facilitates ease of use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design elements contribute to a seamless user experience.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices enhance functionality, while others could be refined.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design aligns well with the feature's purpose.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design delights users with its attention to detail.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may confuse new users.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design balances aesthetics with functionality effectively.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;8&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How satisfied are you with the support provided for this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4 },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2 }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;9&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Would you recommend this feature to others?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is exceptional, exceeding expectations.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design aspects could be polished further.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design enhances user experience effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is top-notch, setting a new standard.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be more intuitive.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasant user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Design considerations are evident, making tasks straightforward.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices may require further refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to different screen sizes and devices.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is a joy to interact with.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;10&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Overall, how would you rate this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is polished and professional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements make the feature a joy to use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could benefit from refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is user-friendly, with intuitive navigation.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance user interaction effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may require further attention.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design encourages exploration and discovery.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design sets a new standard for user interfaces.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements are confusing and could be clarified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design offers an inviting and engaging experience.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What is the main purpose of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is polished and professional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements make the feature a joy to use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could benefit from refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is user-friendly, with intuitive navigation.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance user interaction effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may require further attention.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design encourages exploration and discovery.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design sets a new standard for user interfaces.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements are confusing and could be clarified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers an inviting and engaging experience.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;2&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How user-friendly is this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is flawless, making tasks effortless.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could be more user-oriented.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is inviting and approachable.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements provide a delightful user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design choices could enhance user engagement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to varying user needs.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design excels in simplicity and effectiveness.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements could benefit from more visual hierarchy.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasing aesthetic while being functional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and user-centric.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Does this feature meet the project requirements?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0},&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1 }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 1&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;4&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How would you rate the performance of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is exceptional, exceeding expectations.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design aspects could be polished further.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design enhances user experience effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is top-notch, setting a new standard.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 0, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be more intuitive.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasant user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Design considerations are evident, making tasks straightforward.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices may require further refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to different screen sizes and devices.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is a joy to interact with.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;What are your thoughts on the design of this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is polished and professional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements make the feature a joy to use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could benefit from refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is user-friendly, with intuitive navigation.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements enhance user interaction effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may require further attention.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design encourages exploration and discovery.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design sets a new standard for user interfaces.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements are confusing and could be clarified.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers an inviting and engaging experience.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;6&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Were the documentation and help resources helpful?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is flawless, making tasks effortless.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could be more user-oriented.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is inviting and approachable.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements provide a delightful user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design choices could enhance user engagement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to varying user needs.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design excels in simplicity and effectiveness.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 1, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements could benefit from more visual hierarchy.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasing aesthetic while being functional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and user-centric.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;7&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Did the feature perform well under stress/load?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is sleek and modern, enhancing usability.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and visually appealing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be streamlined for clarity.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design facilitates ease of use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design elements contribute to a seamless user experience.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices enhance functionality, while others could be refined.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design aligns well with the feature's purpose.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design delights users with its attention to detail.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may confuse new users.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design balances aesthetics with functionality effectively.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;8&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;How satisfied are you with the support provided for this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is exceptional, exceeding expectations.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Certain design aspects could be polished further.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design enhances user experience effectively.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is top-notch, setting a new standard.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be more intuitive.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasant user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Design considerations are evident, making tasks straightforward.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices may require further refinement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to different screen sizes and devices.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is a joy to interact with.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;9&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Would you recommend this feature to others?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design is flawless, making tasks effortless.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects could be more user-oriented.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is inviting and approachable.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements provide a delightful user journey.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Some design choices could enhance user engagement.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design adapts well to varying user needs.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design excels in simplicity and effectiveness.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 2, &amp;quot;comment&amp;quot;: &amp;quot;Certain design elements could benefit from more visual hierarchy.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design offers a pleasing aesthetic while being functional.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and user-centric.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;questionNumber&amp;quot;: &amp;quot;10&amp;quot;,&lt;br /&gt;
      &amp;quot;questionText&amp;quot;: &amp;quot;Overall, how would you rate this feature?&amp;quot;,&lt;br /&gt;
      &amp;quot;reviews&amp;quot;: [&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design is sleek and modern, enhancing usability.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The feature's design is intuitive and visually appealing.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Some design elements could be streamlined for clarity.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Overall, the design facilitates ease of use.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;The design elements contribute to a seamless user experience.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 3, &amp;quot;comment&amp;quot;: &amp;quot;Certain design choices enhance functionality, while others could be refined. Overall scope of improvement&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design aligns well with the feature's purpose.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 5, &amp;quot;comment&amp;quot;: &amp;quot;The design delights users with its attention to detail.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;Some design aspects may confuse new users.&amp;quot; },&lt;br /&gt;
        { &amp;quot;score&amp;quot;: 4, &amp;quot;comment&amp;quot;: &amp;quot;The design balances aesthetics with functionality effectively.&amp;quot; }&lt;br /&gt;
      ],&lt;br /&gt;
      &amp;quot;RowAvg&amp;quot;: 0,&lt;br /&gt;
      &amp;quot;maxScore&amp;quot;: 5&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
Kashika Mallick  (kmallick@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
Aniruddha Rajnekar (aarajnek@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Chaitanya Srusti (crsrusti@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Nisarg Doshi (ndoshi2@ncsu.edu)&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153406</id>
		<title>CSC/ECE 517 Spring 2024 - E2431. Reimplement grades/view team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153406"/>
		<updated>2024-03-24T16:04:14Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza, a learning management system available as open-source software, utilizes the Ruby on Rails framework as its foundation. Its features encompass the creation of assignments, tests, assignment teams, and courses, among others. Particularly noteworthy is its comprehensive system designed to facilitate peer reviews and feedback within teams and groups. The primary focus of this project lies in developing frontend React Components, specifically targeting User, Institution, and Roles functionalities. The objective is to create a fully operational user interface for these components using React.&lt;br /&gt;
&lt;br /&gt;
==To Do ==&lt;br /&gt;
The main objective of this project is to redesign the front end for the grades/view_team page within Expertiza. The current layout suffers from performance issues and outdated design, resulting in decreased usability. Our aim is to improve user experience and interface efficiency by developing a refreshed front end using React JS and TypeScript. The project will concentrate on several key features including displaying team information such as names and assignment details, listing reviews and their comments/feedback for each question while ensuring consistency, indicating review scores with color-coding(Heat map) from green to red.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
In the re-implementation of Expertiza's front end, we have utilized several design patterns to enhance maintainability and promote code reusability:&lt;br /&gt;
&lt;br /&gt;
1. Composite Design Pattern: We employ the Composite Design Pattern by nesting and composing components like Table, Modal, and others to construct our Course component effectively.&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle: Adhering to the DRY Principle, we leverage React's capabilities to reuse existing components such as Table and Modal, thereby minimizing redundancy in our codebase.&lt;br /&gt;
&lt;br /&gt;
3. Provider Pattern: Using React's Context API, we implement the Provider Pattern to seamlessly pass props down the component tree without explicit prop drilling.&lt;br /&gt;
&lt;br /&gt;
4. Observer Pattern: We harness the Observer Pattern using React's Context API alongside hooks like useEffect and useState to efficiently manage component state and side effects.&lt;br /&gt;
&lt;br /&gt;
5. HOC Pattern: The HOC Pattern, or Higher-Order Component pattern, is adopted to facilitate routing for new pages by creating functions that take in a component and return a modified component with routing capabilities.&lt;br /&gt;
&lt;br /&gt;
6. Mediator Pattern: Given the disparity between backend data structures and frontend requirements, we employ the Mediator Pattern to transform data as needed, ensuring compatibility and coherence within our application.&lt;br /&gt;
&lt;br /&gt;
These design patterns play a pivotal role in ensuring the scalability, maintainability, and extensibility of our front-end implementation for Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Dummy Data ==&lt;br /&gt;
&lt;br /&gt;
The purpose of the dummy data is test the functionality of our frontend. For this purpose we have chosen JSON data as a template for test data, the future team working on the backend can delete this file if the data can be successfully retrieved from the database. &lt;br /&gt;
&lt;br /&gt;
=====JSON File =====&lt;br /&gt;
&lt;br /&gt;
JSON file can be found here [Link]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
Kashika Mallick  (kmallick@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
Aniruddha Rajnekar (aarajnek@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Chaitanya Srusti (crsrusti@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Nisarg Doshi (ndoshi2@ncsu.edu)&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153404</id>
		<title>CSC/ECE 517 Spring 2024 - E2431. Reimplement grades/view team</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024_-_E2431._Reimplement_grades/view_team&amp;diff=153404"/>
		<updated>2024-03-24T16:03:34Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza, a learning management system available as open-source software, utilizes the Ruby on Rails framework as its foundation. Its features encompass the creation of assignments, tests, assignment teams, and courses, among others. Particularly noteworthy is its comprehensive system designed to facilitate peer reviews and feedback within teams and groups. The primary focus of this project lies in developing frontend React Components, specifically targeting User, Institution, and Roles functionalities. The objective is to create a fully operational user interface for these components using React.&lt;br /&gt;
&lt;br /&gt;
==To Do ==&lt;br /&gt;
The main objective of this project is to redesign the front end for the grades/view_team page within Expertiza. The current layout suffers from performance issues and outdated design, resulting in decreased usability. Our aim is to improve user experience and interface efficiency by developing a refreshed front end using React JS and TypeScript. The project will concentrate on several key features including displaying team information such as names and assignment details, listing reviews and their comments/feedback for each question while ensuring consistency, indicating review scores with color-coding(Heat map) from green to red.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
In the re-implementation of Expertiza's front end, we have utilized several design patterns to enhance maintainability and promote code reusability:&lt;br /&gt;
&lt;br /&gt;
1. Composite Design Pattern: We employ the Composite Design Pattern by nesting and composing components like Table, Modal, and others to construct our Course component effectively.&lt;br /&gt;
&lt;br /&gt;
2. DRY Principle: Adhering to the DRY Principle, we leverage React's capabilities to reuse existing components such as Table and Modal, thereby minimizing redundancy in our codebase.&lt;br /&gt;
&lt;br /&gt;
3. Provider Pattern: Using React's Context API, we implement the Provider Pattern to seamlessly pass props down the component tree without explicit prop drilling.&lt;br /&gt;
&lt;br /&gt;
4. Observer Pattern: We harness the Observer Pattern using React's Context API alongside hooks like useEffect and useState to efficiently manage component state and side effects.&lt;br /&gt;
&lt;br /&gt;
5. HOC Pattern: The HOC Pattern, or Higher-Order Component pattern, is adopted to facilitate routing for new pages by creating functions that take in a component and return a modified component with routing capabilities.&lt;br /&gt;
&lt;br /&gt;
6. Mediator Pattern: Given the disparity between backend data structures and frontend requirements, we employ the Mediator Pattern to transform data as needed, ensuring compatibility and coherence within our application.&lt;br /&gt;
&lt;br /&gt;
These design patterns play a pivotal role in ensuring the scalability, maintainability, and extensibility of our front-end implementation for Expertiza.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dummy Data ==&lt;br /&gt;
&lt;br /&gt;
The purpose of the dummy data is test the functionality of our frontend. For this purpose we have chosen JSON data as a template for test data, the future team working on the backend can delete this file if the data can be successfully retrieved from the database. &lt;br /&gt;
&lt;br /&gt;
=====JSON File =====&lt;br /&gt;
&lt;br /&gt;
JSON file can be found here [Link]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
Kashika Mallick  (kmallick@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
Aniruddha Rajnekar (aarajnek@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Chaitanya Srusti (crsrusti@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
Nisarg Doshi (ndoshi2@ncsu.edu)&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024&amp;diff=153324</id>
		<title>CSC/ECE 517 Spring 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2024&amp;diff=153324"/>
		<updated>2024-03-24T03:25:06Z</updated>

		<summary type="html">&lt;p&gt;Crsrusti: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Spring 2024 - E2407 Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2428 Replicate Roles and Institution UIs ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2429 Reimplement student_task list]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2414 Grading Audit Trail]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - ‬NTNX-2‬‭ : Snapshot Functionality for provisioned databases]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2411 : Fix &amp;quot;Back&amp;quot; link on “New Late Policy” page]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2416.  Reimplement the Question hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2420. Reimplement student_quizzes_controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2424. Reimplement the Bookmarks Controller]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2426. Create a UI for Assignment Edit page &amp;quot;Etc&amp;quot; tab in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2417. Reimplement submitted content controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2425. Create a Courses user interface in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2024 - E2431. Reimplement  grades/view_team]]&lt;/div&gt;</summary>
		<author><name>Crsrusti</name></author>
	</entry>
</feed>