<?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=Vdevire2</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=Vdevire2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Vdevire2"/>
	<updated>2026-05-18T12:10:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_4.png&amp;diff=160896</id>
		<title>File:Assign reviewer 4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_4.png&amp;diff=160896"/>
		<updated>2024-12-07T17:16:17Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160895</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160895"/>
		<updated>2024-12-07T17:15:46Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Add Reviewer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
&amp;lt;b&amp;gt;Main Table Component:&amp;lt;/b&amp;gt; This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Row Component&amp;lt;/b&amp;gt;:  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Action Buttons:&amp;lt;/b&amp;gt; Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Originally planned view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_1.png |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_2.png |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File: Assign_reviewer_3.png |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File: Assign_reviewer_4.png |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_3.png&amp;diff=160893</id>
		<title>File:Assign reviewer 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_3.png&amp;diff=160893"/>
		<updated>2024-12-07T17:12:11Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160892</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160892"/>
		<updated>2024-12-07T17:11:37Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Reviewer Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
&amp;lt;b&amp;gt;Main Table Component:&amp;lt;/b&amp;gt; This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Row Component&amp;lt;/b&amp;gt;:  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Action Buttons:&amp;lt;/b&amp;gt; Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Originally planned view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_1.png |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_2.png |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File: Assign_reviewer_3.png |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_2.png&amp;diff=160891</id>
		<title>File:Assign reviewer 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_2.png&amp;diff=160891"/>
		<updated>2024-12-07T17:11:00Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160890</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160890"/>
		<updated>2024-12-07T17:10:40Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Review Status Tracking */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
&amp;lt;b&amp;gt;Main Table Component:&amp;lt;/b&amp;gt; This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Row Component&amp;lt;/b&amp;gt;:  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Action Buttons:&amp;lt;/b&amp;gt; Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Originally planned view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_1.png |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_2.png |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160888</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160888"/>
		<updated>2024-12-07T17:07:38Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Overall view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
&amp;lt;b&amp;gt;Main Table Component:&amp;lt;/b&amp;gt; This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Row Component&amp;lt;/b&amp;gt;:  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Action Buttons:&amp;lt;/b&amp;gt; Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Originally planned view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_1.png |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160887</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160887"/>
		<updated>2024-12-07T17:06:41Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Overall view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
&amp;lt;b&amp;gt;Main Table Component:&amp;lt;/b&amp;gt; This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Row Component&amp;lt;/b&amp;gt;:  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Action Buttons:&amp;lt;/b&amp;gt; Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Originally planned view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File: Assign_reviewer_1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_1.png&amp;diff=160885</id>
		<title>File:Assign reviewer 1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assign_reviewer_1.png&amp;diff=160885"/>
		<updated>2024-12-07T17:06:04Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160580</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160580"/>
		<updated>2024-12-04T03:46:07Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Technologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160574</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160574"/>
		<updated>2024-12-04T03:42:54Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Future Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
* &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
* &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160572</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160572"/>
		<updated>2024-12-04T03:42:30Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Future Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
1. &amp;lt;b&amp;gt;Enhanced Assignment Management:&amp;lt;/b&amp;gt; Improve assignment editing capabilities by adding features like due date modification and participant management.  &lt;br /&gt;
2. &amp;lt;b&amp;gt;Comprehensive Questionnaire Support:&amp;lt;/b&amp;gt; Create intuitive pages for designing, updating, and interacting with questionnaires.  &lt;br /&gt;
3. &amp;lt;b&amp;gt;Automated Reviewer Assignment:&amp;lt;/b&amp;gt; Introduce dynamic reviewer assignment based on expertise, workload, or predefined criteria.  &lt;br /&gt;
4. &amp;lt;b&amp;gt;Account Request Module:&amp;lt;/b&amp;gt; Develop a streamlined module for handling and approving account requests efficiently.  &lt;br /&gt;
5. &amp;lt;b&amp;gt;Performance and Accessibility Enhancements:&amp;lt;/b&amp;gt; Optimize loading times and ensure a responsive design across all devices for a seamless user experience.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160562</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160562"/>
		<updated>2024-12-04T03:38:54Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure: Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160561</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160561"/>
		<updated>2024-12-04T03:38:37Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;2. Core Functionalities&amp;lt;/h3&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;3. UI Enhancements&amp;lt;/h3&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure:Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160559</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160559"/>
		<updated>2024-12-04T03:38:13Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;1. Frontend Component Files&amp;lt;/h3&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2. Core Functionalities&amp;lt;/h2&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;3. UI Enhancements&amp;lt;/h2&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure:Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160557</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160557"/>
		<updated>2024-12-04T03:37:42Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;1. Frontend Component Files&amp;lt;/h2&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;2. Core Functionalities&amp;lt;/h2&amp;gt;&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;3. UI Enhancements&amp;lt;/h2&amp;gt;&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure:Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160555</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160555"/>
		<updated>2024-12-04T03:36:22Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
1. Frontend Component Files&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
2. Core Functionalities&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
3. UI Enhancements&lt;br /&gt;
* Modal for Adding Reviewers: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* Interactive Elements: Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* Table Structure:Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160553</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160553"/>
		<updated>2024-12-04T03:35:22Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
1. Frontend Component Files&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
2. Core Functionalities&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
3. UI Enhancements&lt;br /&gt;
* &amp;lt;b&amp;gt;Modal for Adding Reviewers:&amp;lt;/b&amp;gt; Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
* &amp;lt;b&amp;gt;Interactive Elements:&amp;lt;/b&amp;gt;&lt;br /&gt;
  Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
* &amp;lt;b&amp;gt;Table Structure:&amp;lt;/b&amp;gt;&lt;br /&gt;
  Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160550</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160550"/>
		<updated>2024-12-04T03:33:39Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
1. Frontend Component Files&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
2. Core Functionalities&lt;br /&gt;
Reviewer Management Functions:&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleAddReviewer`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`handleUnsubmit`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`openModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
* &amp;lt;b&amp;gt;`closeModal`&amp;lt;/b&amp;gt;&lt;br /&gt;
Table Structure:&lt;br /&gt;
* Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
3. UI Enhancements&lt;br /&gt;
- &amp;lt;b&amp;gt;Modal for Adding Reviewers:&amp;lt;/b&amp;gt; Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- &amp;lt;b&amp;gt;Interactive Elements:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- &amp;lt;b&amp;gt;Table Structure:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160545</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160545"/>
		<updated>2024-12-04T03:31:20Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
1. Frontend Component Files&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
* &amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
2. Core Functionalities&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Management Functions&amp;lt;/b&amp;gt;:&lt;br /&gt;
`handleAddReviewer`&lt;br /&gt;
`handleUnsubmit`&lt;br /&gt;
`openModal`&lt;br /&gt;
`closeModal`&lt;br /&gt;
**Table Structure**:&lt;br /&gt;
- Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
3. UI Enhancements&lt;br /&gt;
- &amp;lt;b&amp;gt;Modal for Adding Reviewers:&amp;lt;/b&amp;gt; Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- &amp;lt;b&amp;gt;Interactive Elements:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- &amp;lt;b&amp;gt;Table Structure:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160542</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160542"/>
		<updated>2024-12-04T03:28:03Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
1. Frontend Component Files&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
2. Core Functionalities&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Management Functions&amp;lt;/b&amp;gt;:&lt;br /&gt;
- `handleAddReviewer`&lt;br /&gt;
- `handleUnsubmit`&lt;br /&gt;
- `openModal`&lt;br /&gt;
- `closeModal`&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
- Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
3. UI Enhancements&lt;br /&gt;
- &amp;lt;b&amp;gt;Modal for Adding Reviewers:&amp;lt;/b&amp;gt; Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- &amp;lt;b&amp;gt;Interactive Elements:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- &amp;lt;b&amp;gt;Table Structure:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160541</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160541"/>
		<updated>2024-12-04T03:27:24Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
# Frontend Component Files&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewer.tsx`:&amp;lt;/b&amp;gt; Implements the main UI for assigning reviewers.&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignReviewerStyle.css`:&amp;lt;/b&amp;gt; Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
&amp;lt;b&amp;gt;`src/pages/Assignments/AssignmentEditor.tsx`:&amp;lt;/b&amp;gt; Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
# Core Functionalities&lt;br /&gt;
&amp;lt;b&amp;gt;Reviewer Management Functions&amp;lt;/b&amp;gt;:&lt;br /&gt;
- `handleAddReviewer`&lt;br /&gt;
- `handleUnsubmit`&lt;br /&gt;
- `openModal`&lt;br /&gt;
- `closeModal`&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
- Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
# UI Enhancements&lt;br /&gt;
- &amp;lt;b&amp;gt;Modal for Adding Reviewers:&amp;lt;/b&amp;gt; Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- &amp;lt;b&amp;gt;Interactive Elements:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- &amp;lt;b&amp;gt;Table Structure:&amp;lt;/b&amp;gt;&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160536</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160536"/>
		<updated>2024-12-04T03:23:49Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
# List of Files Added/Updated&lt;br /&gt;
&lt;br /&gt;
### Frontend Component Files&lt;br /&gt;
**`src/pages/Assignments/AssignReviewer.tsx`**: Implements the main UI for assigning reviewers.&lt;br /&gt;
**`src/pages/Assignments/AssignReviewerStyle.css`**: Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
**`src/pages/Assignments/AssignmentEditor.tsx`**: Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
### Core Functionalities&lt;br /&gt;
**Reviewer Management Functions**:&lt;br /&gt;
- `handleAddReviewer`&lt;br /&gt;
- `handleUnsubmit`&lt;br /&gt;
- `openModal`&lt;br /&gt;
- `closeModal`&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
- Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
### UI Enhancements&lt;br /&gt;
- **Modal for Adding Reviewers**: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- **Interactive Elements**:&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160535</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160535"/>
		<updated>2024-12-04T03:23:30Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
## List of Files Added/Updated&lt;br /&gt;
&lt;br /&gt;
### Frontend Component Files&lt;br /&gt;
**`src/pages/Assignments/AssignReviewer.tsx`**: Implements the main UI for assigning reviewers.&lt;br /&gt;
**`src/pages/Assignments/AssignReviewerStyle.css`**: Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
**`src/pages/Assignments/AssignmentEditor.tsx`**: Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
### Core Functionalities&lt;br /&gt;
**Reviewer Management Functions**:&lt;br /&gt;
- `handleAddReviewer`&lt;br /&gt;
- `handleUnsubmit`&lt;br /&gt;
- `openModal`&lt;br /&gt;
- `closeModal`&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
- Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
### UI Enhancements&lt;br /&gt;
- **Modal for Adding Reviewers**: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- **Interactive Elements**:&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160533</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160533"/>
		<updated>2024-12-04T03:22:50Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
## List of Files Added/Updated&lt;br /&gt;
&lt;br /&gt;
### Frontend Component Files&lt;br /&gt;
- **`src/pages/Assignments/AssignReviewer.tsx`**: Implements the main UI for assigning reviewers.&lt;br /&gt;
- **`src/pages/Assignments/AssignReviewerStyle.css`**: Defines the CSS styles for the `AssignReviewer` component.&lt;br /&gt;
- **`src/pages/Assignments/AssignmentEditor.tsx`**: Adds navigation for the `AssignReviewer` page.&lt;br /&gt;
&lt;br /&gt;
### Core Functionalities&lt;br /&gt;
- **Reviewer Management Functions**:&lt;br /&gt;
  - `handleAddReviewer`&lt;br /&gt;
  - `handleUnsubmit`&lt;br /&gt;
  - `openModal`&lt;br /&gt;
  - `closeModal`&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
  - Dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
### UI Enhancements&lt;br /&gt;
- **Modal for Adding Reviewers**: Provides a user interface for adding reviewers to assignments.&lt;br /&gt;
- **Interactive Elements**:&lt;br /&gt;
  - Managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
- **Table Structure**:&lt;br /&gt;
  - Displays topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160531</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160531"/>
		<updated>2024-12-04T03:20:19Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* List of files added/updated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
&lt;br /&gt;
* Frontend Component Files&lt;br /&gt;
&lt;br /&gt;
** src/pages/Assignments/AssignReviewer.tsx: Implements the main UI for assigning reviewers.&lt;br /&gt;
** src/pages/Assignments/AssignReviewerStyle.css: Defines the CSS styles for the AssignReviewer component.&lt;br /&gt;
** src/pages/Assignments/AssignmentEditor.tsx: Adds navigation for the AssignReviewer page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Core Functionalities&lt;br /&gt;
&lt;br /&gt;
** Reviewer management functions (handleAddReviewer, handleUnsubmit, openModal, closeModal).&lt;br /&gt;
** Table structure with dynamic rows for reviewers and contributors.&lt;br /&gt;
&lt;br /&gt;
* UI Enhancements&lt;br /&gt;
&lt;br /&gt;
** Modal for adding reviewers.&lt;br /&gt;
** Interactive elements for managing reviewer assignments (e.g., &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Unsubmit&amp;quot;).&lt;br /&gt;
** Table structure for displaying topics, contributors, and reviewers.&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160528</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160528"/>
		<updated>2024-12-04T03:18:08Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Technologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;Frontend:&amp;lt;/b&amp;gt; React, TypeScript&lt;br /&gt;
* &amp;lt;b&amp;gt;State Management:&amp;lt;/b&amp;gt; React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* &amp;lt;b&amp;gt;Styling:&amp;lt;/b&amp;gt; CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* &amp;lt;b&amp;gt;Backend Interaction:&amp;lt;/b&amp;gt; API calls for real-time data updates&lt;br /&gt;
* &amp;lt;b&amp;gt;Tooling:&amp;lt;/b&amp;gt; Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160523</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160523"/>
		<updated>2024-12-04T03:17:01Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Technologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
* Frontend: React, TypeScript&lt;br /&gt;
* State Management: React's useState and useMemo, Context API for centralized data handling&lt;br /&gt;
* Styling: CSS (for responsive and accessible design), AssignReviewerStyle.css&lt;br /&gt;
* Backend Interaction: API calls for real-time data updates&lt;br /&gt;
* Tooling: Bootstrap for UI components&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160508</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160508"/>
		<updated>2024-12-04T03:10:52Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Technical Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
==Technologies==&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160507</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160507"/>
		<updated>2024-12-04T03:09:50Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
==Future Scope==&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160506</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160506"/>
		<updated>2024-12-04T03:09:03Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Test plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==List of files added/updated==&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160501</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160501"/>
		<updated>2024-12-04T03:05:39Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Snippets ==&lt;br /&gt;
===Interfaces for Data Representation===&lt;br /&gt;
====Reviewer and IContributor Interfaces====&lt;br /&gt;
&lt;br /&gt;
These interfaces are used to define and manage data related to reviewers and contributors.&lt;br /&gt;
Reviewer Interface: Represents individual reviewers, including details such as name, username, and review status.&lt;br /&gt;
IContributor Interface: Represents contributors, detailing their identity and role in the project submission process.&lt;br /&gt;
&lt;br /&gt;
====RowData Interface====&lt;br /&gt;
&lt;br /&gt;
Combines multiple aspects of a topic into a single, structured data model.&lt;br /&gt;
Components:&lt;br /&gt;
  Topic Details: The main subject under review.&lt;br /&gt;
  Contributor Information: Names and usernames of contributors involved.&lt;br /&gt;
  Reviewer Information: Assigned reviewers along with their current review status.&lt;br /&gt;
&lt;br /&gt;
This unified data model ensures seamless integration of topics, contributors, and reviewers for efficient management.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Core Functions for Reviewer Management===&lt;br /&gt;
====handleAddReviewer Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Adds a new reviewer to a specific topic in the table’s data.&lt;br /&gt;
Process:&lt;br /&gt;
Iterates through the table rows to find the row matching the selected topic.&lt;br /&gt;
Appends a new reviewer object (with a &amp;quot;Pending&amp;quot; status) to the reviewers array for that topic.&lt;br /&gt;
Closes the modal to confirm the operation visually.&lt;br /&gt;
&lt;br /&gt;
This function ensures the data is updated dynamically while maintaining the integrity of other rows.&lt;br /&gt;
&lt;br /&gt;
====handleUnsubmit Function====&lt;br /&gt;
&lt;br /&gt;
Purpose: Updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a selected topic.&lt;br /&gt;
Process:&lt;br /&gt;
Identifies the row corresponding to the selected topic.&lt;br /&gt;
Locates the specific reviewer by their name and updates their review status.&lt;br /&gt;
Preserves the state of other rows and reviewers.&lt;br /&gt;
&lt;br /&gt;
This ensures flexibility and allows administrators to reset reviews when needed.&lt;br /&gt;
&lt;br /&gt;
====openModal and closeModal Functions====&lt;br /&gt;
&lt;br /&gt;
openModal: Prepares and displays the modal for assigning or managing reviewers.&lt;br /&gt;
Sets the selected topic.&lt;br /&gt;
Formats contributor details into strings (e.g., name and username) for display.&lt;br /&gt;
Opens the modal by updating the setModalOpen state to true.&lt;br /&gt;
&lt;br /&gt;
closeModal: Closes the modal and resets any temporary fields (e.g., reviewer name).&lt;br /&gt;
&lt;br /&gt;
Together, these functions create a seamless user experience for modal interactions.&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===Data Structure for Review Management===&lt;br /&gt;
&lt;br /&gt;
Each topic in the system contains:&lt;br /&gt;
&lt;br /&gt;
Contributor Details: Includes the name and username of contributors.&lt;br /&gt;
Reviewer Details: Includes the name, username, and current review status of assigned reviewers.&lt;br /&gt;
&lt;br /&gt;
This structured dataset ensures clarity, allowing for organized review tracking and assignment.&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for Buttons and Links===&lt;br /&gt;
====Interactive Elements====&lt;br /&gt;
&lt;br /&gt;
Add Reviewer Button: Styled with colors and hover effects for clear visibility and actionability.&lt;br /&gt;
Unsubmit Link: Changes to light green on hover, indicating interactivity.&lt;br /&gt;
Submit and Cancel Buttons: Styled for consistent appearance with distinct colors and layout.&lt;br /&gt;
&lt;br /&gt;
====Layout and Presentation====&lt;br /&gt;
&lt;br /&gt;
Specifies properties such as width, margin, and alignment for a cohesive design.&lt;br /&gt;
Ensures all buttons and links are easily accessible and visually distinct.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
===CSS Styles for the Review Assignment Component===&lt;br /&gt;
====Component Styling====&lt;br /&gt;
&lt;br /&gt;
Container (.assign-reviewer-container): Provides padding, borders, and background color for a well-structured layout.&lt;br /&gt;
Table (.assign-reviewer-table): Styled for readability and clarity with defined spacing, borders, and alignment.&lt;br /&gt;
&lt;br /&gt;
====Table-Specific Styling====&lt;br /&gt;
&lt;br /&gt;
Headers and cells have distinct styles to differentiate them visually.&lt;br /&gt;
Ensures that elements are spaced appropriately, contributing to an organized presentation.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160495</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160495"/>
		<updated>2024-12-04T02:52:47Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* UI Enhancements and Features in Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Implementation ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
=== Overall view === &lt;br /&gt;
&lt;br /&gt;
The enhanced feature in Expertiza is designed to simplify the process of assigning reviewers to project submissions, providing a clear, functional, and user-friendly interface. This improvement addresses the needs of administrators managing peer reviews, offering tools for efficient reviewer assignment, tracking progress, and maintaining transparency in the workflow.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Review Status Tracking ===&lt;br /&gt;
Review Status Tracking&lt;br /&gt;
&lt;br /&gt;
The interface displays the current status of reviews for each project, categorized as either:&lt;br /&gt;
&lt;br /&gt;
    Pending: Reviews that have not yet been completed or submitted.&lt;br /&gt;
    Submitted: Reviews that are finalized and available for review by administrators.&lt;br /&gt;
&lt;br /&gt;
It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Reviewer Management ===&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
Administrators have the capability to:&lt;br /&gt;
&lt;br /&gt;
    Assign new reviewers to projects by entering their details directly into the system.&lt;br /&gt;
    Manage existing assignments, including updating or removing reviewers as needed.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
=== Add Reviewer ===&lt;br /&gt;
&lt;br /&gt;
Administrators can efficiently assign reviewers to submissions through a clear and user-friendly interface:&lt;br /&gt;
&lt;br /&gt;
    Add Reviewer Button: This feature simplifies the process of adding reviewers. Administrators can input the necessary user details and assign them to specific projects or topics.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160165</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160165"/>
		<updated>2024-12-03T14:34:37Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Pull Request*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Pull Request ==&lt;br /&gt;
Check out the [https://github.com/expertiza/reimplementation-front-end/pull/75 pull request] for a detailed changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160132</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160132"/>
		<updated>2024-12-03T04:03:01Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Test plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Demo Video ==&lt;br /&gt;
You can watch this [https://youtu.be/gnkIrNjF9cg demo video] for a detailed demonstration of the changes we made in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160128</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160128"/>
		<updated>2024-12-03T04:00:39Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160127</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160127"/>
		<updated>2024-12-03T04:00:15Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px| center]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160126</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160126"/>
		<updated>2024-12-03T03:58:18Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160125</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160125"/>
		<updated>2024-12-03T03:56:51Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
* The Reviewer and IContributor interfaces represent individual reviewers and contributors, while the RowData interface combines a topic, its contributors, and assigned reviewers into a single cohesive data model.&lt;br /&gt;
[[File:Code111.jpg |500px|left]]&lt;br /&gt;
&lt;br /&gt;
* This function, handleAddReviewer, adds a new reviewer to a specific topic in a table's data. It updates the table data by mapping through the existing rows, finding the row that matches the selectedTopic, and appending a new reviewer object with a &amp;quot;Pending&amp;quot; status to the reviewers array, then closes the modal afterward.&lt;br /&gt;
[[File:Code222.jpg |500px|left]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The handleUnsubmit function updates the review status of a specific reviewer to &amp;quot;Pending&amp;quot; for a given topic in the table data. It maps through the rows to find the matching topic, then updates the status of the reviewer with the specified reviewerName, ensuring other rows and reviewers remain unchanged.&lt;br /&gt;
[[File:Code333.jpg |500px|left]]&lt;br /&gt;
&lt;br /&gt;
* The openModal function prepares data for displaying a modal by setting the selected topic and formatting contributor details into strings showing their name and username. It then opens the modal by updating the setModalOpen state to true. The closeModal function simply closes the modal and resets the reviewer name field.&lt;br /&gt;
[[File:Code444.jpg |500px|left]]&lt;br /&gt;
&lt;br /&gt;
* Each topic includes contributor details (name and username) and reviewer information (name, username, and review status), showcasing a structured dataset for managing reviews and assignments.&lt;br /&gt;
[[File:Code555.jpg |500px|left]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code defines styles for various buttons and links, including an &amp;quot;add reviewer&amp;quot; button, &amp;quot;unsubmit&amp;quot; link, &amp;quot;submit&amp;quot; button, and &amp;quot;cancel&amp;quot; button. It specifies colors, hover effects (e.g., the &amp;quot;unsubmit&amp;quot; link changes to light green on hover), and layout properties such as width and margin to control their appearance and interactivity.&lt;br /&gt;
[[File:Code666.jpg |500px|left]]&lt;br /&gt;
&lt;br /&gt;
* This CSS code styles a component for assigning reviewers, including a container (.assign-reviewer-container) and a table (.assign-reviewer-table). It defines properties like padding, borders, alignment, and background color to ensure the table is well-structured, readable, and visually distinct, with specific styling for table headers, cells, and spacing between elements.&lt;br /&gt;
[[File:Code777.jpg |500px|left]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160079</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160079"/>
		<updated>2024-12-02T22:02:53Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* UI Enhancements and Features in Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
&lt;br /&gt;
* This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
* Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process. When hover over &amp;quot;Unsubmit&amp;quot; link, the color changes to green indicating that it is clickable and interactive.&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration. When hover over &amp;quot;Add reviewer&amp;quot; button, the color changes to blue.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* This image showcases the 'Add reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. On clicking the 'Add reviewer', the changes are saved.&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code Changes Made ==&lt;br /&gt;
[[File:Code111.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code333.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code444.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code666.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code777.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160069</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160069"/>
		<updated>2024-12-02T21:39:06Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* UI Enhancements and Features in Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |600px|center]]&lt;br /&gt;
Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |600px|center]]&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
This image showcases the 'Add Reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. It simplifies the management of peer reviews, ensuring efficient collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 81576a3c.jpg |300px|center]]&lt;br /&gt;
The 'Add Reviewer' popup in Expertiza, enabling administrators to assign reviewers by inputting their login details. It simplifies the process of assigning tasks to ensure seamless collaboration.&lt;br /&gt;
&lt;br /&gt;
=== Code Changes Made ===&lt;br /&gt;
[[File:Code111.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code333.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code444.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code666.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code777.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160011</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160011"/>
		<updated>2024-12-02T16:35:36Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |800px|center]]&lt;br /&gt;
Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |1000px|center]]&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
This image showcases the 'Add Reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. It simplifies the management of peer reviews, ensuring efficient collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 81576a3c.jpg |300px|center]]&lt;br /&gt;
The 'Add Reviewer' popup in Expertiza, enabling administrators to assign reviewers by inputting their login details. It simplifies the process of assigning tasks to ensure seamless collaboration.&lt;br /&gt;
&lt;br /&gt;
=== Code Changes Made ===&lt;br /&gt;
[[File:Code111.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code333.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code444.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code666.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Code777.jpg |500px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;UI looks similar to Expertiza with Pagination at bottom&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160010</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160010"/>
		<updated>2024-12-02T16:34:08Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |800px|center]]&lt;br /&gt;
Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |1000px|center]]&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
This image showcases the 'Add Reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. It simplifies the management of peer reviews, ensuring efficient collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 81576a3c.jpg |300px|center]]&lt;br /&gt;
The 'Add Reviewer' popup in Expertiza, enabling administrators to assign reviewers by inputting their login details. It simplifies the process of assigning tasks to ensure seamless collaboration.&lt;br /&gt;
&lt;br /&gt;
=== Code Changes Made ===&lt;br /&gt;
[[File:Code111.jpg |500px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code222.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code333.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code444.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code555.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code666.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:Code777.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code777.jpg&amp;diff=160009</id>
		<title>File:Code777.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code777.jpg&amp;diff=160009"/>
		<updated>2024-12-02T16:33:52Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code666.jpg&amp;diff=160008</id>
		<title>File:Code666.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code666.jpg&amp;diff=160008"/>
		<updated>2024-12-02T16:33:03Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code555.jpg&amp;diff=160007</id>
		<title>File:Code555.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code555.jpg&amp;diff=160007"/>
		<updated>2024-12-02T16:32:50Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code444.jpg&amp;diff=160006</id>
		<title>File:Code444.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code444.jpg&amp;diff=160006"/>
		<updated>2024-12-02T16:32:37Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code333.jpg&amp;diff=160005</id>
		<title>File:Code333.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code333.jpg&amp;diff=160005"/>
		<updated>2024-12-02T16:32:25Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Code222.jpg&amp;diff=160004</id>
		<title>File:Code222.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Code222.jpg&amp;diff=160004"/>
		<updated>2024-12-02T16:32:00Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160003</id>
		<title>CSC/ECE 517 Fall 2024 - E2493. UI for Assign Reviewers</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2024_-_E2493._UI_for_Assign_Reviewers&amp;diff=160003"/>
		<updated>2024-12-02T16:29:39Z</updated>

		<summary type="html">&lt;p&gt;Vdevire2: /* Code Changes Made */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system developed with Ruby on Rails, designed to enhance interactive and collaborative learning. Unlike traditional LMS platforms, it prioritizes peer reviews and team-based assignments, enabling students to exchange detailed feedback within and across groups. This approach fosters critical thinking and reflective learning by encouraging engagement with diverse perspectives, allowing students to refine their work through constructive input. The platform also supports course and assignment management, giving instructors the flexibility to create real-world projects that go beyond typical assessments. Its grading tools, often featuring rubrics, ensure transparent evaluation while providing personalized feedback. As an open-source system, Expertiza is highly customizable, allowing institutions to tailor its features and integrate seamlessly with other tools. By promoting teamwork and peer interaction, Expertiza equips students with essential collaborative skills for professional environments, making it an indispensable tool in modern education.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement ==&lt;br /&gt;
=== Project Overview ===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Assign Reviewers&amp;quot; UI project is aimed at developing a user interface to assign reviewers to assignments within the Expertiza platform. The new UI will focus on presenting the reviewers and contributors in a structured table layout, with the ability to manage reviewer assignments (e.g., unsubmit, delete). This interface will help streamline the process of assigning reviewers, making it easier for instructors to manage review assignments for contributors.&lt;br /&gt;
&lt;br /&gt;
== Functional Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== UI Layout ===&lt;br /&gt;
The table will consist of three main columns:&lt;br /&gt;
            Topic Selected: Display the title of the assignment or topic.&lt;br /&gt;
            Contributor: Show the name of the contributor who submitted the assignment.&lt;br /&gt;
            Reviewed By: Display the list of assigned reviewers.&lt;br /&gt;
Action buttons for each reviewer will be displayed in the &amp;quot;Reviewed By&amp;quot; column. These will include:&lt;br /&gt;
            Unsubmit: Allow the instructor to unassign a reviewer from a particular assignment.&lt;br /&gt;
            Delete: Allow the instructor to remove a reviewer from the assignment entirely.&lt;br /&gt;
&lt;br /&gt;
=== Exclusion of Meta Reviewer Options ===&lt;br /&gt;
The UI will exclude any options related to meta reviewers. This is to keep the focus on core reviewer functionalities.&lt;br /&gt;
&lt;br /&gt;
=== Interactivity ===&lt;br /&gt;
The &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete&amp;quot; buttons will trigger actions, which will interact with the backend to update the assignment status.&lt;br /&gt;
Hover or clickable rows will show tooltips for better clarity on available actions.&lt;br /&gt;
&lt;br /&gt;
=== Display Logic ===&lt;br /&gt;
Each assignment may have multiple reviewers, which will be displayed in the &amp;quot;Reviewed By&amp;quot; column.&lt;br /&gt;
If no reviewers are assigned, the UI will indicate that no reviewers are present.&lt;br /&gt;
The &amp;quot;Reviewed By&amp;quot; column should allow dynamic updates based on the changes made by the instructor.&lt;br /&gt;
&lt;br /&gt;
=== Excluding Meta Reviewer ===&lt;br /&gt;
Meta reviewer options will be excluded from this UI to focus on the primary reviewer functions.&lt;br /&gt;
&lt;br /&gt;
== Technical Design ==&lt;br /&gt;
=== Frontend (React &amp;amp; TypeScript) ===&lt;br /&gt;
&lt;br /&gt;
=== Component Structure ===&lt;br /&gt;
Main Table Component:&lt;br /&gt;
  This component will render the table structure, which includes all three columns: Topic Selected, Contributor, and Reviewed By.&lt;br /&gt;
Reviewer Row Component:&lt;br /&gt;
  A row within the table for each reviewer, displaying the reviewer's name and action buttons (Unsubmit/Delete).&lt;br /&gt;
Action Buttons:&lt;br /&gt;
  Each action button will trigger a specific function for managing reviewer assignments.&lt;br /&gt;
&lt;br /&gt;
=== State Management ===&lt;br /&gt;
&lt;br /&gt;
State management in this application uses React's state and Context API (or other suitable solutions) to efficiently handle and centralize data for each row representing assignments and reviewers. This setup enables consistent data sharing across components, reducing redundancy and simplifying data flow. API calls to the backend retrieve data on assignments and reviewers, ensuring the application remains up-to-date with real-time information. By managing state in a centralized way, it allows for dynamic interactions, streamlined updates, and an overall smoother user experience across the interface.&lt;br /&gt;
&lt;br /&gt;
=== Styling ===&lt;br /&gt;
For styling, use CSS or a CSS-in-JS solution like styled-components to create a visually appealing and functional table layout, along with styled action buttons. Ensure the design is responsive, adapting seamlessly to both desktop and mobile screens, to provide an optimal user experience across devices.&lt;br /&gt;
&lt;br /&gt;
== Design Principles ==&lt;br /&gt;
=== Design Principles for Assign Reviewers UI ===&lt;br /&gt;
'''1. Single Responsibility Principle (SRP)'''&lt;br /&gt;
Each React component in the UI will have a clearly defined responsibility, focusing on a single aspect of functionality or presentation.&lt;br /&gt;
&lt;br /&gt;
Main Table Component: Responsible for rendering the table layout with columns for &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By.&amp;quot;&lt;br /&gt;
Reviewer Row Component: Focused on displaying reviewer details and managing actions like &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot;&lt;br /&gt;
Action Buttons Component: Encapsulates specific functionalities for individual actions (e.g., handling clicks for &amp;quot;Unsubmit&amp;quot; or &amp;quot;Delete&amp;quot;).&lt;br /&gt;
By adhering to SRP, the components will be easier to understand, maintain, and test.&lt;br /&gt;
&lt;br /&gt;
'''2. Open/Closed Principle (OCP)'''&lt;br /&gt;
The UI and its components will be designed to be open for extension but closed for modification.&lt;br /&gt;
&lt;br /&gt;
The AssignmentsTable component can accommodate additional columns or features (e.g., new reviewer actions) by extending the functionality without altering its core logic.&lt;br /&gt;
New action buttons or features can be added as independent components, seamlessly integrating into the existing design without modifying other parts of the codebase.&lt;br /&gt;
This principle ensures future enhancements do not disrupt the stability of the current implementation.&lt;br /&gt;
&lt;br /&gt;
'''3. DRY Principle (Don’t Repeat Yourself)'''&lt;br /&gt;
Code duplication will be minimized by reusing components and centralizing logic.&lt;br /&gt;
&lt;br /&gt;
Reusable Components: Components like ActionButton and ReviewerRow will be created to handle repetitive UI elements and logic.&lt;br /&gt;
Shared State Management: React’s Context API or a similar state management library will centralize shared data, reducing redundant state handling across components.&lt;br /&gt;
Utility Functions: Common logic for tasks like API interactions or data formatting will be encapsulated in reusable utility functions.&lt;br /&gt;
By adhering to the DRY principle, the codebase will remain clean, consistent, and easier to maintain.&lt;br /&gt;
&lt;br /&gt;
'''4. Separation of Concerns (SoC)'''&lt;br /&gt;
The project will separate concerns across different layers to maintain a clear structure:&lt;br /&gt;
&lt;br /&gt;
Frontend Components: Handle the presentation and user interaction logic.&lt;br /&gt;
State Management: Manages the application state centrally to keep components stateless wherever possible.&lt;br /&gt;
Backend Interactions: Isolate API call logic into service functions or hooks for better reusability and testability.&lt;br /&gt;
This separation ensures modularity, making the system easier to debug and extend.&lt;br /&gt;
&lt;br /&gt;
'''5. Accessibility and Responsiveness'''&lt;br /&gt;
The UI will prioritize accessibility and adapt to various devices.&lt;br /&gt;
&lt;br /&gt;
Ensure components use semantic HTML elements for better screen reader support.&lt;br /&gt;
Implement responsive design principles to provide an optimal experience on both desktop and mobile devices.&lt;br /&gt;
Use ARIA roles for enhanced accessibility of dynamic components like buttons and tables.&lt;br /&gt;
&lt;br /&gt;
'''6. Consistency and Scalability'''&lt;br /&gt;
A consistent design system will be maintained for styling and interactions:&lt;br /&gt;
&lt;br /&gt;
Use CSS modules, styled-components, or a design system (e.g., Material-UI) for a unified appearance.&lt;br /&gt;
Keep naming conventions for CSS classes and component props standardized for better readability.&lt;br /&gt;
This consistency will make it easier to scale the project with additional features or contributors.&lt;br /&gt;
&lt;br /&gt;
== User Stories ==&lt;br /&gt;
&lt;br /&gt;
As an instructor, I want to see a list of contributors and the reviewers assigned to them, so that I can manage the assignment of reviewers.&lt;br /&gt;
As an instructor, I want to be able to unsubmit a reviewer, so that they are no longer responsible for reviewing a specific assignment.&lt;br /&gt;
As an instructor, I want to delete a reviewer, so that I can remove them completely from the review process for a particular assignment.&lt;br /&gt;
As a contributor, I want to see the status of my assignment and who is reviewing it.&lt;br /&gt;
&lt;br /&gt;
=== Use Case Diagram ===&lt;br /&gt;
&lt;br /&gt;
The central user interacts with various use cases, which are represented by blue ovals surrounding the user. These use cases include:&lt;br /&gt;
&lt;br /&gt;
* '''View Topic Selected:''' Allows the user to view the chosen topic for review.&lt;br /&gt;
* '''View Contributors:''' Enables the user to see a list of contributors.&lt;br /&gt;
* '''View Reviewers and Review Status:''' Lets the user view assigned reviewers and their review status.&lt;br /&gt;
* '''Add Reviewers for Each Topic:''' Provides functionality to add reviewers for specific topics.&lt;br /&gt;
* '''Delete Reviewers for Each Topic:''' Allows deletion of assigned reviewers per topic.&lt;br /&gt;
* '''Unsubmit Review Status:''' Enables the user to unsubmit a review status if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:usecase(1).png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Class Diagram ==&lt;br /&gt;
&lt;br /&gt;
The Class Diagram for the frontend UI of the &amp;quot;Assign Reviewers&amp;quot; functionality defines the key React components and their responsibilities. At the top level, the AssignReviewersPage component manages the overall state, holding data for both the assignments and the reviewers. It passes this data down to child components, including the AssignmentsTable, which renders the assignments as rows, each represented by a ReviewerRow component. Each reviewer row displays the reviewer's details and includes action buttons for &amp;quot;Unsubmit&amp;quot; and &amp;quot;Delete.&amp;quot; The ActionButton component, which is embedded within each row, handles the user interaction by triggering the appropriate method (either unsubmit or delete). The methods within ReviewerRow, such as handleUnsubmitClick and handleDeleteClick, interact with the parent component’s state to update the reviewer status or remove a reviewer. These components work together in a modular way, ensuring that the state is managed effectively while keeping the UI interactive and dynamic. The class diagram represents how data flows from the parent to the child components and how user actions result in state updates, which are reflected in the re-rendered UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ClassDiagramm.png |700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Expected view of table ==&lt;br /&gt;
&lt;br /&gt;
The table is divided into columns labeled &amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed by.&amp;quot; Each row displays details such as the topic, team names, contributor names, and review statuses. Buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; &amp;quot;Unsubmit,&amp;quot; and &amp;quot;Delete Review&amp;quot; allow users to manage reviewers and their submissions for the assignment. This layout facilitates easy organization and control of participants' review statuses.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot1new.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UI below shows an &amp;quot;Add Reviewer&amp;quot; interface in the Expertiza platform, where a user can assign reviewers to a specific project. The interface displays the contributor's team name (e.g., &amp;quot;E1234 team&amp;quot;) and the assignment title (&amp;quot;Final project (and design doc)&amp;quot;). Below, there is an input field labeled &amp;quot;Enter a user login:&amp;quot; where the user can type in the login ID of the reviewer they wish to add. A button labeled &amp;quot;Add Reviewer&amp;quot; is provided to submit the entry and assign the reviewer to the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:wikishot2.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== UI Enhancements and Features in Screenshots ==&lt;br /&gt;
&lt;br /&gt;
The UI has been updated to match the rest of the Expertiza APP&lt;br /&gt;
[[File:WhatsApp Image 2024-12-01 at 21.17.18 ea3e38d1.jpg |1000px|center]]&lt;br /&gt;
This feature from Expertiza showcases the interface for assigning reviewers to project submissions. It allows administrators to view contributors, track review statuses, and add or manage reviewers efficiently, streamlining the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 3470491a.jpg |800px|center]]&lt;br /&gt;
Review status tracking in Expertiza, showing assigned reviewers and their progress (Pending or Submitted). It also includes an option to unsubmit reviews, ensuring flexibility and transparency in the peer-review process.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 b6f8196b.jpg |1000px|center]]&lt;br /&gt;
Admins can track review statuses and assign new reviewers. It provides a clear interface to manage peer reviews effectively, ensuring smooth collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 db568918.jpg |1000px|center]]&lt;br /&gt;
This image showcases the 'Add Reviewer' functionality in Expertiza, allowing admins to assign reviewers to specific topics by entering their user details. It simplifies the management of peer reviews, ensuring efficient collaboration.&lt;br /&gt;
&lt;br /&gt;
  [[File:WhatsApp Image 2024-12-01 at 21.17.19 81576a3c.jpg |300px|center]]&lt;br /&gt;
The 'Add Reviewer' popup in Expertiza, enabling administrators to assign reviewers by inputting their login details. It simplifies the process of assigning tasks to ensure seamless collaboration.&lt;br /&gt;
&lt;br /&gt;
=== Code Changes Made ===&lt;br /&gt;
[[File:Code111.jpg |300px|center]]&lt;br /&gt;
&lt;br /&gt;
==Test plan==&lt;br /&gt;
&lt;br /&gt;
'''Manual Testing'''&lt;br /&gt;
&lt;br /&gt;
Manual testing ensures the functionality and usability of the &amp;quot;Participants&amp;quot; and &amp;quot;Add Reviewer&amp;quot; pages in the Expertiza platform. It focuses on verifying seamless navigation between pages, accurate rendering of the table layout, and proper functioning of action buttons like &amp;quot;Add Reviewer,&amp;quot; &amp;quot;Delete Reviewer,&amp;quot; and &amp;quot;Unsubmit.&amp;quot; Validation checks will handle empty, invalid, or duplicate inputs effectively, with clear error messages. Testing also ensures that actions like adding, deleting, or updating reviewers dynamically reflect in the interface. Additionally, the plan emphasizes responsiveness across devices and browsers, data consistency, and smooth navigation, ensuring a robust, user-friendly experience for managing reviewers.&lt;br /&gt;
&lt;br /&gt;
'''Automatic Testing'''&lt;br /&gt;
&lt;br /&gt;
Initially, testing was excluded from the project’s scope, as the focus was on frontend development. However, ensuring the functionality and user experience of the &amp;quot;Participants&amp;quot; interface is critical. Manual testing procedures will be employed to validate the proper operation of the UI components shown in the screenshot. These procedures include:&lt;br /&gt;
*Verifying that the &amp;quot;Add Reviewer&amp;quot; and &amp;quot;Delete Reviewer&amp;quot; buttons function correctly, dynamically updating the interface without errors.&lt;br /&gt;
*Testing the &amp;quot;Unsubmit&amp;quot; button to ensure it appropriately changes the review status in real-time.&lt;br /&gt;
*Confirming that all table columns—&amp;quot;Topic Selected,&amp;quot; &amp;quot;Contributor,&amp;quot; and &amp;quot;Reviewed By&amp;quot;—render accurate and consistent data for each assignment.&lt;br /&gt;
*Validating that any changes made to reviewers (adding, deleting, or unassigning) are reflected correctly in the UI.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
In conclusion, this design document provides a comprehensive plan for developing an improved UI for assigning reviewers in Expertiza. By leveraging React and TypeScript for the frontend, the solution aims to deliver a smooth and intuitive experience, enabling instructors to manage reviewer assignments efficiently. The use of modern technologies ensures high performance, scalability, and maintainable code. This approach also prioritizes data integrity and security, safeguarding the accuracy of assignment data while fostering a user-centric, responsive design that enhances usability across various devices.&lt;br /&gt;
&lt;br /&gt;
== Project Mentor ==&lt;br /&gt;
&lt;br /&gt;
'''Anvitha Reddy Gutha''' (agutha@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* '''Vishal Reddy Devireddy''' (unityid: vdevire2, github: vishalreddy2323)&lt;br /&gt;
* '''Madhumitha Aravelli''' (unityid: maravel, github: madhumithaaravelli)&lt;br /&gt;
* '''Mona Sree Muppala''' (unityid: mmuppal, github: Monasree)&lt;/div&gt;</summary>
		<author><name>Vdevire2</name></author>
	</entry>
</feed>