diff --git a/components/AddTask.js b/components/AddTask.js index 9652adb..7e0a31e 100644 --- a/components/AddTask.js +++ b/components/AddTask.js @@ -1,17 +1,55 @@ +import TodoListItem from '../components/TodoListItem' +import { useEffect, useState } from 'react' +import axios from '../utils/axios' +import { useAuth } from '../context/auth' +import { API_URL }from '../utils/constants' +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; + +export function displaySuccessToast(message) { + toast.success(message); +} +export function displayWarnToast(message) { + toast.warn(message); +} + +export function displayErrorToast(message) { + toast.error(message); +} export default function AddTask() { + const {token} = useAuth(); + const [task, setTask] = useState("") const addTask = () => { - /** - * @todo Complete this function. - * @todo 1. Send the request to add the task to the backend server. - * @todo 2. Add the task in the dom. - */ + if (task==""){ + displayWarnToast("Task is empty!!"); + } + else{ + axios({ + headers: { + Authorization: 'Token ' + token + }, + url: API_URL + "todo/create/", + method: 'POST', + data: { + title: task + }, + }).then(res => { + displaySuccessToast("Task added!!!"); + setTask(""); + props.displayTasks(); + + }).catch(function (err) { + }) + } } return (
setTask(e.target.value)} type='text' className='todo-add-task-input px-4 py-2 placeholder-blueGray-300 text-blueGray-600 bg-white rounded text-sm border border-blueGray-300 outline-none focus:outline-none focus:ring w-full' placeholder='Enter Task' + value={task} />
+ + ) } + diff --git a/components/Nav.js b/components/Nav.js index e03cb0f..4a4db6b 100644 --- a/components/Nav.js +++ b/components/Nav.js @@ -1,14 +1,9 @@ -/* eslint-disable jsx-a11y/alt-text */ -/* eslint-disable @next/next/no-img-element */ import Link from 'next/link' import { useAuth } from '../context/auth' -/** - * - * @todo Condtionally render login/register and Profile name in NavBar - */ + export default function Nav() { - const { logout, profileName, avatarImage } = useAuth() + const { logout, profileName, avatarImage, token } = useAuth() return ( ) diff --git a/components/RegisterForm.js b/components/RegisterForm.js index a6ef2e3..1b4221e 100644 --- a/components/RegisterForm.js +++ b/components/RegisterForm.js @@ -2,6 +2,8 @@ import React, { useState } from 'react' import axios from '../utils/axios' import { useAuth } from '../context/auth' import { useRouter } from 'next/router' +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; export default function Register() { const { setToken } = useAuth() @@ -27,11 +29,11 @@ export default function Register() { username === '' || password === '' ) { - console.log('Please fill all the fields correctly.') + toast.warn("Please fill all the fields correctly.",{position: "top-center"}); return false } if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) { - console.log('Please enter a valid email address.') + toast.warn("Please enter a valid email address.",{position: "top-center"}) return false } return true @@ -43,7 +45,7 @@ export default function Register() { if ( registerFieldsAreValid(firstName, lastName, email, username, password) ) { - console.log('Please wait...') + toast.info('Please wait...',{position: "top-center"}) const dataForApiRequest = { name: firstName + ' ' + lastName, @@ -61,14 +63,16 @@ export default function Register() { router.push('/') }) .catch(function (err) { - console.log( - 'An account using same email or username is already created' + toast.error( + "An account using same email or username is already created",{position: "top-center"} ) }) } } return ( + <> +
@@ -132,5 +136,6 @@ export default function Register() {
+ ) } diff --git a/components/TodoListItem.js b/components/TodoListItem.js index 7965f3b..426a8b8 100644 --- a/components/TodoListItem.js +++ b/components/TodoListItem.js @@ -1,55 +1,97 @@ -/* eslint-disable @next/next/no-img-element */ +import React, {useState} from "react" +import { useAuth } from '../context/auth' +import { ToastContainer, toast } from 'react-toastify'; +import 'react-toastify/dist/ReactToastify.css'; +import axios from '../utils/axios' +import { API_URL } from '../utils/constants' + +export default function TodoListItem(props) { + const [task, setTask] = useState(props.task) + const {token} = useAuth() + + const inputId = "input-button-"+props.id; + const doneId = "done-button-"+props.id; + const taskId = "task-"+props.id; + const taskActionsId = "task-actions-"+props.id; -export default function TodoListItem() { const editTask = (id) => { - /** - * @todo Complete this function. - * @todo 1. Update the dom accordingly - */ + document.getElementById("input-button-"+id).classList.remove("hideme"); + document.getElementById("done-button-"+id).classList.remove("hideme"); + document.getElementById("task-"+id).classList.add("hideme"); + document.getElementById("task-actions-"+id).classList.add("hideme"); } const deleteTask = (id) => { - /** - * @todo Complete this function. - * @todo 1. Send the request to delete the task to the backend server. - * @todo 2. Remove the task from the dom. - */ + axios({ + headers: { + Authorization: 'Token ' + token + }, + url: API_URL + 'todo/' + id + '/', + method: 'DELETE', + }).then(() => { + toast.success("Task has been deleted",{position: "top-center"}); + props.displayTasks(); + }).catch((err) => { + toast.warn("error",{position: "top-center"}); + }) } const updateTask = (id) => { - /** - * @todo Complete this function. - * @todo 1. Send the request to update the task to the backend server. - * @todo 2. Update the task in the dom. - */ + if (task===""){ + toast.warn("Task is empty!!",{position: "top-center"}); + } + else{ + axios({ + headers: { + Authorization: 'Token ' + token + }, + url: API_URL + 'todo/' + id + '/', + method: 'PUT', + data: { + title: task + }, + }).then(() => { + toast.success("Todo has been updated...",{position: "top-center"}); + document.getElementById("input-button-"+props.id).classList.add("hideme"); + document.getElementById("done-button-"+props.id).classList.add("hideme"); + document.getElementById("task-"+props.id).classList.remove("hideme"); + document.getElementById("task-actions-"+props.id).classList.remove("hideme"); + props.displayTasks(); + }).catch(function (err) { + toast.warn("error",{position: "top-center"}); + }) + } } return ( <> +
  • setTask(e.target.value)} + id={inputId} type='text' className='hideme appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:ring todo-edit-task-input' placeholder='Edit The Task' + value={task} /> -
    +
    -
    - Sample Task 1 +
    + {task}
    - +