<?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=Athorve</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=Athorve"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Athorve"/>
	<updated>2026-08-08T07:17:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152907</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152907"/>
		<updated>2023-12-12T21:31:32Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
Design patterns help in maintaining large code bases and reusability of code. In this section, we are mentioning the different design patterns that we used in the project while re-implementing the front end for expertiza.&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', is leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
#'''Mediator Pattern''', is used since the data that comes from the backend is different from how it is required in the frontend. So we use the mediator pattern to change the data in a way we require.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
Components are the basic building blocks in React. This section specifies the different components that we created for the project.&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for editing, deleting, managing TAs, and copying courses.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/App.tsx src/App.tsx]&lt;br /&gt;
App.tsx contains all the routing-related information of the application. Since for courses we needed to build a new URL route the changes that were made were to include a protected route (since only users with the privilege of TA or higher could access it) for the courses page, along with the page to create a new course, update an existing course, manage TAs, and add a new TA. Since for other functionalities like the Delete and Copy course, the URL does not change therefore we do not need to specify that in this file. We reused premade components for routes (DRY Principle) and for nested routes, we nested the components themselves therefore larger component was made of smaller components (Composite Pattern). The Protected Route component itself uses the HOC pattern and we leveraged that to implement route protection (user cannot change URLs to access pages).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/layout/Header.tsx src/layout/Header.tsx]&lt;br /&gt;
Header.tsx contains all the information that is displayed on the header of the application. Since we needed to add a way for users to access the courses page, we added one more entry to the Header component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/interfaces.ts src/utils/interfaces.ts]&lt;br /&gt;
Since typescript is a typesafe language whenever we declare a variable we can specify the type of the variable. The interfaces.ts file contains many different types which are composed of primitive types. We created four interfaces, which are ICourseResponse (type for the course data received as a response), ICourseRequest (type for the course data sent to the backend), ITAResponse (type for the TA data received as a response), ITARequest (type for the TA data sent to the backend). We use the composite pattern while creating a new type.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/util.ts src/utils/util.ts]&lt;br /&gt;
util.ts contains utility functions that can be used all across the application. So in the util.ts file, we had a function to get the privilege level/ID from the user type like whether the user is a Student, a TA, etc. We implemented a function to get the user type given the privilege level/ID. We needed to implement this feature since the privilege levels stored in the backend are different from how it is defined in the frontend. This uses the mediator design pattern.&lt;br /&gt;
&lt;br /&gt;
==Files Created==&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/Course.tsx src/pages/Courses/Course.tsx]&lt;br /&gt;
Course.tsx page is the index page that is displayed when the user hits the /courses route. This page reuses many components that were premade such as the Table, and Row components that already exist in the code. Also, we use components from third-party libraries like react-bootstrap, and react-icons. When the component loads we make an API call to the backend to fetch all the course-related information. We pass all this data to the table component, along with the different columns that need to be present in the table. There are also other components like Delete and Copy course which are used to delete or copy a course respectively. We use the composite pattern while building the component, and the useEffect hook uses the observer pattern on the array of values that it is provided with.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseColumns.tsx src/pages/Courses/CourseColumns.tsx]&lt;br /&gt;
CourseColumns.tsx is not a page that is directly displayed to the user. It is a component that is used to build the larger Course component. Course Columns just specify the columns that need to be displayed along with the attributes of the column itself. We use the HOC pattern when defining the functionality that each column needs to possess.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseCopy.tsx src/pages/Courses/CourseCopy.tsx]&lt;br /&gt;
CourseCopy.tsx is also a component that is used to build the larger Course Component. This component displays a confirmation modal to the user when the user clicks on the Copy Course button. When the user copies a course we hit the copy course API provided in the backend. The result of this is displayed when the user refreshes the page and fetches the updated data from the backend. We use the Provider Pattern in this component as we provide the course ID from the Course component to the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseDelete.tsx src/pages/Courses/CourseDelete.tsx]&lt;br /&gt;
CourseDelete.tsx is a component almost completely similar to the Course Copy component. The only difference is the backend API that we hit when we delete a course. It follows all the same design patterns as the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseEditor.tsx src/pages/Courses/CourseEditor.tsx]&lt;br /&gt;
CourseEditor.tsx is one of the major components. It displays a form for the user to either create a new course or edit an existing course. Whether the user is editing a course or creating a new course depends on how the user reached that page. The URL also specifies whether the user is creating a new course or editing an existing course. This component itself is made up of many smaller components (Composite Pattern). It also uses form validation by leveraging Yup, a third-party library (HOC Pattern). While editing the form the component is provided with the course ID from the course component (Provider Pattern). We also use the useEffect hook to check whether when the user submits the form the operation was successful or not. The useEffect hook observes whether changes were made to specific variables and if the variables have changed then only the hook function executes (Observer Pattern).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseUtil.ts src/pages/Courses/CourseUtil.ts]&lt;br /&gt;
CourseUtil.ts file does not export any React components, it provides many useful functions that are used in other components. Functions to fetch and modify data, implement validations, and transform incoming data.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TA.tsx src/pages/TA/TA.tsx]&lt;br /&gt;
This is the main page for managing Teaching Assistants (TAs). It should utilize the Table component for listing all TAs. Each row in the table represents a TA with buttons for editing, deleting, and possibly additional actions.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TADelete.tsx src/pages/TA/TADelete.tsx]&lt;br /&gt;
Similar to the CourseDelete component, TADelete handles the UI and logic for deleting a TA. It interacts with the backend through a specific API for deleting TAs.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAEditor.tsx src/pages/TA/TAEditor.tsx]&lt;br /&gt;
This component is crucial for managing or editing TAs. It contains a form with fields for relevant TA details and validation. Depending on the URL or other parameters, it should know whether it is in &amp;quot;create&amp;quot; or &amp;quot;edit&amp;quot; mode.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAUtil.ts src/pages/TA/TAUtil.ts]&lt;br /&gt;
Like CourseUtil.ts, this file might contain utility functions specific to TAs. These include functions for fetching and modifying TA data, validation functions, and any transformations needed.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Courses Page. This is what is displayed when no courses exist in the Database&lt;br /&gt;
[[File:Courses_Page.png|700px]]&lt;br /&gt;
*Add New Course. The user needs to select the Institution, select the instructor, and fill in the details like course name, directory, information, and whether the course is private.&lt;br /&gt;
[[File:Create_Course.png|700px]]&lt;br /&gt;
*Courses Page. The information displayed regarding a specific course.&lt;br /&gt;
[[File:Courses_Page_2.png|700px]]&lt;br /&gt;
*Update Existing Course. The user cannot update the Institution, the instructor, or the course name, only the directory, information, and whether the course is private.&lt;br /&gt;
[[File:Update_Course.png|700px]]&lt;br /&gt;
*Delete Existing Course. The user is prompted before deleting a course.&lt;br /&gt;
[[File:Delete_Course.png|700px]]&lt;br /&gt;
*Copy Existing Course. The user is prompted before copying a course.&lt;br /&gt;
[[File:Copy_Course.png|700px]]&lt;br /&gt;
*Courses Page. The page displays the result of copying a course.&lt;br /&gt;
[[File:Courses_Page_3.png|700px]]&lt;br /&gt;
*Manage TAs. According to the problem statement, we need to display a Modal which would contain the information regarding all the TAs of the course.&lt;br /&gt;
[[File:Manage_TAs.png|700px]]&lt;br /&gt;
*Add TAs. The logged-in user only needs to add the username of the user they want to add as the TA for the course.&lt;br /&gt;
[[File:Add_TA.png|700px]]&lt;br /&gt;
&lt;br /&gt;
*The feature for deleting a TA for a course has been implemented but the backend is not properly implemented (comments regarding these are mentioned in the code), so no screenshot for it :(&lt;br /&gt;
&lt;br /&gt;
*The feature to Update TA information is redundant so was not implemented.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
All the functionalities that were mentioned in the problem statement have been implemented. A few changes need to be made which are already mentioned in the project code. Just need to follow the ToDo tag and you can find the changes required.&lt;br /&gt;
Also, our project 3 was on Adding Course and Assignment Participants, in this project we have mentioned in the code how to integrate the work from the previous project into the current project. Created a ToDo tag for the same.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
https://github.com/expertiza/reimplementation-front-end/pull/23&lt;br /&gt;
&lt;br /&gt;
==Youtube Video==&lt;br /&gt;
[https://www.youtube.com/watch?v=PUf7xAA9FoQ Project Demo]&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152637</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152637"/>
		<updated>2023-12-05T04:41:35Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', is leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
#'''Mediator Pattern''', is used since the data that comes from the backend is different from how it is required in the frontend. So we use the mediator pattern to change the data in a way we require.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for editing, deleting, managing TAs, and copying courses.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/App.tsx src/App.tsx]&lt;br /&gt;
App.tsx contains all the routing-related information of the application. Since for courses we needed to build a new URL route the changes that were made were to include a protected route (since only users with the privilege of TA or higher could access it) for the courses page, along with the page to create a new course, update an existing course, manage TAs, and add a new TA. Since for other functionalities like the Delete and Copy course, the URL does not change therefore we do not need to specify that in this file. We reused premade components for routes (DRY Principle) and for nested routes, we nested the components themselves therefore larger component was made of smaller components (Composite Pattern). The Protected Route component itself uses the HOC pattern and we leveraged that to implement route protection (user cannot change URLs to access pages).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/layout/Header.tsx src/layout/Header.tsx]&lt;br /&gt;
Header.tsx contains all the information that is displayed on the header of the application. Since we needed to add a way for users to access the courses page, we added one more entry to the Header component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/Course.tsx src/pages/Courses/Course.tsx]&lt;br /&gt;
Course.tsx page is the index page that is displayed when the user hits the /courses route. This page reuses many components that were premade such as the Table, and Row components that already exist in the code. Also, we use components from third-party libraries like react-bootstrap, and react-icons. When the component loads we make an API call to the backend to fetch all the course-related information. We pass all this data to the table component, along with the different columns that need to be present in the table. There are also other components like Delete and Copy course which are used to delete or copy a course respectively. We use the composite pattern while building the component, and the useEffect hook uses the observer pattern on the array of values that it is provided with.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseColumns.tsx src/pages/Courses/CourseColumns.tsx]&lt;br /&gt;
CourseColumns.tsx is not a page that is directly displayed to the user. It is a component that is used to build the larger Course component. Course Columns just specify the columns that need to be displayed along with the attributes of the column itself. We use the HOC pattern when defining the functionality that each column needs to possess.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseCopy.tsx src/pages/Courses/CourseCopy.tsx]&lt;br /&gt;
CourseCopy.tsx is also a component that is used to build the larger Course Component. This component displays a confirmation modal to the user when the user clicks on the Copy Course button. When the user copies a course we hit the copy course API provided in the backend. The result of this is displayed when the user refreshes the page and fetches the updated data from the backend. We use the Provider Pattern in this component as we provide the course ID from the Course component to the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseDelete.tsx src/pages/Courses/CourseDelete.tsx]&lt;br /&gt;
CourseDelete.tsx is a component almost completely similar to the Course Copy component. The only difference is the backend API that we hit when we delete a course. It follows all the same design patterns as the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseEditor.tsx src/pages/Courses/CourseEditor.tsx]&lt;br /&gt;
CourseEditor.tsx is one of the major components. It displays a form for the user to either create a new course or edit an existing course. Whether the user is editing a course or creating a new course depends on how the user reached that page. The URL also specifies whether the user is creating a new course or editing an existing course. This component itself is made up of many smaller components (Composite Pattern). It also uses form validation by leveraging Yup, a third-party library (HOC Pattern). While editing the form the component is provided with the course ID from the course component (Provider Pattern). We also use the useEffect hook to check whether when the user submits the form the operation was successful or not. The useEffect hook observes whether changes were made to specific variables and if the variables have changed then only the hook function executes (Observer Pattern).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseUtil.ts src/pages/Courses/CourseUtil.ts]&lt;br /&gt;
CourseUtil.ts file does not export any React components, it provides many useful functions that are used in other components. Functions to fetch and modify data, implement validations, and transform incoming data.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TA.tsx src/pages/TA/TA.tsx]&lt;br /&gt;
This is the main page for managing Teaching Assistants (TAs). It should utilize the Table component for listing all TAs. Each row in the table represents a TA with buttons for editing, deleting, and possibly additional actions.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TADelete.tsx src/pages/TA/TADelete.tsx]&lt;br /&gt;
Similar to the CourseDelete component, TADelete handles the UI and logic for deleting a TA. It interacts with the backend through a specific API for deleting TAs.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAEditor.tsx src/pages/TA/TAEditor.tsx]&lt;br /&gt;
This component is crucial for managing or editing TAs. It contains a form with fields for relevant TA details and validation. Depending on the URL or other parameters, it should know whether it is in &amp;quot;create&amp;quot; or &amp;quot;edit&amp;quot; mode.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAUtil.ts src/pages/TA/TAUtil.ts]&lt;br /&gt;
Like CourseUtil.ts, this file might contain utility functions specific to TAs. These include functions for fetching and modifying TA data, validation functions, and any transformations needed.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/interfaces.ts src/utils/interfaces.ts]&lt;br /&gt;
Since typescript is a typesafe language whenever we declare a variable we can specify the type of the variable. The interfaces.ts file contains many different types which are composed of primitive types. We created four interfaces, which are ICourseResponse (type for the course data received as a response), ICourseRequest (type for the course data sent to the backend), ITAResponse (type for the TA data received as a response), ITARequest (type for the TA data sent to the backend). We use the composite pattern while creating a new type.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/util.ts src/utils/util.ts]&lt;br /&gt;
util.ts contains utility functions that can be used all across the application. So in the util.ts file, we had a function to get the privilege level/ID from the user type like whether the user is a Student, a TA, etc. We implemented a function to get the user type given the privilege level/ID. We needed to implement this feature since the privilege levels stored in the backend are different from how it is defined in the frontend. This uses the mediator design pattern.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Courses Page. This is what is displayed when no courses exist in the Database&lt;br /&gt;
[[File:Courses_Page.png|700px]]&lt;br /&gt;
*Add New Course. The user needs to select the Institution, select the instructor, and fill in the details like course name, directory, information, and whether the course is private.&lt;br /&gt;
[[File:Create_Course.png|700px]]&lt;br /&gt;
*Courses Page. The information displayed regarding a specific course.&lt;br /&gt;
[[File:Courses_Page_2.png|700px]]&lt;br /&gt;
*Update Existing Course. The user cannot update the Institution, the instructor, or the course name, only the directory, information, and whether the course is private.&lt;br /&gt;
[[File:Update_Course.png|700px]]&lt;br /&gt;
*Delete Existing Course. The user is prompted before deleting a course.&lt;br /&gt;
[[File:Delete_Course.png|700px]]&lt;br /&gt;
*Copy Existing Course. The user is prompted before copying a course.&lt;br /&gt;
[[File:Copy_Course.png|700px]]&lt;br /&gt;
*Courses Page. The page displays the result of copying a course.&lt;br /&gt;
[[File:Courses_Page_3.png|700px]]&lt;br /&gt;
*Manage TAs. According to the problem statement, we need to display a Modal which would contain the information regarding all the TAs of the course.&lt;br /&gt;
[[File:Manage_TAs.png|700px]]&lt;br /&gt;
*Add TAs. The logged-in user only needs to add the username of the user they want to add as the TA for the course.&lt;br /&gt;
[[File:Add_TA.png|700px]]&lt;br /&gt;
&lt;br /&gt;
*The feature for deleting a TA for a course has been implemented but the backend is not properly implemented (comments regarding these are mentioned in the code), so no screenshot for it :(&lt;br /&gt;
&lt;br /&gt;
*The feature to Update TA information is redundant so was not implemented.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
All the functionalities that were mentioned in the problem statement have been implemented. A few changes need to be made which are already mentioned in the project code. Just need to follow the ToDo tag and you can find the changes required.&lt;br /&gt;
Also, our project 3 was on Adding Course and Assignment Participants, in this project we have mentioned in the code how to integrate the work from the previous project into the current project. Created a ToDo tag for the same.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
https://github.com/expertiza/reimplementation-front-end/pull/23&lt;br /&gt;
&lt;br /&gt;
==Youtube Video==&lt;br /&gt;
[https://www.youtube.com/watch?v=PUf7xAA9FoQ Project Demo]&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152608</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152608"/>
		<updated>2023-12-05T04:12:51Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', is leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
#'''Mediator Pattern''', is used since the data that comes from the backend is different from how it is required in the frontend. So we use the mediator pattern to change the data in a way we require.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for editing, deleting, managing TAs, and copying courses.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/App.tsx src/App.tsx]&lt;br /&gt;
App.tsx contains all the routing-related information of the application. Since for courses we needed to build a new URL route the changes that were made were to include a protected route (since only users with the privilege of TA or higher could access it) for the courses page, along with the page to create a new course, update an existing course, manage TAs, and add a new TA. Since for other functionalities like the Delete and Copy course, the URL does not change therefore we do not need to specify that in this file. We reused premade components for routes (DRY Principle) and for nested routes, we nested the components themselves therefore larger component was made of smaller components (Composite Pattern). The Protected Route component itself uses the HOC pattern and we leveraged that to implement route protection (user cannot change URLs to access pages).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/layout/Header.tsx src/layout/Header.tsx]&lt;br /&gt;
Header.tsx contains all the information that is displayed on the header of the application. Since we needed to add a way for users to access the courses page, we added one more entry to the Header component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/Course.tsx src/pages/Courses/Course.tsx]&lt;br /&gt;
Course.tsx page is the index page that is displayed when the user hits the /courses route. This page reuses many components that were premade such as the Table, and Row components that already exist in the code. Also, we use components from third-party libraries like react-bootstrap, and react-icons. When the component loads we make an API call to the backend to fetch all the course-related information. We pass all this data to the table component, along with the different columns that need to be present in the table. There are also other components like Delete and Copy course which are used to delete or copy a course respectively. We use the composite pattern while building the component, and the useEffect hook uses the observer pattern on the array of values that it is provided with.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseColumns.tsx src/pages/Courses/CourseColumns.tsx]&lt;br /&gt;
CourseColumns.tsx is not a page that is directly displayed to the user. It is a component that is used to build the larger Course component. Course Columns just specify the columns that need to be displayed along with the attributes of the column itself. We use the HOC pattern when defining the functionality that each column needs to possess.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseCopy.tsx src/pages/Courses/CourseCopy.tsx]&lt;br /&gt;
CourseCopy.tsx is also a component that is used to build the larger Course Component. This component displays a confirmation modal to the user when the user clicks on the Copy Course button. When the user copies a course we hit the copy course API provided in the backend. The result of this is displayed when the user refreshes the page and fetches the updated data from the backend. We use the Provider Pattern in this component as we provide the course ID from the Course component to the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseDelete.tsx src/pages/Courses/CourseDelete.tsx]&lt;br /&gt;
CourseDelete.tsx is a component almost completely similar to the Course Copy component. The only difference is the backend API that we hit when we delete a course. It follows all the same design patterns as the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseEditor.tsx src/pages/Courses/CourseEditor.tsx]&lt;br /&gt;
CourseEditor.tsx is one of the major components. It displays a form for the user to either create a new course or edit an existing course. Whether the user is editing a course or creating a new course depends on how the user reached that page. The URL also specifies whether the user is creating a new course or editing an existing course. This component itself is made up of many smaller components (Composite Pattern). It also uses form validation by leveraging Yup, a third-party library (HOC Pattern). While editing the form the component is provided with the course ID from the course component (Provider Pattern). We also use the useEffect hook to check whether when the user submits the form the operation was successful or not. The useEffect hook observes whether changes were made to specific variables and if the variables have changed then only the hook function executes (Observer Pattern).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseUtil.ts src/pages/Courses/CourseUtil.ts]&lt;br /&gt;
CourseUtil.ts file does not export any React components, it provides many useful functions that are used in other components. Functions to fetch and modify data, implement validations, and transform incoming data.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TA.tsx src/pages/TA/TA.tsx]&lt;br /&gt;
This is the main page for managing Teaching Assistants (TAs). It should utilize the Table component for listing all TAs. Each row in the table represents a TA with buttons for editing, deleting, and possibly additional actions.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TADelete.tsx src/pages/TA/TADelete.tsx]&lt;br /&gt;
Similar to the CourseDelete component, TADelete handles the UI and logic for deleting a TA. It interacts with the backend through a specific API for deleting TAs.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAEditor.tsx src/pages/TA/TAEditor.tsx]&lt;br /&gt;
This component is crucial for managing or editing TAs. It contains a form with fields for relevant TA details and validation. Depending on the URL or other parameters, it should know whether it is in &amp;quot;create&amp;quot; or &amp;quot;edit&amp;quot; mode.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAUtil.ts src/pages/TA/TAUtil.ts]&lt;br /&gt;
Like CourseUtil.ts, this file might contain utility functions specific to TAs. These include functions for fetching and modifying TA data, validation functions, and any transformations needed.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/interfaces.ts src/utils/interfaces.ts]&lt;br /&gt;
Since typescript is a typesafe language whenever we declare a variable we can specify the type of the variable. The interfaces.ts file contains many different types which are composed of primitive types. We created four interfaces, which are ICourseResponse (type for the course data received as a response), ICourseRequest (type for the course data sent to the backend), ITAResponse (type for the TA data received as a response), ITARequest (type for the TA data sent to the backend). We use the composite pattern while creating a new type.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/util.ts src/utils/util.ts]&lt;br /&gt;
util.ts contains utility functions that can be used all across the application. So in the util.ts file, we had a function to get the privilege level/ID from the user type like whether the user is a Student, a TA, etc. We implemented a function to get the user type given the privilege level/ID. We needed to implement this feature since the privilege levels stored in the backend are different from how it is defined in the frontend. This uses the mediator design pattern.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Courses Page. This is what is displayed when no courses exist in the Database&lt;br /&gt;
[[File:Courses_Page.png|700px]]&lt;br /&gt;
*Add New Course. The user needs to select the Institution, select the instructor, and fill in the details like course name, directory, information, and whether the course is private.&lt;br /&gt;
[[File:Create_Course.png|700px]]&lt;br /&gt;
*Courses Page. The information displayed regarding a specific course.&lt;br /&gt;
[[File:Courses_Page_2.png|700px]]&lt;br /&gt;
*Update Existing Course. The user cannot update the Institution, the instructor, or the course name, only the directory, information, and whether the course is private.&lt;br /&gt;
[[File:Update_Course.png|700px]]&lt;br /&gt;
*Delete Existing Course. The user is prompted before deleting a course.&lt;br /&gt;
[[File:Delete_Course.png|700px]]&lt;br /&gt;
*Copy Existing Course. The user is prompted before copying a course.&lt;br /&gt;
[[File:Copy_Course.png|700px]]&lt;br /&gt;
*Courses Page. The page displays the result of copying a course.&lt;br /&gt;
[[File:Courses_Page_3.png|700px]]&lt;br /&gt;
*Manage TAs. According to the problem statement, we need to display a Modal which would contain the information regarding all the TAs of the course.&lt;br /&gt;
[[File:Manage_TAs.png|700px]]&lt;br /&gt;
*Add TAs. The logged-in user only needs to add the username of the user they want to add as the TA for the course.&lt;br /&gt;
[[File:Add_TA.png|700px]]&lt;br /&gt;
&lt;br /&gt;
*The feature for deleting a TA for a course has been implemented but the backend is not properly implemented (comments regarding these are mentioned in the code), so no screenshot for it :(&lt;br /&gt;
&lt;br /&gt;
*The feature to Update TA information is redundant so was not implemented.&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
All the functionalities that were mentioned in the problem statement have been implemented. A few changes need to be made which are already mentioned in the project code. Just need to follow the ToDo tag and you can find the changes required.&lt;br /&gt;
Also, our project 3 was on Adding Course and Assignment Participants, in this project we have mentioned in the code how to integrate the work from the previous project into the current project. Created a ToDo tag for the same.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
https://github.com/expertiza/reimplementation-front-end/pull/23&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152605</id>
		<title>File:Add TA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152605"/>
		<updated>2023-12-05T04:07:30Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Add TA.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152603</id>
		<title>File:Add TA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152603"/>
		<updated>2023-12-05T04:07:16Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Add TA.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152602</id>
		<title>File:Add TA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152602"/>
		<updated>2023-12-05T04:06:29Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Add TA.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152600</id>
		<title>File:Add TA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152600"/>
		<updated>2023-12-05T04:05:17Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Add TA.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_3.png&amp;diff=152594</id>
		<title>File:Courses Page 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_3.png&amp;diff=152594"/>
		<updated>2023-12-05T04:03:57Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Courses Page 3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_2.png&amp;diff=152592</id>
		<title>File:Courses Page 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_2.png&amp;diff=152592"/>
		<updated>2023-12-05T04:03:29Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Athorve uploaded a new version of File:Courses Page 2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152262</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152262"/>
		<updated>2023-12-04T15:39:48Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Added file based information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', is leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
#'''Mediator Pattern''', is used since the data that comes from the backend is different from how it is required in the frontend. So we use the mediator pattern to change the data in a way we require.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for editing, deleting, managing TAs, and copying courses.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/App.tsx src/App.tsx]&lt;br /&gt;
App.tsx contains all the routing-related information of the application. Since for courses we needed to build a new URL route the changes that were made were to include a protected route (since only users with the privilege of TA or higher could access it) for the courses page, along with the page to create a new course, update an existing course, manage TAs, and add a new TA. Since for other functionalities like the Delete and Copy course, the URL does not change therefore we do not need to specify that in this file. We reused premade components for routes (DRY Principle) and for nested routes, we nested the components themselves therefore larger component was made of smaller components (Composite Pattern). The Protected Route component itself uses the HOC pattern and we leveraged that to implement route protection (user cannot change URLs to access pages).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/layout/Header.tsx src/layout/Header.tsx]&lt;br /&gt;
Header.tsx contains all the information that is displayed on the header of the application. Since we needed to add a way for users to access the courses page, we added one more entry to the Header component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/Course.tsx src/pages/Courses/Course.tsx]&lt;br /&gt;
Course.tsx page is the index page that is displayed when the user hits the /courses route. This page reuses many components that were premade such as the Table, and Row components that already exist in the code. Also, we use components from third-party libraries like react-bootstrap, and react-icons. When the component loads we make an API call to the backend to fetch all the course-related information. We pass all this data to the table component, along with the different columns that need to be present in the table. There are also other components like Delete and Copy course which are used to delete or copy a course respectively. We use the composite pattern while building the component, and the useEffect hook uses the observer pattern on the array of values that it is provided with.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseColumns.tsx src/pages/Courses/CourseColumns.tsx]&lt;br /&gt;
CourseColumns.tsx is not a page that is directly displayed to the user. It is a component that is used to build the larger Course component. Course Columns just specify the columns that need to be displayed along with the attributes of the column itself. We use the HOC pattern when defining the functionality that each column needs to possess.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseCopy.tsx src/pages/Courses/CourseCopy.tsx]&lt;br /&gt;
CourseCopy.tsx is also a component that is used to build the larger Course Component. This component displays a confirmation modal to the user when the user clicks on the Copy Course button. When the user copies a course we hit the copy course API provided in the backend. The result of this is displayed when the user refreshes the page and fetches the updated data from the backend. We use the Provider Pattern in this component as we provide the course ID from the Course component to the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseDelete.tsx src/pages/Courses/CourseDelete.tsx]&lt;br /&gt;
CourseDelete.tsx is a component almost completely similar to the Course Copy component. The only difference is the backend API that we hit when we delete a course. It follows all the same design patterns as the Course Copy component.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseEditor.tsx src/pages/Courses/CourseEditor.tsx]&lt;br /&gt;
CourseEditor.tsx is one of the major components. It displays a form for the user to either create a new course or edit an existing course. Whether the user is editing a course or creating a new course depends on how the user reached that page. The URL also specifies whether the user is creating a new course or editing an existing course. This component itself is made up of many smaller components (Composite Pattern). It also uses form validation by leveraging Yup, a third-party library (HOC Pattern). While editing the form the component is provided with the course ID from the course component (Provider Pattern). We also use the useEffect hook to check whether when the user submits the form the operation was successful or not. The useEffect hook observes whether changes were made to specific variables and if the variables have changed then only the hook function executes (Observer Pattern).&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/Courses/CourseUtil.ts src/pages/Courses/CourseUtil.ts]&lt;br /&gt;
CourseUtil.ts file does not export any React components, it provides many useful functions that are used in other components. Functions to fetch and modify data, implement validations, and transform incoming data.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TA.tsx src/pages/TA/TA.tsx]&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TADelete.tsx src/pages/TA/TADelete.tsx]&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAEditor.tsx src/pages/TA/TAEditor.tsx]&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/pages/TA/TAUtil.ts src/pages/TA/TAUtil.ts]&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/interfaces.ts src/utils/interfaces.ts]&lt;br /&gt;
Since typescript is a typesafe language whenever we declare a variable we can specify the type of the variable. The interfaces.ts file contains many different types which are composed of primitive types. We created four interfaces, which are ICourseResponse (type for the course data received as a response), ICourseRequest (type for the course data sent to the backend), ITAResponse (type for the TA data received as a response), ITARequest (type for the TA data sent to the backend). We use the composite pattern while creating a new type.&lt;br /&gt;
* [https://github.com/Mrityunjay243/reimplementation-front-end/blob/main/src/utils/util.ts src/utils/util.ts]&lt;br /&gt;
util.ts contains utility functions that can be used all across the application. So in the util.ts file, we had a function to get the privilege level/ID from the user type like whether the user is a Student, a TA, etc. We implemented a function to get the user type given the privilege level/ID. We needed to implement this feature since the privilege levels stored in the backend are different from how it is defined in the frontend. This uses the mediator design pattern.&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Courses Page. This is what is displayed when no courses exist in the Database&lt;br /&gt;
[[File:Courses_Page.png|700px]]&lt;br /&gt;
*Add New Course. The user needs to select the Institution, select the instructor, and fill in the details like course name, directory, information, and whether the course is private.&lt;br /&gt;
[[File:Create_Course.png|700px]]&lt;br /&gt;
*Courses Page. The information displayed regarding a specific course.&lt;br /&gt;
[[File:Courses_Page_2.png|700px]]&lt;br /&gt;
*Update Existing Course. The user cannot update the Institution, the instructor, or the course name, only the directory, information, and whether the course is private.&lt;br /&gt;
[[File:Update_Course.png|700px]]&lt;br /&gt;
*Delete Existing Course. The user is prompted before deleting a course.&lt;br /&gt;
[[File:Delete_Course.png|700px]]&lt;br /&gt;
*Copy Existing Course. The user is prompted before copying a course.&lt;br /&gt;
[[File:Copy_Course.png|700px]]&lt;br /&gt;
*Courses Page. The page displays the result of copying a course.&lt;br /&gt;
[[File:Courses_Page_3.png|700px]]&lt;br /&gt;
*Manage TAs. According to the problem statement, we need to display a Modal which would contain the information regarding all the TAs of the course.&lt;br /&gt;
[[File:Manage_TAs.png|700px]]&lt;br /&gt;
*Add TAs. The logged-in user only needs to add the username of the user they want to add as the TA for the course.&lt;br /&gt;
[[File:Add_TA.png|700px]]&lt;br /&gt;
&lt;br /&gt;
*The feature for deleting a TA for a course has been implemented but the backend is not properly implemented (comments regarding these are mentioned in the code), so no screenshot for it :(&lt;br /&gt;
&lt;br /&gt;
*Feature to Update TA information is redundant so was not implemented.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
https://github.com/expertiza/reimplementation-front-end/pull/23&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152170</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=152170"/>
		<updated>2023-12-04T04:34:03Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Added Screenshots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', can be leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for edit, delete, manage TAs, and copy course.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/App.tsx src/App.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/App.tsx src/layout/Header.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/pull/23/files#diff-9b64839d3e96ecc2970dac1cd453fb5b78c9ec4e238ae53aa5140a429e93272d src/pages/Courses/Course.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/Courses/CourseColumns.tsx src/pages/Courses/CourseColumns.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/Courses/CourseCopy.tsx src/pages/Courses/CourseCopy.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/Courses/CourseDelete.tsx src/pages/Courses/CourseDelete.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/Courses/CourseEditor.tsx src/pages/Courses/CourseEditor.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/Courses/CourseUtil.ts src/pages/Courses/CourseUtil.ts]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/TA/TA.tsx src/pages/TA/TA.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/TA/TAColumns.tsx src/pages/TA/TAColumns.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/TA/TADelete.tsx src/pages/TA/TADelete.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/TA/TAEditor.tsx src/pages/TA/TAEditor.tsx]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/pages/TA/TAUtil.ts src/pages/TA/TAUtil.ts]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/utils/interfaces.ts src/utils/interfaces.ts]&lt;br /&gt;
* [https://github.com/expertiza/reimplementation-front-end/blob/ca13cf41ce1e96b3aa3d1ea617b729ca396a100f/src/utils/util.ts src/utils/util.ts]&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Courses Page. This is what is displayed when no courses exist in the Database&lt;br /&gt;
[[File:Courses_Page.png|700px]]&lt;br /&gt;
*Add New Course. The user needs to select the Institution, select the instructor, and fill in the details like course name, directory, information, and whether the course is private.&lt;br /&gt;
[[File:Create_Course.png|700px]]&lt;br /&gt;
*Courses Page. The information displayed regarding a specific course.&lt;br /&gt;
[[File:Courses_Page_2.png|700px]]&lt;br /&gt;
*Update Existing Course. The user cannot update the Institution, the instructor, or the course name, only the directory, information, and whether the course is private.&lt;br /&gt;
[[File:Update_Course.png|700px]]&lt;br /&gt;
*Delete Existing Course. The user is prompted before deleting a course.&lt;br /&gt;
[[File:Delete_Course.png|700px]]&lt;br /&gt;
*Copy Existing Course. The user is prompted before copying a course.&lt;br /&gt;
[[File:Copy_Course.png|700px]]&lt;br /&gt;
*Courses Page. The page displays the result of copying a course.&lt;br /&gt;
[[File:Courses_Page_3.png|700px]]&lt;br /&gt;
*Manage TAs. According to the problem statement, we need to display a Modal which would contain the information regarding all the TAs of the course.&lt;br /&gt;
[[File:Manage_TAs.png|700px]]&lt;br /&gt;
*Add TAs. The logged-in user only needs to add the username of the user they want to add as the TA for the course.&lt;br /&gt;
[[File:Add_TA.png|700px]]&lt;br /&gt;
&lt;br /&gt;
*The feature for deleting a TA for a course has been implemented but the backend is not properly implemented (comments regarding these are mentioned in the code), so no screenshot for it :(&lt;br /&gt;
&lt;br /&gt;
*Feature to Update TA information is redundant so was not implemented.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
https://github.com/expertiza/reimplementation-front-end/pull/23&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152165</id>
		<title>File:Add TA.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_TA.png&amp;diff=152165"/>
		<updated>2023-12-04T04:06:11Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Manage_TAs.png&amp;diff=152164</id>
		<title>File:Manage TAs.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Manage_TAs.png&amp;diff=152164"/>
		<updated>2023-12-04T04:05:42Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_3.png&amp;diff=152163</id>
		<title>File:Courses Page 3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_3.png&amp;diff=152163"/>
		<updated>2023-12-04T04:05:09Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Copy_Course.png&amp;diff=152162</id>
		<title>File:Copy Course.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Copy_Course.png&amp;diff=152162"/>
		<updated>2023-12-04T04:04:35Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Course.png&amp;diff=152161</id>
		<title>File:Delete Course.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Delete_Course.png&amp;diff=152161"/>
		<updated>2023-12-04T04:04:02Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Update_Course.png&amp;diff=152160</id>
		<title>File:Update Course.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Update_Course.png&amp;diff=152160"/>
		<updated>2023-12-04T04:03:28Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_2.png&amp;diff=152159</id>
		<title>File:Courses Page 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page_2.png&amp;diff=152159"/>
		<updated>2023-12-04T04:02:57Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_Course.png&amp;diff=152158</id>
		<title>File:Create Course.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Create_Course.png&amp;diff=152158"/>
		<updated>2023-12-04T04:02:21Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page.png&amp;diff=152157</id>
		<title>File:Courses Page.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Courses_Page.png&amp;diff=152157"/>
		<updated>2023-12-04T04:01:44Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=151584</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=151584"/>
		<updated>2023-11-16T02:16:24Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Design Patterns ==&lt;br /&gt;
#'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#'''Observer Pattern''', can be leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
#'''Courses Page''': This is the main page that displays all the courses. It should use the Table component for listing the courses.&lt;br /&gt;
#'''Course Row''': A component that represents a single course. It should have buttons for edit, delete, manage TAs, and copy course.&lt;br /&gt;
#'''Create/Edit Course Form''': A form for creating a new course or editing an existing one. This form should have fields for all relevant course details.&lt;br /&gt;
#'''TA Management Modal''': A modal that opens up when the 'Manage TAs' button is clicked. It should list all TAs for the selected course and provide options to add or remove TAs.&lt;br /&gt;
#'''Add TA Form''': A form in the TA Management Modal for adding a new TA to the course.&lt;br /&gt;
#'''TA Row''': A component that represents a single TA within the TA Management Modal. It should have a remove button to remove the TA from the course.&lt;br /&gt;
#'''Copy Course Modal/Form''': A modal or form that allows users to duplicate an existing course.&lt;br /&gt;
&lt;br /&gt;
== Test Scenarios ==&lt;br /&gt;
Testing in the application can be performed by using Libraries like ''Jest'' and ''Enzyme''. Testing can be automated by using CI/CD pipelines to execute whenever there are new changes to the code, so as to follow test-driven development. We can test for the following features.&lt;br /&gt;
&lt;br /&gt;
#'''List Courses''': Verify that all existing courses are listed in a table. Check if the course details listed make sense and are not overloaded with unnecessary information.&lt;br /&gt;
#'''Create Course''': Use the &amp;quot;create new course&amp;quot; button and fill in all the required fields. Verify that the course is created successfully and is listed in the course table.&lt;br /&gt;
#'''Edit Course''': Select a course from the list and click on the &amp;quot;edit&amp;quot; button. Change some details and save. Verify that the changes are reflected in the course list.&lt;br /&gt;
#'''Delete Course''': Select a course from the list and click on the &amp;quot;delete&amp;quot; button. Verify that the course is removed from the course list.&lt;br /&gt;
#'''Manage TA''': Click on the &amp;quot;manage TA&amp;quot; button for a course. Add a TA and verify that the TA is added successfully. Remove a TA and verify that the TA is removed successfully.&lt;br /&gt;
#'''Copy Course''': Select a course and use the &amp;quot;copy course&amp;quot; functionality. Verify that a new course is created with the same details as the original course, except for a unique course ID.&lt;br /&gt;
#'''User Interface Validation''': Check if the UI theme is consistent with the rest of the application. Verify that the page is responsive and works well on different screen sizes. Check if all buttons and links work as expected.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=151369</id>
		<title>CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2380._Reimplement_frontend_for_Courses&amp;diff=151369"/>
		<updated>2023-11-15T02:46:25Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Created Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Expertiza ==&lt;br /&gt;
Expertiza, an open-source learning management system, is built on the Ruby on Rails framework. It provides functionality for creating assignments, tests, assignment teams, and courses, alongside an array of other features. Notably, it incorporates a robust system for facilitating peer reviews and feedback within teams and groups. The primary emphasis in this project is on the frontend React Components, specifically those related to User, Institution, and Roles. The project aims to implement a fully functional user interface for these components utilizing React.&lt;br /&gt;
&lt;br /&gt;
== ToDo ==&lt;br /&gt;
In this project, the front end of the courses page needs to be reimplemented using React with Typescript. The main page will display a table with all the course listings. This page will only be visible to admins of the application. Admins will be able to add new courses, edit existing courses, and delete courses from the list. Along with this, the admins will have the feature to manage the TAs associated with the courses. The admins can view who are the TAs associated with which course. Furthermore, the admin can add or remove TAs associated with courses.&lt;br /&gt;
&lt;br /&gt;
== Plan ==&lt;br /&gt;
&lt;br /&gt;
#&amp;lt;strong&amp;gt;Design Patterns:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*'''Composite Design Pattern''', since we are going to create our Course component by nesting and composing the Table, Modal, and other components together.&lt;br /&gt;
#*'''DRY Principle''', because one of the major advantages of using React. We are able to reuse components that already exist, like the Table, and Modal components.&lt;br /&gt;
#*'''Provider Pattern'''. React provides the Context API using which we can pass props down the component chain without explicitly passing it down. Thus using the provider pattern.&lt;br /&gt;
#*'''Observer Pattern''', can be leveraged using the Context API provided by React along with hooks like ''useEffect'' and ''useState''.&lt;br /&gt;
#*'''HOC Pattern'''. HOC refers to the higher-order component which is a function that takes in a component and returns a component. We will be using this to add routing for the new pages that will be created.&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=151364</id>
		<title>CSC/ECE 517 Fall 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=151364"/>
		<updated>2023-11-15T02:11:46Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Added Topic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2023 - E2350. Allow reviewers to bid on what to review]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2351. Finish mentor management for assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2352. Fix &amp;quot;Back&amp;quot; link on “New Late Policy” page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2353. Further refactoring and improvement of review mapping helper]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2355. Improving Search Facility In Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2356. Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2357. Refactor sign_up_sheet_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2358. Refactor student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2359. Refactor user_controller.rb, user.rb, and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2360. View for Results of Bidding]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2361. Create a page to create and update a Questionnaire in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2362. Create a page to edit an Assignment's due date in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2363. Create a UI for Assignment Edit page &amp;quot;Etc&amp;quot; tab in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp;amp; Assignment's &amp;quot;Add Participants&amp;quot; page]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2365. Create a user interface for Questionnaire in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2366. Reimplement assignment model and assignment controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2367. Reimplement participants_controller.rb, participants.rb and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2368. Reimplement of due_date.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2369. Reimplement duties controller.rb and badges controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2370. Reimplement join team requests controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2371. Reimplement quiz_questionnaires_controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2373. Reimplementation of teams controller]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2374. Reimplement the Question hierarchy]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2375. Reimplement Waitlists]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2376. Reimplement student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2379. Reimplement authorization_helper.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2380. Reimplement frontend for Courses]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2382. Optimizing the LatePoliciesController]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2383. Grading Audit Trail]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2377. Reimplement impersonating users (functionality within impersonate_controller.rb)]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-2 Observability and Debuggability]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - NTX-4 Extend NDB Operator capabilities to support Postgres HA]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - G2350. Add GitLab support for using GraphQL to query user metrics 1]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - G2352. Add GitLab support for using GraphQL to query repository information]]&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150579</id>
		<title>CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp; Assignment's &quot;Add Participants&quot; page</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150579"/>
		<updated>2023-10-30T18:55:59Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Problem Statement==&lt;br /&gt;
The project revolves around creating the &amp;quot;Add Participants&amp;quot; feature for assignments and courses. The main page shows all the participants for a specific assignment or course. Only admins can view this page. Admins can add new participants, edit existing participants, and delete participants added to the assignment or course.&lt;br /&gt;
More details of the problem statement can be found here: [https://github.com/expertiza/reimplementation-front-end/issues/14 Issue 14].&lt;br /&gt;
&lt;br /&gt;
==Tasks Completed==&lt;br /&gt;
#&amp;lt;strong&amp;gt;Create a page to display all the participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a dynamic table to display all the participants&lt;br /&gt;
#*Implemented Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to add new participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins can fill out the participant details&lt;br /&gt;
#*Implemented Add Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to edit existing participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins can edit the participant details&lt;br /&gt;
#*Implemented Edit Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to delete participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins get a confirmation box before deleting a participant.&lt;br /&gt;
#*Implemented Delete Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Protected Routes:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Only people with permissions of TA or above level are allowed access to the page.&lt;br /&gt;
#*Implemented Route Protection mentioned in the project&lt;br /&gt;
&lt;br /&gt;
==Component Details==&lt;br /&gt;
#Created participant component which needs two props.&lt;br /&gt;
##&amp;lt;strong&amp;gt;type:&amp;lt;/strong&amp;gt; which contains either value &amp;quot;student_tasks&amp;quot; (for assignments) or &amp;quot;courses&amp;quot; (for courses).&lt;br /&gt;
##&amp;lt;strong&amp;gt;id:&amp;lt;/strong&amp;gt; of the assignment or course.&lt;br /&gt;
#Created add/edit participant modal which is similar to the user add/edit modal&lt;br /&gt;
#Created delete participant modal.&lt;br /&gt;
&lt;br /&gt;
==Files Created/Updated==&lt;br /&gt;
*reimplementation-front-end\src\App.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\Participant.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\participantColumns.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\ParticipantDelete.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\ParticipantEditor.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\participantUtil.ts&lt;br /&gt;
*reimplementation-front-end\src\utils\interfaces.ts&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
*Manage Participants Page:&lt;br /&gt;
[[File:Manage_Participants.png|700px]]&lt;br /&gt;
*Add Participants Page:&lt;br /&gt;
[[File:Add_Participant.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
* Renji Joseph Sabu (rsabu@ncsu.edu)&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
* Atharva Thorve &amp;lt;athorve@ncsu.edu&amp;gt;&lt;br /&gt;
* Mrityunjay Joshi &amp;lt;mjoshi6@ncsu.edu&amp;gt;&lt;br /&gt;
* Divit Kalathil &amp;lt;dakalath@ncsu.edu&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pull Request==&lt;br /&gt;
*[https://github.com/expertiza/reimplementation-front-end/pull/17 https://github.com/expertiza/reimplementation-front-end/pull/17]&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_Participant.png&amp;diff=150578</id>
		<title>File:Add Participant.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add_Participant.png&amp;diff=150578"/>
		<updated>2023-10-30T18:45:46Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Page showing add participant modal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page showing add participant modal&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Manage_Participants.png&amp;diff=150577</id>
		<title>File:Manage Participants.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Manage_Participants.png&amp;diff=150577"/>
		<updated>2023-10-30T18:45:14Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Page showing participants&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Page showing participants&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150575</id>
		<title>CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp; Assignment's &quot;Add Participants&quot; page</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150575"/>
		<updated>2023-10-30T18:42:18Z</updated>

		<summary type="html">&lt;p&gt;Athorve: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Problem Statement==&lt;br /&gt;
The project revolves around creating the &amp;quot;Add Participants&amp;quot; feature for assignments and courses. The main page shows all the participants for a specific assignment or course. Only admins can view this page. Admins can add new participants, edit existing participants, and delete participants added to the assignment or course.&lt;br /&gt;
More details of the problem statement can be found here: [https://github.com/expertiza/reimplementation-front-end/issues/14 Issue 14].&lt;br /&gt;
&lt;br /&gt;
==Tasks Completed==&lt;br /&gt;
#&amp;lt;strong&amp;gt;Create a page to display all the participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a dynamic table to display all the participants&lt;br /&gt;
#*Implemented Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to add new participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins can fill out the participant details&lt;br /&gt;
#*Implemented Add Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to edit existing participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins can edit the participant details&lt;br /&gt;
#*Implemented Edit Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Feature to delete participants:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Designed a modal where admins get a confirmation box before deleting a participant.&lt;br /&gt;
#*Implemented Delete Participant Component&lt;br /&gt;
#*Followed the component design pattern of the project.&lt;br /&gt;
#&amp;lt;strong&amp;gt;Protected Routes:&amp;lt;/strong&amp;gt;&lt;br /&gt;
#*Only people with permissions of TA or above level are allowed access to the page.&lt;br /&gt;
#*Implemented Route Protection mentioned in the project&lt;br /&gt;
&lt;br /&gt;
==Component Details==&lt;br /&gt;
Created participant component which needs two props.&lt;br /&gt;
#&amp;lt;strong&amp;gt;type:&amp;lt;/strong&amp;gt; which contains either value &amp;quot;student_tasks&amp;quot; (for assignments) or &amp;quot;courses&amp;quot; (for courses).&lt;br /&gt;
#&amp;lt;strong&amp;gt;id:&amp;lt;/strong&amp;gt; of the assignment or course.&lt;br /&gt;
&lt;br /&gt;
These two values would be provided by the parent component implementing the Participants component.&lt;br /&gt;
&lt;br /&gt;
==Files Created/Updated==&lt;br /&gt;
*reimplementation-front-end\src\App.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\Participant.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\participantColumns.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\ParticipantDelete.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\ParticipantEditor.tsx&lt;br /&gt;
*reimplementation-front-end\src\pages\Participants\participantUtil.ts&lt;br /&gt;
*reimplementation-front-end\src\utils\interfaces.ts&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150567</id>
		<title>CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp; Assignment's &quot;Add Participants&quot; page</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023_-_E2364._Create_a_UI_for_Course%27s_%26_Assignment%27s_%22Add_Participants%22_page&amp;diff=150567"/>
		<updated>2023-10-30T18:26:33Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Created page with &amp;quot;==Problem Statement== The project revolves around creating the &amp;quot;Add Participants&amp;quot; feature for assignments and courses. The main page shows all the participants for a specific...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Problem Statement==&lt;br /&gt;
The project revolves around creating the &amp;quot;Add Participants&amp;quot; feature for assignments and courses. The main page shows all the participants for a specific assignment or course. Only admins can view this page. Admins can add new participants, edit existing participants, and delete participants that were added to the assignment or course.&lt;br /&gt;
More details of the problem statement can be found here: [https://github.com/expertiza/reimplementation-front-end/issues/14 Issue 14].&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=150523</id>
		<title>CSC/ECE 517 Fall 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2023&amp;diff=150523"/>
		<updated>2023-10-30T17:16:41Z</updated>

		<summary type="html">&lt;p&gt;Athorve: Added Topic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[CSC/ECE 517 Fall 2023 - E2358. Refactor student_quizzes_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2351. Finish mentor management for assignments without topics]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2359. Refactor user_controller.rb, user.rb, and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2367. Reimplement participants_controller.rb, participants.rb and its child classes]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2355. Improving Search Facility In Expertiza]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2365. Create a user interface for Questionnaire in ReactJS]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2023 - E2364. Create a UI for Course's &amp;amp; Assignment's &amp;quot;Add Participants&amp;quot; page]]&lt;/div&gt;</summary>
		<author><name>Athorve</name></author>
	</entry>
</feed>