Implement a simple TODO app that functions as described below.
If you are unsure about how a feature should work, open the real TodoApp and observe its behavior.
- Learn the markup in
App.tsx
. - Show only a field to create a new todo if there are no todos yet.
- Use React Context to manage todos.
- Each todo should have an
id
(you can use+new Date()
), atitle
, and acompleted
status (false
by default). - Save
todos
tolocalStorage
usingJSON.stringify
after each change. - Display the number of not completed todos in
TodoApp
. - Implement filtering by status (
All
/Active
/Completed
). - Add the ability to delete a todo using the
x
button. - Implement the
clearCompleted
button (disabled if there are no completed todos). - Implement individual todo status toggling.
- Implement the
toggleAll
checkbox (checked only when all todos are completed). - Enable inline editing for the
TodoItem
:- Double-clicking on the todo title shows a text field instead of the title and
deleteButton
. - Form submission saves changes (press
Enter
to save). - Trim the saved text.
- Delete the todo if the title is empty.
- Save changes
onBlur
. - Pressing
Escape
cancels editing (useonKeyUp
and check ifevent.key === 'Escape'
).
- Double-clicking on the todo title shows a text field instead of the title and
- Install the Prettier Extension and use these VSCode settings to enable format on save.
- Implement a solution following the React task guidelines.
- Use the React TypeScript cheat sheet.
- Open another terminal and run tests with
npm test
to ensure your solution is correct. - Replace
<your_account>
with your GitHub username in the DEMO LINK and add it to the PR description.