UI Design Decisions: I originally created separate forms on different pages for editing/deletion. I wasn't thinking about design at the time when I started adding to my UI. I was looking to quickly test if my front-end could connect to my endpoints for updating and deleting books. I mention this because it helped me realize how awful it was having to go back and forth between the forms and the table for updating and deleting books. I also noted how redundant it was to use forms to begin with. I was inspired to implement inline editing to make updates, and I've included deletion buttons for books inside the table itself. Equipping the table with all the new features is intuitive and a far more friendly user experience.
UI Struggles: I mainly struggled with adding a confirmation alert for deleting books using MUI. I still struggle with sharing props across components, especially when async functions are involved, so it took me way too long to debug and figure out to get it right between having my own components and using the ones from MUI. My back-end takes care of all the validation, and I had no issues when I was implementing editing/deleting as separate forms, so my main struggles involved React components, props, state management, and integrating MUI components properly
Experience with MUI: Some of the additions I made were simple, as well as fun/satisfying to add. The year slider I included for my book search, my form updates, etc. were not difficult to add. Modifying books with inline editing was a little trickier, but I was able to figure out the documentation and get it working. Deletion is where I struggled the most, for reasons I mentioned before. Trying to get the MUI DataGrid and Dialog components (for the popup that appears) to work together with my BookTables component was a huge struggle having to figure out props, sharing async functions, and typing values properly.
Endpoint Experience: This part of the assignment is where I struggled the least. Testing feels a bit tedious now, but implementing the endpoint wasn't hard with my existing handlers. I only wish I figured out sooner that I didn't need both a PATCH and a PUT endpoint because of how the MUI components I used worked. That would have saved a little time on my end, however, it was good practice for me with developing a traditional REST API. I did have to spend some time refactoring repetitive code blocks that my handlers were using, but I'm happy with the result.