<?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=Krajesh</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=Krajesh"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Krajesh"/>
	<updated>2026-07-03T09:17:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160424</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160424"/>
		<updated>2024-12-04T01:46:50Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main Page .png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:deletion.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Editing.png | 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Editing.png&amp;diff=160423</id>
		<title>File:Editing.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Editing.png&amp;diff=160423"/>
		<updated>2024-12-04T01:46:37Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160421</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160421"/>
		<updated>2024-12-04T01:45:19Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Deletion Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main Page .png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:deletion.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_pop_up.png | 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Deletion.png&amp;diff=160419</id>
		<title>File:Deletion.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Deletion.png&amp;diff=160419"/>
		<updated>2024-12-04T01:44:57Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160414</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160414"/>
		<updated>2024-12-04T01:41:31Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main Page .png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_pop_up.png | 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page_.png&amp;diff=160412</id>
		<title>File:Main Page .png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page_.png&amp;diff=160412"/>
		<updated>2024-12-04T01:40:41Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160389</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160389"/>
		<updated>2024-12-04T00:52:05Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Main Page Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_pop_up.png | 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160379</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160379"/>
		<updated>2024-12-04T00:45:49Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_pop_up.png | 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160377</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160377"/>
		<updated>2024-12-04T00:45:24Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_pop_up.png | 1000px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_pop_up.png&amp;diff=160376</id>
		<title>File:Edit pop up.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_pop_up.png&amp;diff=160376"/>
		<updated>2024-12-04T00:44:52Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160373</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160373"/>
		<updated>2024-12-04T00:43:01Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: Edit_Final.jpg | 700px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Final.jpg&amp;diff=160372</id>
		<title>File:Edit Final.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Edit_Final.jpg&amp;diff=160372"/>
		<updated>2024-12-04T00:41:49Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160367</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160367"/>
		<updated>2024-12-04T00:38:00Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Deletion Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Final.png| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Final.png&amp;diff=160366</id>
		<title>File:Delete Final.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Final.png&amp;diff=160366"/>
		<updated>2024-12-04T00:37:40Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160361</id>
		<title>File:Delete Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160361"/>
		<updated>2024-12-04T00:35:50Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: Krajesh reverted File:Delete Page.jpg to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160360</id>
		<title>File:Delete Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160360"/>
		<updated>2024-12-04T00:35:02Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: Krajesh reverted File:Delete Page.jpg to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160359</id>
		<title>File:Delete Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=160359"/>
		<updated>2024-12-04T00:30:46Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: Krajesh uploaded a new version of File:Delete Page.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160356</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160356"/>
		<updated>2024-12-04T00:29:27Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=160354</id>
		<title>File:Main Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=160354"/>
		<updated>2024-12-04T00:28:26Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: Krajesh uploaded a new version of File:Main Page.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160284</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160284"/>
		<updated>2024-12-03T23:35:44Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Main Page Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for accessing the EditUser and DeleteUser components:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  const onDelete = (userId: number) =&amp;gt; {&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt; prevUsers.filter((user) =&amp;gt; user.id !== userId));&lt;br /&gt;
  };&lt;br /&gt;
  const onEditHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt; {&lt;br /&gt;
      if (!row.original) {&lt;br /&gt;
        console.error(&amp;quot;Row data is undefined&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
      setEditingUser(row.original as User); // Set the editing user data&lt;br /&gt;
      setShowEditModal(true); // Show the edit modal&lt;br /&gt;
    },&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  const onSaveEdit = (updatedUser: User) =&amp;gt; {&lt;br /&gt;
    // Update the user in the state&lt;br /&gt;
    setLocalUsers((prevUsers) =&amp;gt;&lt;br /&gt;
      prevUsers.map((user) =&amp;gt;&lt;br /&gt;
        user.id === updatedUser.id ? updatedUser : user&lt;br /&gt;
      )&lt;br /&gt;
    );&lt;br /&gt;
    setShowEditModal(false); // Close the modal&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${updatedUser.name} updated successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
  };&lt;br /&gt;
  const onDeleteHandle = useCallback(&lt;br /&gt;
    (row: TRow&amp;lt;IUserResponse&amp;gt;) =&amp;gt;&lt;br /&gt;
      setShowDeleteConfirmation({ visible: true, data: row.original }),&lt;br /&gt;
    []&lt;br /&gt;
  );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160279</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160279"/>
		<updated>2024-12-03T23:25:20Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Main Page Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Logic for adding a new user:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
const handleAddUser = () =&amp;gt; {&lt;br /&gt;
    if (!userLogin || !role) {&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;danger&amp;quot;,&lt;br /&gt;
          message: &amp;quot;Please enter a user login and select a role.&amp;quot;,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    const newUser: User = {&lt;br /&gt;
      id: new Date().getTime(),&lt;br /&gt;
      name: userLogin,&lt;br /&gt;
      email: `${userLogin}@example.com`,&lt;br /&gt;
      full_name: userLogin,&lt;br /&gt;
      email_on_review: false,&lt;br /&gt;
      email_on_submission: false,&lt;br /&gt;
      email_on_review_of_review: false,&lt;br /&gt;
      parent: { id: 101, name: null },&lt;br /&gt;
      institution: { id: 123, name: null },&lt;br /&gt;
      role: { id: 1, name: role },&lt;br /&gt;
      take_quiz: false,&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    setLocalUsers((prevUsers: User[]) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
&lt;br /&gt;
    dispatch(&lt;br /&gt;
      alertActions.showAlert({&lt;br /&gt;
        variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
        message: `User ${userLogin} added successfully!`,&lt;br /&gt;
      })&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    setUserLogin(&amp;quot;&amp;quot;);&lt;br /&gt;
    setRole(&amp;quot;&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160278</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160278"/>
		<updated>2024-12-03T23:12:22Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The EditUser component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160277</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160277"/>
		<updated>2024-12-03T23:10:55Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Editor Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
const EditUser: React.FC&amp;lt;IEditor&amp;gt; = ({ mode}) =&amp;gt; {&lt;br /&gt;
  const [users, setUsers] = useState&amp;lt;User[]&amp;gt;(dummyUsers);&lt;br /&gt;
  const [userData, setUserData] = useState&amp;lt;User | null&amp;gt;(null);&lt;br /&gt;
  &lt;br /&gt;
  const dispatch = useDispatch();&lt;br /&gt;
  const navigate = useNavigate();&lt;br /&gt;
  const location = useLocation();&lt;br /&gt;
&lt;br /&gt;
  const auth = useSelector(&lt;br /&gt;
    (state: RootState) =&amp;gt; state.authentication,&lt;br /&gt;
    (prev, next) =&amp;gt; prev.isAuthenticated === next.isAuthenticated&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
  // Pre-fill the data if in update mode&lt;br /&gt;
  useEffect(() =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot; &amp;amp;&amp;amp; location.state?.userId) {&lt;br /&gt;
      const user = users.find((user) =&amp;gt; user.id === location.state.userId);&lt;br /&gt;
      if (user) {&lt;br /&gt;
        setUserData(user);&lt;br /&gt;
      } else {&lt;br /&gt;
        console.error(&amp;quot;User not found&amp;quot;);&lt;br /&gt;
        // Handle case where the user isn't found in the dummy data&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mode === &amp;quot;create&amp;quot;) {&lt;br /&gt;
      setUserData(initialValues); // Ensure initial data is set for create mode&lt;br /&gt;
    }&lt;br /&gt;
  }, [mode, location.state?.userId, users]);&lt;br /&gt;
&lt;br /&gt;
  const onSubmit = (values: User, submitProps: FormikHelpers&amp;lt;User&amp;gt;) =&amp;gt; {&lt;br /&gt;
    if (mode === &amp;quot;update&amp;quot;) {&lt;br /&gt;
      // Find and update the user in the dummy data&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt;&lt;br /&gt;
        prevUsers.map((user) =&amp;gt;&lt;br /&gt;
          user.id === values.id ? { ...user, ...values } : user&lt;br /&gt;
        )&lt;br /&gt;
      );&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} updated successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    } else {&lt;br /&gt;
      // Add new user to the dummy data&lt;br /&gt;
      const newUser = { ...values, id: new Date().getTime() };&lt;br /&gt;
      setUsers((prevUsers) =&amp;gt; [...prevUsers, newUser]);&lt;br /&gt;
      dispatch(&lt;br /&gt;
        alertActions.showAlert({&lt;br /&gt;
          variant: &amp;quot;success&amp;quot;,&lt;br /&gt;
          message: `User ${values.name} created successfully!`,&lt;br /&gt;
        })&lt;br /&gt;
      );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    submitProps.setSubmitting(false);&lt;br /&gt;
    navigate(&amp;quot;/users&amp;quot;);&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  const handleClose = () =&amp;gt; navigate(location.state?.from ? location.state.from : &amp;quot;/users&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160276</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160276"/>
		<updated>2024-12-03T23:08:43Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Deletion Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
type DeleteUserProps = {&lt;br /&gt;
  userData: IUser;&lt;br /&gt;
  onClose: () =&amp;gt; void;&lt;br /&gt;
  onDelete: (userId: number) =&amp;gt; void; // Ensure this is declared&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
const DeleteUser: React.FC&amp;lt;DeleteUserProps&amp;gt; = ({ userData, onClose, onDelete }) =&amp;gt; {&lt;br /&gt;
  // const { data: deletedUser, error: userError, sendRequest: deleteUser } = useAPI();&lt;br /&gt;
  const [show, setShow] = useState&amp;lt;boolean&amp;gt;(true);&lt;br /&gt;
  // const dispatch = useDispatch();&lt;br /&gt;
&lt;br /&gt;
  // Delete user&lt;br /&gt;
const deleteHandler = () =&amp;gt; {&lt;br /&gt;
  onDelete(userData.id); // Call the parent-provided delete function&lt;br /&gt;
  setShow(false);&lt;br /&gt;
  &lt;br /&gt;
  onClose();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
  const closeHandler = () =&amp;gt; {&lt;br /&gt;
    setShow(false);&lt;br /&gt;
    onClose();&lt;br /&gt;
  };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160231</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160231"/>
		<updated>2024-12-03T22:13:22Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160230</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160230"/>
		<updated>2024-12-03T22:11:54Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Current Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: Current Implementation.jpg | 1000px ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Current_Implementation.jpg&amp;diff=160229</id>
		<title>File:Current Implementation.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Current_Implementation.jpg&amp;diff=160229"/>
		<updated>2024-12-03T22:10:42Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160228</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160228"/>
		<updated>2024-12-03T22:08:28Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Sequence Diagram for Layout Change */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160227</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160227"/>
		<updated>2024-12-03T22:08:12Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Project Description==&lt;br /&gt;
&lt;br /&gt;
===Objective===&lt;br /&gt;
This project focuses on reimplementation of the existing add/edit participants page in Expertiza. This page is important to add participants (students, mentors, etc) to assignments. &lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png | 500px]]&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160226</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=160226"/>
		<updated>2024-12-03T22:04:28Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
[[File: ]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Remove the Meta Review column since its not in use anymore.&lt;br /&gt;
&lt;br /&gt;
2. Combine the &amp;quot;Action&amp;quot; and &amp;quot;Participant Role&amp;quot; columns into a single column named &amp;quot;Action.&amp;quot; This column should allow users to edit a participant's role directly and delete participants as needed, eliminating the need for a separate &amp;quot;Submit&amp;quot; button after role selection, which currently lacks clarity.&lt;br /&gt;
&lt;br /&gt;
3. Use Icons to depict the actions &amp;quot;Edit&amp;quot; and &amp;quot;Delete&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
3. Adjust the information button so that, when hovered over, it provides users with details about each role, enabling them to create participants accurately.&lt;br /&gt;
&lt;br /&gt;
4. The radio buttons next to the roles do not adhere to proper UI design principles; they should be positioned closer to the roles for easier selection. &lt;br /&gt;
&lt;br /&gt;
5. Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
&lt;br /&gt;
6. Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
In this implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage.&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159929</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159929"/>
		<updated>2024-12-01T20:21:13Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The project to improve the Assignment Participants Management UI in Expertiza demonstrates a comprehensive approach to addressing usability and functionality issues in a learning management system. By focusing on key areas such as layout restructuring, enhanced filtering, bulk actions, and responsive design, the project aims to significantly improve the user experience for instructors and administrators.&lt;br /&gt;
The implementation leverages modern React components and libraries, adhering to important design principles like SOLID and DRY. This approach ensures a modular, maintainable, and extensible codebase. The use of dynamic column generation, conditional rendering, and state management showcases a thoughtful application of React best practices.&lt;br /&gt;
&lt;br /&gt;
Key improvements include:&lt;br /&gt;
&lt;br /&gt;
* A streamlined and more readable interface&lt;br /&gt;
* Advanced search and filtering capabilities&lt;br /&gt;
* Efficient bulk actions to reduce repetitive tasks&lt;br /&gt;
* Improved visual hierarchy with icons and tooltips&lt;br /&gt;
* Responsive design for various devices&lt;br /&gt;
&lt;br /&gt;
The inclusion of a manual UI testing plan further demonstrates a commitment to ensuring the quality and reliability of the new interface.&lt;br /&gt;
By addressing the current UI's limitations and introducing these enhancements, the project is poised to deliver a more efficient, user-friendly, and powerful tool for managing assignment participants in Expertiza. This redesign not only solves immediate usability issues but also lays a foundation for future improvements and scalability in the system.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159928</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159928"/>
		<updated>2024-12-01T20:16:46Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Manual UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159927</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159927"/>
		<updated>2024-12-01T20:16:11Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Members */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159926</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159926"/>
		<updated>2024-12-01T20:15:59Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Future Enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159925</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159925"/>
		<updated>2024-12-01T20:15:50Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Design Patterns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Principles==&lt;br /&gt;
&lt;br /&gt;
===Single Responsibility Principle (SRP)===&lt;br /&gt;
Each UI component will be designed to handle a specific function:&lt;br /&gt;
* User manages user information and reviews&lt;br /&gt;
* Review represents a single review&lt;br /&gt;
* ReviewManager handles the collection of reviews&lt;br /&gt;
&lt;br /&gt;
===Open/Closed Principle (OCP)=== &lt;br /&gt;
The classes are designed to be open for extension but closed for modification. For example, new functionality can be added to the User or ReviewManager classes without modifying their existing code.&lt;br /&gt;
&lt;br /&gt;
===Interface Segregation Principle(ISP)===&lt;br /&gt;
The classes have focused interfaces with methods that are relevant to their specific responsibilities, avoiding unnecessary dependencies.&lt;br /&gt;
&lt;br /&gt;
===Dependency Inversion Principle(DIP)===&lt;br /&gt;
The code shows a tendency towards depending on abstractions rather than concrete implementations, which is evident in the way the Review class is used by both User and ReviewManager&lt;br /&gt;
&lt;br /&gt;
===DRY(Don't Repeat Yourself)===&lt;br /&gt;
The code is modular, with classes representing distinct concepts, which helps reduce repeated logic across the codebase.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159923</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159923"/>
		<updated>2024-12-01T18:45:02Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
The pop-up appearing prompting the admin to conform the action of deletion.&lt;br /&gt;
&lt;br /&gt;
[[File:Delete_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=159922</id>
		<title>File:Delete Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Page.jpg&amp;diff=159922"/>
		<updated>2024-12-01T18:43:17Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=159921</id>
		<title>File:Main Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=159921"/>
		<updated>2024-12-01T18:42:04Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: Krajesh uploaded a new version of File:Main Page.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159919</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159919"/>
		<updated>2024-12-01T18:36:32Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Main Page Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
The main page containing all the changes made:&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159918</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159918"/>
		<updated>2024-12-01T18:35:46Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Main Page Component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
[[File:Main_Page.jpg| 1200px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=159917</id>
		<title>File:Main Page.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Main_Page.jpg&amp;diff=159917"/>
		<updated>2024-12-01T18:34:58Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159916</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159916"/>
		<updated>2024-12-01T18:34:26Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
[[File:| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159915</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159915"/>
		<updated>2024-12-01T18:32:09Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* AddEdit_Participants_Home.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Main Page Component===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159914</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159914"/>
		<updated>2024-12-01T18:31:54Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* AddEdit_Participant_Columns.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===AddEdit_Participants_Home.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===Columns Component===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159913</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159913"/>
		<updated>2024-12-01T18:31:42Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* AddEdit_Participant_Delete.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===AddEdit_Participants_Home.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Columns.tsx===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===Deletion Component===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159912</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159912"/>
		<updated>2024-12-01T18:31:23Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* AddEdit_Participants_Editor.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===AddEdit_Participants_Home.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Columns.tsx===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Delete.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===Editor Component===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159911</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159911"/>
		<updated>2024-12-01T18:30:50Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Implementation Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===AddEdit_Participants_Home.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Columns.tsx===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Delete.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participants_Editor.tsx===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159910</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159910"/>
		<updated>2024-12-01T18:30:06Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Implementation Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation Plan==&lt;br /&gt;
===AddEdit_Participants_Home.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, Users, is part of a user management interface for an application, likely related to participant management in a course or event. It fetches user data (simulated with dummy data here) and displays it in a table using @tanstack/react-table, allowing the admin to manage users. Users can be added with specific roles (e.g., participant, reader, reviewer, etc.) via a form. The component dynamically adjusts the table columns to show or hide certain fields (like quiz status or review permissions) based on the diversity of values in the dataset. It also supports user deletion, with confirmation modals, and editing, which navigates to an editing page. Alerts notify users of errors or successful actions, leveraging Redux for global state management. Tooltips provide context for roles, and conditional rendering highlights specific statuses, such as all users having taken a quiz. It integrates a responsive UI, adhering to usability principles and functionality for role-based user operations.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Columns.tsx===&lt;br /&gt;
&lt;br /&gt;
This code defines a function, userColumns, that dynamically generates column definitions for a data table in a React application using the @tanstack/react-table library. The function accepts three arguments: handleEdit, handleDelete (functions to handle edit and delete actions for table rows), and data (an array of user objects). It conditionally includes specific columns (e.g., Take Quiz, Review, Submit) based on whether any user in the data has the corresponding properties enabled. Columns like Username, Name, and Email Address display values as styled links. The table also features an Actions column, which includes buttons for editing and deleting rows, styled with custom icons and triggered by respective callback functions. By encapsulating conditional rendering, interactivity, and styling, this implementation ensures a flexible, user-friendly interface for managing participant data.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participant_Delete.tsx===&lt;br /&gt;
&lt;br /&gt;
This React component, DeleteUser, displays a confirmation modal when a user attempts to delete a participant. It accepts three props: userData (the user to be deleted), onClose (a function to close the modal), and onDelete (a function to handle the actual deletion). Upon rendering, the modal asks the user to confirm the deletion of the participant. If the user confirms by clicking the &amp;quot;Delete&amp;quot; button, the onDelete function is called with the user’s ID, and the modal is closed. If the user clicks &amp;quot;Cancel,&amp;quot; the modal simply closes. The component also contains commented-out code for handling API requests and dispatching success/error alerts using Redux, but these are currently not active. The modal includes a title, body text with the user's name, and action buttons to either cancel or proceed with the deletion.&lt;br /&gt;
&lt;br /&gt;
===AddEdit_Participants_Editor.tsx===&lt;br /&gt;
&lt;br /&gt;
The UserEditor component is a form used for either creating a new user or updating an existing one. It accepts a mode prop, which can be &amp;quot;create&amp;quot; or &amp;quot;update,&amp;quot; to determine the form's behavior. If in &amp;quot;update&amp;quot; mode, it pre-fills the form with data for the selected user; if in &amp;quot;create&amp;quot; mode, it initializes the form with default values. The form includes fields for the user's name, full name, email, role, institution, and email preferences. The role and institution fields are conditionally disabled based on the mode or user's authentication role. The form uses Formik for form handling, validation via Yup, and displays success alerts after form submission. Upon form submission, it either updates the existing user or adds a new user to the list (stored in a state variable, users). The component also includes a modal for display, and the user can navigate back to the user list page after submitting or canceling the action.&lt;br /&gt;
&lt;br /&gt;
==Design Patterns==&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159907</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159907"/>
		<updated>2024-12-01T18:07:45Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* UI Enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
===UI Enhancements===&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation Plan==&lt;br /&gt;
===Frontend Modifications===&lt;br /&gt;
*List specific files to modify (e.g., ParticipantsTable.tsx, AssignmentParticipants.tsx) with high-level explanations of changes in each.&lt;br /&gt;
*Detail CSS changes for improved spacing and responsiveness, including media queries for adaptive design.&lt;br /&gt;
===Design Patterns===&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159906</id>
		<title>CSC/ECE517 Fall 2024-E2490 Improving Assignment Participants Management UI in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE517_Fall_2024-E2490_Improving_Assignment_Participants_Management_UI_in_Expertiza&amp;diff=159906"/>
		<updated>2024-12-01T18:05:42Z</updated>

		<summary type="html">&lt;p&gt;Krajesh: /* Proposed Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
Expertiza is an open-source learning management system built using Ruby on Rails. It provides features for creating tests and assignments, managing courses and teams, and, most notably, offers a powerful platform for peer reviews and group feedback. The Assignment Participants Management UI in Expertiza is a tool used by instructors and administrators to manage participants in assignments. Currently, this interface is cluttered, with dense information and limited filtering options, making it challenging to quickly locate, filter, or modify participant data. The current UI has issues with readability, confusing labels, and lacks efficient bulk action capabilities, which leads to repetitive tasks and hampers productivity.&lt;br /&gt;
&lt;br /&gt;
===Project Goals===&lt;br /&gt;
This project aims to redesign and improve the Assignment Participants Management UI by creating a cleaner, more streamlined, and user-friendly interface. The key objectives include:&lt;br /&gt;
*Enhancing readability and usability by restructuring the layout and adding more intuitive spacing.&lt;br /&gt;
*Extending functionality with advanced search and filtering options to allow multi-parameter searches, enabling instructors to locate specific participants more efficiently.&lt;br /&gt;
*Introducing bulk actions to minimize repetitive tasks and improve productivity.&lt;br /&gt;
*Improving visual hierarchy with icons, badges, and role-based indicators to make information more accessible at a glance.&lt;br /&gt;
*Ensuring responsiveness so that the interface adapts well across different screen sizes and devices.&lt;br /&gt;
&lt;br /&gt;
== Problem Statement==&lt;br /&gt;
&lt;br /&gt;
===Issues with Current UI===&lt;br /&gt;
*Cluttered Layout: The current UI is dense, with little spacing between elements, making it hard to read and locate information.&lt;br /&gt;
*Limited Filtering Options: Filtering capabilities are minimal, making it challenging to find participants based on specific criteria.&lt;br /&gt;
*Inefficient User Actions: Actions like removing or updating participants must be done individually, resulting in repetitive tasks for instructors.&lt;br /&gt;
*Confusing Labels: Certain labels (like &amp;quot;Handle&amp;quot;) are unclear, leading to usability issues, creating confusion around functionality.&lt;br /&gt;
*Lack of Responsive Design: The current design does not adapt well to different screen sizes, reducing usability on smaller devices.&lt;br /&gt;
&lt;br /&gt;
This project will address these issues with a comprehensive redesign focused on improving the user experience for instructors and administrators managing assignments in Expertiza.&lt;br /&gt;
&lt;br /&gt;
== Proposed Solution==&lt;br /&gt;
===Streamlined Layout and Spacing===&lt;br /&gt;
&lt;br /&gt;
*Dynamic column organization: Displaying the columns &amp;quot;Take Quiz&amp;quot;, &amp;quot;Review&amp;quot; and &amp;quot;Submit&amp;quot; based on the values present.&lt;br /&gt;
*Improved Spacing: Add padding and spacing between rows and columns to improve readability.&lt;br /&gt;
&lt;br /&gt;
====UI Enhancements====&lt;br /&gt;
&lt;br /&gt;
UI with improvements to visual clarity, layout, and responsiveness&lt;br /&gt;
&lt;br /&gt;
===Visual Hierarchy and Icons===&lt;br /&gt;
&lt;br /&gt;
Icons for Actions: Use icons for common actions, such as Edit and Delete.&lt;br /&gt;
&lt;br /&gt;
===Responsive Design===&lt;br /&gt;
&lt;br /&gt;
Adaptive Visibility: Enabling navigation across participant lists exceeding 25 entries.&lt;br /&gt;
&lt;br /&gt;
===Tooltips and Help Icons===&lt;br /&gt;
&lt;br /&gt;
Tooltips: Add tooltips next to the roles for better understanding.&lt;br /&gt;
&lt;br /&gt;
====Sequence Diagram for Layout Change====&lt;br /&gt;
&lt;br /&gt;
In the current implementation we use dummy data, but the frontend would eventually be wired up to a backend for real-world usage&lt;br /&gt;
&lt;br /&gt;
[[File: 3_1_1.png| 500px]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Implementation Plan==&lt;br /&gt;
===Frontend Modifications===&lt;br /&gt;
*List specific files to modify (e.g., ParticipantsTable.tsx, AssignmentParticipants.tsx) with high-level explanations of changes in each.&lt;br /&gt;
*Detail CSS changes for improved spacing and responsiveness, including media queries for adaptive design.&lt;br /&gt;
===Design Patterns===&lt;br /&gt;
* Single Responsibility Principle (SRP): Each UI component will be designed to handle a specific function, like filtering or bulk actions, to keep the interface modular.&lt;br /&gt;
* Interface Segregation Principle (ISP): Each feature (e.g., filtering, user actions) will be separated into focused modules, ensuring organized functionality and clear dependencies.&lt;br /&gt;
* DRY Principle: Common features like filters, icons, and spacing will be centralized in reusable components to avoid redundancy in the UI code.&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Manual UI Testing===&lt;br /&gt;
Outline step-by-step test cases for manually verifying each UI component:&lt;br /&gt;
*User Search: Enter various criteria to check search functionality.&lt;br /&gt;
*Role Filter: Select different roles and verify displayed results.&lt;br /&gt;
*Bulk Actions: Select multiple users and apply actions to confirm functionality&lt;br /&gt;
&lt;br /&gt;
==Future Enhancements==&lt;br /&gt;
&lt;br /&gt;
*Advanced Search Criteria: Introduce multi-parameter search for more complex filtering.&lt;br /&gt;
*User-Specific Settings: Allow users to save preferred column visibility settings.&lt;br /&gt;
*Detailed Statistics: Provide analytics on participation, submission rates, etc., to give instructors a quick overview of assignment engagement.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
*Summarize the improvements, emphasizing the cleaner design, enhanced filtering capabilities, and improved user experience.&lt;br /&gt;
*Highlight the importance of responsive design and ease of use for instructors and administrators managing large classes.&lt;br /&gt;
&lt;br /&gt;
== Team ==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
&lt;br /&gt;
* Chaitanya Srusti &amp;lt;crsrusti@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Josh Kersey &amp;lt;jkersey@ncsu.edu&amp;gt;&lt;br /&gt;
* Kruthi Rajeshwar &amp;lt;krajesh@ncsu.edu&amp;gt;&lt;br /&gt;
* Sphurthy Satish &amp;lt;sphurthy@ncsu.edu&amp;gt;&lt;/div&gt;</summary>
		<author><name>Krajesh</name></author>
	</entry>
</feed>