This project is a responsive web application that fetches user data from the JSONPlaceholder API, displays it in a tabular format, and provides advanced filtering capabilities. It is built with React, Redux, and TypeScript to ensure a robust and maintainable codebase.
- Fetch All Users: Retrieves a list of users from the JSONPlaceholder API using a GET request.
- Display Users in a Table: Users are displayed in a dynamic table with columns for name, username, email, and phone.
- Advanced Filtering: Search input fields for each column allow for real-time filtering of user data.
- State Management: Managed using Redux Toolkit for efficient handling of user data and filter states.
- Type Safety: TypeScript is applied throughout the project to reduce runtime errors and ensure robust typing.
- React: For building the user interface.
- Redux Toolkit: To manage application state.
- TypeScript: For type safety and improved code quality.
- Axios: For handling API requests to JSONPlaceholder.
- CSS: For styling the application with a focus on a clean and user-friendly interface.
To get the project running on your local machine:
To view the website locally:
- Clone the repository: git clone https://github.com/Inna-Mykytiuk/management-test
- Navigate into the project directory.
- Open
index.html
in your web browser.
Data is fetched from the JSONPlaceholder API using Axios. The user data is then stored in the Redux store for easy access and management across the application.
The user table displays four columns: name, username, email, and phone. The table is dynamic, rendering data from the Redux store.
Search input fields are implemented for each column in the user table. As users type in the search fields, the table dynamically filters the results, providing real-time updates.
Redux Toolkit is used for managing the application state. The user data and filter states are stored in the Redux store, ensuring consistent and centralized state management.
TypeScript is utilized throughout the application, providing type definitions for API data, Redux states, and component props. This reduces potential runtime errors and enhances code maintainability.
The application is styled using CSS, focusing on a clean and responsive design. The user table and search inputs are designed to be intuitive and easy to use.
Implementing real-time filtering across multiple columns required careful consideration of performance, especially with large datasets. Ensuring type safety across complex data structures also presented challenges, which were addressed with thorough TypeScript integration.
This project demonstrates a robust approach to managing and displaying user data with advanced filtering capabilities. The use of Redux Toolkit and TypeScript ensures the application is maintainable and scalable, while the clean design provides a positive user experience.