<?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=Mmviola</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=Mmviola"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mmviola"/>
	<updated>2026-09-30T09:58:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164725</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164725"/>
		<updated>2025-04-22T20:12:56Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Reference Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireTypes.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/Questionnaires.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireTypes.tsx&amp;lt;/code&amp;gt; – List of questionnaire types that may be created by the user. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireEditor.tsx&amp;lt;/code&amp;gt; – Create/Edit Rubric page that encapsultes form.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireForm.tsx&amp;lt;/code&amp;gt; – Form component for creating or editing questionnaires. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireItemsFieldArray.tsx&amp;lt;/code&amp;gt; – Supporting form component to dynamically create or update questionnaire items. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireUtils.tsx&amp;lt;/code&amp;gt; – Utility functions and interfaces for questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
====Login Credentials====&lt;br /&gt;
To login to the application, use the following credentials:&lt;br /&gt;
* &amp;lt;strong&amp;gt;username:&amp;lt;/strong&amp;gt; instructor6&lt;br /&gt;
* &amp;lt;strong&amp;gt;password:&amp;lt;/strong&amp;gt; password&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
*[http://152.7.176.255:8080 VCL Deployment]&lt;br /&gt;
&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[https://youtu.be/eVViM9_Gg80, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164613</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164613"/>
		<updated>2025-04-22T16:15:26Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Reference Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireTypes.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/Questionnaires.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireTypes.tsx&amp;lt;/code&amp;gt; – List of questionnaire types that may be created by the user. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireEditor.tsx&amp;lt;/code&amp;gt; – Create/Edit Rubric page that encapsultes form.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireForm.tsx&amp;lt;/code&amp;gt; – Form component for creating or editing questionnaires. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireItemsFieldArray.tsx&amp;lt;/code&amp;gt; – Supporting form component to dynamically create or update questionnaire items. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireUtils.tsx&amp;lt;/code&amp;gt; – Utility functions and interfaces for questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
====Login Credentials====&lt;br /&gt;
To login to the application, use the following credentials:&lt;br /&gt;
* &amp;lt;strong&amp;gt;username:&amp;lt;/strong&amp;gt; instructor6&lt;br /&gt;
* &amp;lt;strong&amp;gt;password:&amp;lt;/strong&amp;gt; password&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
*[http://152.7.176.255:8080 VCL Deployment]&lt;br /&gt;
&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164609</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164609"/>
		<updated>2025-04-22T14:50:46Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* QuestionnaireType.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireTypes.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/Questionnaires.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireTypes.tsx&amp;lt;/code&amp;gt; – List of questionnaire types that may be created by the user. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireEditor.tsx&amp;lt;/code&amp;gt; – Create/Edit Rubric page that encapsultes form.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireForm.tsx&amp;lt;/code&amp;gt; – Form component for creating or editing questionnaires. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireItemsFieldArray.tsx&amp;lt;/code&amp;gt; – Supporting form component to dynamically create or update questionnaire items. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireUtils.tsx&amp;lt;/code&amp;gt; – Utility functions and interfaces for questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
====Login Credentials====&lt;br /&gt;
To login to the application, use the following credentials:&lt;br /&gt;
* &amp;lt;strong&amp;gt;username:&amp;lt;/strong&amp;gt; instructor6&lt;br /&gt;
* &amp;lt;strong&amp;gt;password:&amp;lt;/strong&amp;gt; password&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164603</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164603"/>
		<updated>2025-04-22T14:37:52Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Files Modified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/Questionnaires.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireTypes.tsx&amp;lt;/code&amp;gt; – List of questionnaire types that may be created by the user. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireEditor.tsx&amp;lt;/code&amp;gt; – Create/Edit Rubric page that encapsultes form.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireForm.tsx&amp;lt;/code&amp;gt; – Form component for creating or editing questionnaires. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireItemsFieldArray.tsx&amp;lt;/code&amp;gt; – Supporting form component to dynamically create or update questionnaire items. &lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaires/QuestionnaireUtils.tsx&amp;lt;/code&amp;gt; – Utility functions and interfaces for questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
====Login Credentials====&lt;br /&gt;
To login to the application, use the following credentials:&lt;br /&gt;
* &amp;lt;strong&amp;gt;username:&amp;lt;/strong&amp;gt; instructor6&lt;br /&gt;
* &amp;lt;strong&amp;gt;password:&amp;lt;/strong&amp;gt; password&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164594</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164594"/>
		<updated>2025-04-22T14:25:27Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Test Plan - Manual Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
====Login Credentials====&lt;br /&gt;
To login to the application, use the following credentials:&lt;br /&gt;
* &amp;lt;strong&amp;gt;username:&amp;lt;/strong&amp;gt; instructor6&lt;br /&gt;
* &amp;lt;strong&amp;gt;password:&amp;lt;/strong&amp;gt; password&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164592</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164592"/>
		<updated>2025-04-22T14:21:33Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Questionnaire Form */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a form field has been touched, the application alerts the user of missing required fields. Failure to provide appropriate values will prevent form submission. &lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2025-04-22 at 10.12.22 AM.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upon successful submission, the newly-created questionnaire will appear in the list of questionnaires in the Questionnaire Management Dashboard. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaireselect.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To edit a questionnaire, select the edit icon next to the questionnaire you want to edit. You will be directed to a form with the existing questionnaire and items filled in. &lt;br /&gt;
&lt;br /&gt;
[[File:Editquestionnaire.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Editquestionnaire.png&amp;diff=164591</id>
		<title>File:Editquestionnaire.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Editquestionnaire.png&amp;diff=164591"/>
		<updated>2025-04-22T14:20:54Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Editquestionnaireselect.png&amp;diff=164590</id>
		<title>File:Editquestionnaireselect.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Editquestionnaireselect.png&amp;diff=164590"/>
		<updated>2025-04-22T14:17:52Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Createdquestionnaire.png&amp;diff=164589</id>
		<title>File:Createdquestionnaire.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Createdquestionnaire.png&amp;diff=164589"/>
		<updated>2025-04-22T14:15:56Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_2025-04-22_at_10.12.22_AM.png&amp;diff=164588</id>
		<title>File:Screenshot 2025-04-22 at 10.12.22 AM.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_2025-04-22_at_10.12.22_AM.png&amp;diff=164588"/>
		<updated>2025-04-22T14:12:53Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164587</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164587"/>
		<updated>2025-04-22T14:11:20Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* QuestionnaireUtils.ts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164586</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164586"/>
		<updated>2025-04-22T14:11:12Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Questionnaire Form */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
Once a type has been selected, the user is directed to the appropriate form to create a questionnaire of the selected type. The user can include a variable number of items to the questionnaire at the time of creation. The required fields for an item is determined by the item type. For example, a scale type item required minimum and maximum values for its scale. &lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164584</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164584"/>
		<updated>2025-04-22T14:08:28Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Type Selection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button is selected from the top of the Questionnaire Management Dashboard, a pop-up appears with the available questionnaire types. To create a questionnaire of a given type, select the &amp;lt;strong&amp;gt;&amp;quot;+&amp;quot;&amp;lt;/strong&amp;gt; botton in the row of the desired type. &lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164581</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164581"/>
		<updated>2025-04-22T14:06:23Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Manage Questionnaires */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
To navigate to the Questionnaire Management Dashboard, &amp;lt;strong&amp;gt;Questionnaire&amp;lt;/strong&amp;gt; from the &amp;lt;strong&amp;gt;Manage&amp;lt;/strong&amp;gt; dropdown from any page on Expertiza.&lt;br /&gt;
&lt;br /&gt;
To be consistent with other management pages (for Users, Courses, Assignements) in the reimplementation front end, a table of questionnaires belonging to the logged-in instructor is visible on the page. From this page, you may create, edit, or delete a questionnaire. &lt;br /&gt;
&lt;br /&gt;
To create a new questionnaire, click on the &amp;lt;strong&amp;gt;Create&amp;lt;/strong&amp;gt; button in the top left corner of the page. &lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164577</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=164577"/>
		<updated>2025-04-22T14:00:33Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===User Interface===&lt;br /&gt;
&lt;br /&gt;
====Manage Questionnaires====&lt;br /&gt;
&lt;br /&gt;
[[File:ManagementDashboard.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Type Selection====&lt;br /&gt;
&lt;br /&gt;
[[File:TypeSelection.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Form====&lt;br /&gt;
&lt;br /&gt;
[[File:Questionnaire Form.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
The following files were created or modified to implement the questionnaire dashboard and rubric management UI in React with TypeScript:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/Questionnaire/questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Questionnaire Management Dashboard UI.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/pages/EditQuestionnaire/Questionnaire.tsx&amp;lt;/code&amp;gt; – Implements the Create/Edit Rubric page with full form support.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/App.tsx&amp;lt;/code&amp;gt; – Updated routing to include new questionnaire pages.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/assets/icons/&amp;lt;/code&amp;gt; – Added new UI icons for editing, deleting, and copying questionnaires.&lt;br /&gt;
*&amp;lt;code&amp;gt;src/utils/axios_client.ts&amp;lt;/code&amp;gt; – Preconfigured axios instance used throughout the frontend for API calls.&lt;br /&gt;
*&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;package-lock.json&amp;lt;/code&amp;gt; – Updated dependencies for icons, React Bootstrap, and Formik support.&lt;br /&gt;
&lt;br /&gt;
==Test Plan - Manual Testing Strategy==&lt;br /&gt;
&lt;br /&gt;
====Questionnaire Dashboard Loading====&lt;br /&gt;
*Visit /questionnaire and confirm that all types of questionnaires are displayed.&lt;br /&gt;
*&amp;quot;+&amp;quot; button next to each type should open the rubric creation form for that type.&lt;br /&gt;
&lt;br /&gt;
====Form Functionality====&lt;br /&gt;
*Enter name, min/max scores, toggle private/public checkbox.&lt;br /&gt;
*Dynamically add/remove criteria.&lt;br /&gt;
*Submit form to create a new rubric and confirm it reflects in the backend.&lt;br /&gt;
&lt;br /&gt;
====Edit Rubric====&lt;br /&gt;
*Click on any existing rubric to load it in the edit form.&lt;br /&gt;
*Edit fields and submit changes. Confirm updated data is persisted.&lt;br /&gt;
&lt;br /&gt;
====Form Validation====&lt;br /&gt;
*Leave required fields empty and confirm validation errors appear.&lt;br /&gt;
*Enter invalid values (e.g., max &amp;lt; min) and confirm appropriate messages.&lt;br /&gt;
&lt;br /&gt;
====API Communication====&lt;br /&gt;
*Verified POST/PUT requests are correctly formatted.&lt;br /&gt;
*Backend updates reflected in UI after reload.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
*Confirm responsiveness across desktop, tablet, and mobile.&lt;br /&gt;
*Check accessibility: keyboard navigation, proper labeling.&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;br /&gt;
=====Demo Video=====&lt;br /&gt;
*[, Demo Video]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:TypeSelection.png&amp;diff=164574</id>
		<title>File:TypeSelection.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:TypeSelection.png&amp;diff=164574"/>
		<updated>2025-04-22T13:58:55Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ManagementDashboard.png&amp;diff=164572</id>
		<title>File:ManagementDashboard.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ManagementDashboard.png&amp;diff=164572"/>
		<updated>2025-04-22T13:57:41Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Questionnaire_Form.png&amp;diff=164570</id>
		<title>File:Questionnaire Form.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Questionnaire_Form.png&amp;diff=164570"/>
		<updated>2025-04-22T13:54:11Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163625</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163625"/>
		<updated>2025-04-08T01:44:53Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Test Coverage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163619</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163619"/>
		<updated>2025-04-08T01:36:27Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireType.tsx===&lt;br /&gt;
This component renders a table that displays different types of questionnaires. Each row provides an action to navigate to the corresponding creation page for the selected questionnaire type. The &amp;lt;code&amp;gt;Table&amp;lt;/code&amp;gt; component from &amp;lt;code&amp;gt;components/Table/Table&amp;lt;/code&amp;gt; is used in adherence with the DRY Principle and the provided design guidelines.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163599</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163599"/>
		<updated>2025-04-08T01:25:43Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* QuestionnaireForm.tsx */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
The form delegates the responsibility of handling questionnaire items to the &amp;lt;code&amp;gt;QuestionnaireItemsFieldArray&amp;lt;/code&amp;gt; component, which allows users to add or remove items dynamically and keeps each component focused on a single responsibility.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163554</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163554"/>
		<updated>2025-04-08T01:07:03Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireForm.tsx===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireForm.tsx&amp;lt;/code&amp;gt; file is a React component that provides a form interface for creating or editing questionnaires. It integrates with Formik for form state management and validation, utilizing React Bootstrap for UI elements.&lt;br /&gt;
&lt;br /&gt;
The form fields are strongly typed using Formik's &amp;lt;code&amp;gt;Field&amp;lt;/code&amp;gt; components and the &amp;lt;code&amp;gt;QuestionnaireFormValues&amp;lt;/code&amp;gt; interface, ensuring that the data entered by the user adheres to the correct structure.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Name&amp;lt;/strong&amp;gt;: A text field for entering the questionnaire name.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type&amp;lt;/strong&amp;gt;: A hidden input used to specify the type of the questionnaire selected from the Questionnaire Management Dashboard and to be passed to the back-end.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Private&amp;lt;/strong&amp;gt;: A checkbox to indicate whether the questionnaire is private.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Minimum/Maximum Question Scores&amp;lt;/strong&amp;gt;: Numeric fields for setting the minimum and maximum scores for questions.&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163545</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163545"/>
		<updated>2025-04-08T00:58:13Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
The &amp;lt;code&amp;gt;QuestionnaireUtils.ts&amp;lt;/code&amp;gt; file serves as a utility module for handling questionnaire-related functionality in the application, including interfaces, data transformation methods, and back-end data retrieval. This file helps maintain clear separation of concerns, type safety, and adherence to design principles such as the Single Responsibility Principle (SRP).&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163482</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163482"/>
		<updated>2025-04-08T00:17:14Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
===QuestionnaireUtils.ts===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163478</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163478"/>
		<updated>2025-04-08T00:13:24Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
While adhering to the following best practices: &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Component Reusability (DRY Principle)&amp;lt;/strong&amp;gt;: Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Separation of Concerns&amp;lt;/strong&amp;gt;: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Responsive and Accessible Design&amp;lt;/strong&amp;gt;: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Type Safety with TypeScript&amp;lt;/strong&amp;gt;: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Single Responsibility Principle&amp;lt;/strong&amp;gt;: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163475</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163475"/>
		<updated>2025-04-08T00:06:47Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==About Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163474</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163474"/>
		<updated>2025-04-08T00:04:59Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163473</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163473"/>
		<updated>2025-04-08T00:04:52Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163471</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163471"/>
		<updated>2025-04-08T00:03:16Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* API Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163470</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163470"/>
		<updated>2025-04-08T00:02:55Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* API Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the &amp;lt;code&amp;gt;utils/axios_client.ts&amp;lt;/code&amp;gt; file and reused throughout the project for consistent API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163469</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163469"/>
		<updated>2025-04-08T00:01:35Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Project Requirement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Overview==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the utils/axios_client.ts file and reused throughout the project for consistent API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163454</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163454"/>
		<updated>2025-04-07T22:15:50Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* API Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Requirement==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the utils/axios_client.ts file and reused throughout the project for consistent API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions || Retrieves a list of all questions (items)&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questions/:id || Retrieves a specific item, along with its rendered display&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questions || Creates a new item for a questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questions/:id || Updates an existing item&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163449</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163449"/>
		<updated>2025-04-07T22:09:17Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Class UML Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Requirement==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Backend Integration==&lt;br /&gt;
&lt;br /&gt;
The frontend interacts with several key resources exposed by the backend through a RESTful API. The structure of each model's associated database table lets us define Typescript interfaces, transform request/response payloads and promote type safety.&lt;br /&gt;
&lt;br /&gt;
===Models===&lt;br /&gt;
&lt;br /&gt;
====Questionnaire====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Questionnaire&amp;lt;/code&amp;gt; model forms the foundation of the Create/Edit form functionality, storing necessary attributes for each questionnaire. These fields are used to construct a form for editing or creating a rubric and to prepopulate the form when editing an existing rubric. &lt;br /&gt;
&lt;br /&gt;
The backend database also includes a table of &amp;lt;code&amp;gt;questionnaire_types&amp;lt;/code&amp;gt;, access to which would allow the Questionnaire Management Dashboard to dynamically render all available categories of questionnaires and enable users to initiate the creation process based on a selected type. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| name || The name/title of the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instructor_id || Foreign key referencing the instructor who created it&lt;br /&gt;
|-&lt;br /&gt;
| private || Boolean indicating if the questionnaire is private&lt;br /&gt;
|-&lt;br /&gt;
| min_question_score || Minimum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| max_question_score || Maximum score that can be given to any question&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_type || The type/category of questionnaire (e.g., Survey, Teammate Review)&lt;br /&gt;
|-&lt;br /&gt;
| display_type || Field for specifying how to display the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| instruction_loc || Field for custom instructions location or reference&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of questionnaire creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Item====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; model represents individual items (or questions) within a questionnaire and includes attributes that should be included when adding an item to a particular questionnaire.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Attribute !! Description&lt;br /&gt;
|-&lt;br /&gt;
| id || Unique identifier for the item&lt;br /&gt;
|-&lt;br /&gt;
| txt || The text of the item/question&lt;br /&gt;
|-&lt;br /&gt;
| weight || The relative importance or weight of the item&lt;br /&gt;
|-&lt;br /&gt;
| seq || The sequence/order of the item in the questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| question_type || Foreign key referencing the type of question&lt;br /&gt;
|-&lt;br /&gt;
| size || Size attribute for text-based answers (e.g., text area size)&lt;br /&gt;
|-&lt;br /&gt;
| alternatives || Possible answer choices (comma-separated for multiple-choice)&lt;br /&gt;
|-&lt;br /&gt;
| break_before || Boolean indicating whether to insert a page break before the item&lt;br /&gt;
|-&lt;br /&gt;
| max_label || Optional label for the maximum scale value&lt;br /&gt;
|-&lt;br /&gt;
| min_label || Optional label for the minimum scale value&lt;br /&gt;
|-&lt;br /&gt;
| created_at || Timestamp of item creation&lt;br /&gt;
|-&lt;br /&gt;
| updated_at || Timestamp of last update&lt;br /&gt;
|-&lt;br /&gt;
| questionnaire_id || Foreign key referencing the associated questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===API Endpoints===&lt;br /&gt;
&lt;br /&gt;
To facilitate interaction with the backend, the frontend uses a pre-configured &amp;lt;code&amp;gt;axiosClient&amp;lt;/code&amp;gt;, which abstracts the base API URL and port number. This client is defined in the utils/axios_client.ts file and reused throughout the project for consistent API communication. For questionnaire management, several key API routes are accessed using this client. For example, &amp;lt;code&amp;gt;GET /questionnaires/:id&amp;lt;/code&amp;gt; fetches detailed data for editing a selected questionnaire. When creating or updating a questionnaire, the application uses &amp;lt;code&amp;gt;POST /questionnaires&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PUT /questionnaires/:id&amp;lt;/code&amp;gt;, respectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! HTTP Method !! Endpoint !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires || Fetches a list of all questionnaires&lt;br /&gt;
|-&lt;br /&gt;
| GET || /questionnaires/:id || Fetches a specific questionnaire by ID&lt;br /&gt;
|-&lt;br /&gt;
| POST || /questionnaires || Creates a new questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| PUT || /questionnaires/:id || Updates an existing questionnaire&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || /questionnaires/:id || Deletes a specific questionnaire&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163439</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163439"/>
		<updated>2025-04-07T20:35:04Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Reference Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Requirement==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Class UML Diagram==&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;br /&gt;
*[https://github.com/mmviola1/reimplementation-front-end-E2538 Project Repo]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163424</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163424"/>
		<updated>2025-04-07T19:55:37Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Project Requirement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Requirement==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Management Dashboard and Create/Edit Rubric pages in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Class UML Diagram==&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163418</id>
		<title>CSC/ECE 517 Spring 2025 - E2538 Reimplementing Questionnaire Page in Expertiza</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025_-_E2538_Reimplementing_Questionnaire_Page_in_Expertiza&amp;diff=163418"/>
		<updated>2025-04-07T19:46:21Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E2538 Reimplementing Questionnaire Page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Expertiza==&lt;br /&gt;
Expertiza is an open-source web application currently built using [http://rubyonrails.org/ Ruby on Rails] and led by [https://www.csc.ncsu.edu/people/efg Dr. Edward Gehringer]. Designed for educational use, it enables instructors to manage assignments, rubrics, and participants, as well as assign grades and monitor student progress. Students can submit various types of learning objects, form teams, conduct peer evaluations, and review feedback from both peers and instructors. Originally developed at NC State, Expertiza is now used in select courses there and by faculty at other institutions, offering a flexible platform to enhance active learning and feedback in academic settings.&lt;br /&gt;
&lt;br /&gt;
The reimplementation of Expertiza aims to mimic and enhance the application’s existing functionality with clean, well-structured code, while transitioning to a front-end application written in React and Typescipt integrated with a Ruby on Rails back-end.&lt;br /&gt;
&lt;br /&gt;
==Project Requirement==&lt;br /&gt;
The goal of this project is to implement the Questionnaire Page in Expertiza by reimplementing its frontend using React with TypeScript, while integrating it with the existing Ruby on Rails backend APIs in the reimplementation backend repo. The new implementation will improve user experience, maintainability, and scalability while preserving core functionalities.&lt;br /&gt;
&lt;br /&gt;
This project covers:&lt;br /&gt;
&lt;br /&gt;
* Developing a React-based UI for managing questionnaire rubrics.&lt;br /&gt;
&lt;br /&gt;
* Enabling navigation to a new page when clicking the &amp;quot;+&amp;quot; button to create a specific rubric for a questionnaire type.&lt;br /&gt;
&lt;br /&gt;
* Ensuring seamless API integration with the reimplementation backend repo.&lt;br /&gt;
&lt;br /&gt;
* Managing user sessions and authentication securely.&lt;br /&gt;
&lt;br /&gt;
==Best Practices==&lt;br /&gt;
*Component Reusability (DRY Principle): Design reusable and modular components to avoid duplication and simplify maintenance, adhering to the &amp;quot;Don't Repeat Yourself&amp;quot; principle.&lt;br /&gt;
&lt;br /&gt;
*Separation of Concerns: Keep the UI, state management, and business logic separated. Use container components for state and logic and presentational components for rendering.&lt;br /&gt;
&lt;br /&gt;
*Responsive and Accessible Design: Ensure the UI adapts to different devices and meets accessibility standards (e.g., ARIA roles, keyboard navigation, and proper contrast).&lt;br /&gt;
&lt;br /&gt;
*Type Safety with TypeScript: Use TypeScript interfaces and types to ensure data consistency, reduce runtime errors.&lt;br /&gt;
&lt;br /&gt;
*Single Responsibility Principle: Each component or function should have a single, well-defined purpose to improve clarity, testability, and scalability.&lt;br /&gt;
&lt;br /&gt;
==What Needs to be Done?==&lt;br /&gt;
===Questionnaire Management Dashboard===&lt;br /&gt;
&lt;br /&gt;
Displays a list of questionnaire types (Review, Metareview, Author Feedback, etc.)&lt;br /&gt;
* Each questionnaire type has a &amp;quot;+&amp;quot; button, which, when clicked, navigates to a new page for creating a specific rubric for that questionnaire type.&lt;br /&gt;
* Data is fetched dynamically from the backend.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx1x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
===Create/Edit Rubric Page===&lt;br /&gt;
&lt;br /&gt;
This page is displayed when a user clicks the &amp;quot;+&amp;quot; button from the dashboard.&lt;br /&gt;
&lt;br /&gt;
Allows users to:&lt;br /&gt;
* Enter a name for the rubric.&lt;br /&gt;
* Define min/max item scores.&lt;br /&gt;
* Set the review visibility (private/public).&lt;br /&gt;
* Add criteria for evaluation.&lt;br /&gt;
* Submit the form to create a new rubric for the selected questionnaire type.&lt;br /&gt;
&lt;br /&gt;
[[File:Picx2x.png | 700px]]&lt;br /&gt;
&lt;br /&gt;
==Class UML Diagram==&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
===Views===&lt;br /&gt;
===Model===&lt;br /&gt;
===Controller===&lt;br /&gt;
&lt;br /&gt;
==Files Modified==&lt;br /&gt;
&lt;br /&gt;
==Test Plan==&lt;br /&gt;
===Testing Views===&lt;br /&gt;
===Testing Model===&lt;br /&gt;
===Testing Controller===&lt;br /&gt;
&lt;br /&gt;
==Test Coverage==&lt;br /&gt;
&lt;br /&gt;
==Team==&lt;br /&gt;
=====Mentor===== &lt;br /&gt;
*Prathyusha Kodali - pkodali&lt;br /&gt;
&lt;br /&gt;
=====Members===== &lt;br /&gt;
*Ashwin Muniswamy - akumarm&lt;br /&gt;
*Michael Anderson - mwander5&lt;br /&gt;
*Martina Viola - mmviola&lt;br /&gt;
&lt;br /&gt;
==Reference Links==&lt;br /&gt;
*[https://expertiza.ncsu.edu/tree_display/list?currCtlr=Questionnaires, Questionnaire Management Dashboard]&lt;br /&gt;
*[https://expertiza.ncsu.edu/questionnaires/new?model=ReviewQuestionnaire&amp;amp;private=1, Create/Edit Rubric Page]&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162905</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162905"/>
		<updated>2025-03-28T10:36:50Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;View Submissions&amp;quot; page works for team and individual assignments. If assignment is an individual assignment, the Team Name category will not be displayed in the list of submissions.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot 2025-03-28 at 6.29.08 AM.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the assignment data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_2025-03-28_at_6.29.08_AM.png&amp;diff=162904</id>
		<title>File:Screenshot 2025-03-28 at 6.29.08 AM.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Screenshot_2025-03-28_at_6.29.08_AM.png&amp;diff=162904"/>
		<updated>2025-03-28T10:31:26Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162903</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162903"/>
		<updated>2025-03-28T10:30:41Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* UI Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;View Submissions&amp;quot; page works for team and individual assignments. If assignment is an individual assignment, the Team Name category will not be displayed in the list of submissions.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162902</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162902"/>
		<updated>2025-03-27T18:14:23Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162901</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162901"/>
		<updated>2025-03-27T18:13:44Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Future Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162900</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162900"/>
		<updated>2025-03-27T18:13:38Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162899</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162899"/>
		<updated>2025-03-27T18:13:22Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Error Handling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162898</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162898"/>
		<updated>2025-03-27T18:13:11Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Backend Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
Due to missing functionality in the reimplementation backend, our project uses mock data for the following categories:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Content displayed on the Assign Grades page is particular to a participant ID specified in the page's route. Updates were made to the reimplementation back-end to enable retrieval of data for a particular user.&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162897</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162897"/>
		<updated>2025-03-27T18:09:20Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162896</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162896"/>
		<updated>2025-03-27T18:09:08Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Backend Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Submission: Allows instructors to input grades and comments and submit them via API.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Handling: Prevents submission if required fields are missing.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162895</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162895"/>
		<updated>2025-03-27T18:08:54Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Submission: Allows instructors to input grades and comments and submit them via API.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Handling: Prevents submission if required fields are missing.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;/b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;/b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162894</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162894"/>
		<updated>2025-03-27T18:08:41Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Future Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Submission: Allows instructors to input grades and comments and submit them via API.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Handling: Prevents submission if required fields are missing.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
To log in to the deployed version of the project, use the following credentials:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;username:&amp;lt;b&amp;gt; instructor6&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;password:&amp;lt;b&amp;gt; password&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162893</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162893"/>
		<updated>2025-03-27T18:07:12Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* UI Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The reimplemented &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the Submission History page has not yet been implemented in the front-end reimplementation. As such, the History link currently navigates back to the assignment edit page.&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Submission: Allows instructors to input grades and comments and submit them via API.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Handling: Prevents submission if required fields are missing.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162892</id>
		<title>CSC/ECE 517 Spring 2025/oss E2521</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2025/oss_E2521&amp;diff=162892"/>
		<updated>2025-03-27T18:05:03Z</updated>

		<summary type="html">&lt;p&gt;Mmviola: /* Backend Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About Expertiza==&lt;br /&gt;
Expertiza is an open-source platform built on the Ruby on Rails framework. It facilitates collaborative learning by allowing instructors to create assignments, manage peer reviews, and track submissions. The platform supports various file formats, including document uploads, URLs, and wiki pages. Students can work in teams, review each other's work, and receive feedback. Expertiza's modular architecture supports continuous improvement and adaptation to new educational needs.&lt;br /&gt;
&lt;br /&gt;
The current implementation of Expertiza uses Ruby on Rails for both the frontend and backend. The reimplementation of Expertiza adopts a modernized stack, utilizing Ruby on Rails for the backend and TypeScript with React for the frontend.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The goal of this project is to implement the user interface for the &amp;quot;View Submissions&amp;quot; and &amp;quot;Assign Grades&amp;quot; pages for the reimplementation of Expertiza in Typescript and React. This improvement focuses on increasing the efficiency and usability of the grading workflow while ensuring accessibility and robust data handling.&lt;br /&gt;
&lt;br /&gt;
The following tasks outlined as part of this project:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Redesigned the &amp;quot;View Submissions&amp;quot; page to display team information and streamline navigation to relevant pages.&lt;br /&gt;
&amp;lt;li&amp;gt;Design the &amp;quot;Assign Grades&amp;quot; page to support input validation, error handling, and submission of grades and comments.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement backend integration to ensure real-time synchronization with the reimplementation backend APIs.&lt;br /&gt;
&amp;lt;li&amp;gt;Implement error handling and improve accessibility across devices.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==View Submissions Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The updated &amp;quot;View Submissions&amp;quot; page provides a clear and interactive interface for instructors to manage and review team submissions. Key elements include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Details: Displays team names, participants, resource links, and submission history.&lt;br /&gt;
&amp;lt;li&amp;gt;Action Links: Includes interactive options such as &amp;quot;Assign Grade&amp;quot; and &amp;quot;History&amp;quot; for each team.&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic Column Widths: Optimized table layout to prevent excessive width by adjusting the links column dynamically.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
The page fetches data from the reimplementation backend and dynamically updates the following details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assignment information&lt;br /&gt;
&amp;lt;li&amp;gt;Team member details&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant controllers and routes within the reimplementation back end. In consultation with the professor, a list_submissions method was added to the AssignmentsController (assignment_controller.rb) to enable fetching submissions data.&lt;br /&gt;
&lt;br /&gt;
Though links to submitted content is intended to be displayed on the view submissions page, the relevant backend controllers have also not yet been implemented. On the instruction of the professor, retrieval of submission links was omitted for this iteration of the assignment.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigation: Clicking the &amp;quot;Assign Grade&amp;quot; link redirects the user to the &amp;quot;Assign Grades&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Data Retrieval: On page load, it fetches and displays the required data using backend APIs.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Assign Grades Page==&lt;br /&gt;
&lt;br /&gt;
===UI Design===&lt;br /&gt;
The &amp;quot;Assign Grades&amp;quot; page is designed to facilitate accurate and efficient grading. Features include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Team Information: Displays team details, submission summaries, and peer review scores.&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Input: Input fields for grades and comments with a submit button.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Indicators: Highlights missing peer reviews and incomplete fields.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backend Integration===&lt;br /&gt;
API calls are used to retrieve and update the following data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submission information&lt;br /&gt;
&amp;lt;li&amp;gt;Peer review scores&lt;br /&gt;
&amp;lt;li&amp;gt;Missing reviews&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Grade Submission: Allows instructors to input grades and comments and submit them via API.&lt;br /&gt;
&amp;lt;li&amp;gt;Error Handling: Prevents submission if required fields are missing.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling===&lt;br /&gt;
Comprehensive error handling is implemented to manage:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Failed API requests&lt;br /&gt;
&amp;lt;li&amp;gt;Invalid inputs&lt;br /&gt;
&amp;lt;li&amp;gt;Submission errors&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Future Improvements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Implement bulk grading functionality for large classes.&lt;br /&gt;
&amp;lt;li&amp;gt;Enhance search and filter options for the &amp;quot;View Submissions&amp;quot; page.&lt;br /&gt;
&amp;lt;li&amp;gt;Optimize performance with larger datasets.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[Expertiza Platform](https://expertiza.ncsu.edu/)&lt;br /&gt;
&amp;lt;li&amp;gt;[GitHub Pull Request (Unmerged)](https://github.com/expertiza/reimplementation-front-end/pull/87)&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mmviola</name></author>
	</entry>
</feed>