This is an Idea Board which allows users to create notes to express their ideas.
React, Redux, Material UI
Others worth noting: Babel, Webpack, Moment, React Router Dom, Masonry, Chartjs, Redux-Persist
- clone repo
- npm install
- npm run
- CRUD notes
- On load, cursor auto focus on create note title input
- Order based 3 Filters
- CRUD labels for notes
- Info on date created and last edited
- View Profile
- View Idea board progression (Chartjs)
- Responsive
(hover over edited date to get created)
- Separate css style used for Material UI components
- Remove duplicate labels
- Filter based on labels
- Add Firebase integration to store notes and user auth
- Ability to filter by custom labels
- Share notes
- Archive Note
- Colour notes
I added thunk and wrote my action files the way I did to simulate async calls. This is in preparation for network latency and async calls when I move the project to firebase. You can increase latency by modifying the settimeout functions in src/redux/actions
AB testing
You'll notice that a card goes to the top of the list when you edit it. This is due to how the noteData
object is being updated. I thought about 'fixing' this (leaving cards in the same place as before), but concluded that it was nice having your last edited card closer to the top. Why scroll through a long list of cards to find the last one you worked on?
However, adding a tag triggers the same behaviour (without saving), which could be considered an undesired feature. Again, this is because I have to update the to store to store each label, which in turns triggers the behaviour.
This is because there is a delay between sending the request to save and the save happening. Normally, you have something like a loading icon to represent a change. This could be added with a isCardLoading
state.
This is similar to the above mentions. All cards are stored in one big object, object by default are agnostic in its order. The rebuilding of this object does not take order into account order filtering when updating.
Components can be further modularize into presentation and containers. This is an ongoing process, but could be done within a few hours given the app current state.
I'm not good at testing. I fully understand the benefits; I understand why it's important. Unfortunately I haven't had much experience (yet!) writing test cases so my proficiency in this is very limited and would take longer than the permitted time. Obviously, this will not always be the case.
With these sorts of applications it's important to always check against vulnerability such as XSS. React automatically automatically escape string, but there are still some aspect on vulnerability. This is something to further consider.
These files are very similar and can therefore be converted into one component.
Sure. Make a pull request ;).