# Documentation for React webapp The current state of the pmp-webapp's project could be improved. We can always improve the code quality and the shared knowledge inside the codebase. For this reason, I'm documenting some changes that I think it could best serve the application, by utilizing React's best practices and some programming and architecture principals. #### All of these changes could be made inside the same existing project, only changing what we need. ## Should be added: - Documentation on design and development guidelines for developers: > How to develop a new page? How to create a new component and make it call the backend with the correct integration for the Redux store? All these questions can come up for someone that is joining a new project, and we should write and define some guides and explanation on How, Why and When do certain technical choices. A way to do this is to create a meaningful README.md file inside the needed folder. - Centralized error handling and API communication; > We can create a base API service that could share logic for error handling (toast message, popup notifications...) and utilize this base for Authentication and other API services; - React Hook Form (forms validation and state): > With [this library](https://react-hook-form.com/), we can create much simpler forms structure and handle the validation in a centralized way. ## Should change: - Definition of Routes, pages and layouts; > Here we need to separate the routes to their specific folder with all the routes and layouts for logged in customers. - App component entry point; > The file `App.tsx` is too much big with a lot of Redux and Cookies manipulations inside. This can be a problem because we need to divide the application better and have a way to mantain when it get big. ## Preferences: - Base components interface that extend the Bootstrap 5: > This change could improve later in the project the ability to design our own design system with different variants for different components, or eject from Bootstrap, by creating our high-level interface for the Bootstrap's components. In the beginning, we can do something simple like just repassing all the props and rendering the component as it is: ```jsx const Button = (props: BootstrapButtonProps /* props interface */) => { return <BootstrapButton {...props} /> } ``` - Atomic Design component structure: > If we utilize the interface base components, as mentioned before, we could also use the Atomic Design pattern and guidelines as follow to better clarify the use and share of the components: [Atomic Design's guidelines](https://bradfrost.com/blog/post/atomic-web-design/); - Review technically Redux Thunk vs Redux Saga; > We can check it how to make the backend integration with the Redux store by defining what to use it: Sagas or Thunks.