diff --git a/src/App.js b/src/App.js index 759cf4b..67c6d34 100644 --- a/src/App.js +++ b/src/App.js @@ -1,199 +1,62 @@ import "./App.css"; import React, {useState} from "react"; +import Header from './components/Header' +import TaskList from "./components/TaskList"; +import AddTask from "./components/AddTask"; function App() { - document.title = 'Noti.io' + document.title = 'Noti.io' const [tasks, setTasks] = useState([{ - text: 'Test Task', - id: 616 - }]) + text: 'Test Task', + id: 616 + }]) const [text, setText] = useState('') - const [messageInvalidText, setMessageInvalidText] = useState('') const [counterInputs, setCounterInputs] = useState(1) + + const [messageInvalidText, setMessageInvalidText] = useState('') + + const [formEditInput, setFormEditInput] = useState('') - const persistTasks = (modificatedTasks) => { - localStorage.setItem('tasks', JSON.stringify(modificatedTasks)) - } - - const persistCounter = () => { - localStorage.setItem('counter', JSON.stringify(counterInputs)) - } - - const restoreTasks = () => { - let tasksCache = localStorage.getItem('tasks') - - tasksCache = JSON.parse(tasksCache) - - setTasks(tasksCache) - - } - - const restoreCounter = () => { - let counterInputCache = localStorage.getItem('counter') - - counterInputCache = JSON.parse(counterInputCache) - - setCounterInputs(counterInputCache + 1) - } - - const checkCache = () => { - if (localStorage.getItem('tasks')) { - restoreTasks() - } - - if (localStorage.getItem('counter')) { - restoreCounter() - } - return - } - - window.onload = () => { - checkCache() - } - - - const validateInput = (e, id = 0 ) => { - e.preventDefault() - - setMessageInvalidText('') - - if (!text.trim()) { - setMessageInvalidText('Text empty, please send a new task') - return - } - - setTasks([...tasks, - { - text: text, - id: counterInputs - } - ]) - - setCounterInputs(counterInputs + 1) - - setFormEditInput('') - - e.target.reset() - - persistTasks([...tasks, - { - text: text, - id: counterInputs - } - ]) - - persistCounter() - //setText('') - } - - - const deleteInput = (id) => { - const deleted_task = tasks.filter(task => task.id !== id) - - setTasks(deleted_task) - persistTasks(deleted_task) - - } - - const modifyInput = (id) => { - setFormEditInput([true, id]) - } - - const modifyInputTwo = (e) => { - - e.preventDefault() - - if(!text.trim()) { - setFormEditInput('') - return - } - - const taskID = tasks.findIndex(task => task.id === formEditInput[1]) - - tasks[taskID].text = text - - setTasks(tasks) - setText('') - setFormEditInput('') - - persistTasks() - - } - - return ( <> -

Noti.io

+
-
-
- { - tasks.map (task => ( -
-
-
-

{ task.text }

- ({task.id}) -
-
- - -
-
+ + text={text} + setText={setText} - { formEditInput[0] && task.id === formEditInput[1] ? + formEditInput={formEditInput} + setFormEditInput={setFormEditInput} + /> -
- setText(e.target.value) } - className="input-edit-task" - autoFocus - autoComplete="off" - /> - -
+ - : <> - } -
-
- )) - } -
-
-
-

{messageInvalidText}

-
- setText(e.target.value)} - autoComplete="off" - /> - -
- -
diff --git a/src/components/AddList.jsx b/src/components/AddList.jsx new file mode 100644 index 0000000..83dbbc0 --- /dev/null +++ b/src/components/AddList.jsx @@ -0,0 +1,11 @@ +import React from 'react' + +const AddList = () => { + return ( +
+ +
+ ) +} + +export default AddList diff --git a/src/components/AddTask.jsx b/src/components/AddTask.jsx new file mode 100644 index 0000000..494991f --- /dev/null +++ b/src/components/AddTask.jsx @@ -0,0 +1,105 @@ +import React, {useState} from 'react' + +const AddTask = (props) => { + + + + const validateInput = (e, id = 0 ) => { + e.preventDefault() + + props.setMessageInvalidText('') + + if (!props.text.trim()) { + props.setMessageInvalidText('Text empty, please send a new task') + return + } + + props.setTasks([...props.tasks, + { + text: props.text, + id: props.counterInputs + } + ]) + + props.setCounterInputs(props.counterInputs + 1) + + props.setFormEditInput('') + + e.target.reset() + + persistTasks([...props.tasks, + { + text: props.text, + id: props.counterInputs + } + ]) + + persistCounter() + //props.setText('') + } + + const persistTasks = (modificatedTasks) => { + localStorage.setItem('tasks', JSON.stringify(modificatedTasks)) + } + + const persistCounter = () => { + localStorage.setItem('counter', JSON.stringify(props.counterInputs)) + } + + const restoreTasks = () => { + let tasksCache = localStorage.getItem('tasks') + + tasksCache = JSON.parse(tasksCache) + + props.setTasks(tasksCache) + + } + + const restoreCounter = () => { + let counterInputCache = localStorage.getItem('counter') + + counterInputCache = JSON.parse(counterInputCache) + + props.setCounterInputs(counterInputCache + 1) + } + + const checkCache = () => { + if (localStorage.getItem('tasks')) { + restoreTasks() + } + + if (localStorage.getItem('counter')) { + restoreCounter() + } + return + } + + window.onload = () => { + checkCache() + } + + return ( + <> +
+

{props.messageInvalidText}

+
+ props.setText(e.target.value)} + autoComplete="off" + /> + +
+ +
+ + ) +} + +export default AddTask diff --git a/src/components/Header.jsx b/src/components/Header.jsx new file mode 100644 index 0000000..199fe8f --- /dev/null +++ b/src/components/Header.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const Header = () => { + return ( +

Noti.io

+ ) +} + +export default Header diff --git a/src/components/States.jsx.txt b/src/components/States.jsx.txt new file mode 100644 index 0000000..6e00ddb --- /dev/null +++ b/src/components/States.jsx.txt @@ -0,0 +1,26 @@ +import React, {useState} from 'react' + +export function States() { + + const [messageInvalidText, setMessageInvalidText] = useState('') + + const [tasks, setTasks] = useState([{ + text: 'Test Task', + id: 616 + }]) + + const [formEditInput, setFormEditInput] = useState('') + + const [text, setText] = useState('') + + return ( + <> + { + const [messageInvalidText, setMessageInvalidText] = useState('') + + } + + ) +} + +export default States diff --git a/src/components/TaskList.jsx b/src/components/TaskList.jsx new file mode 100644 index 0000000..e875b6e --- /dev/null +++ b/src/components/TaskList.jsx @@ -0,0 +1,94 @@ +import React, {useState} from 'react' + +const TaskList = (props) => { + + const persistTasks = (modificatedTasks) => { + localStorage.setItem('tasks', JSON.stringify(modificatedTasks)) + } + + const deleteInput = (id) => { + const deleted_task = props.tasks.filter(task => task.id !== id) + + props.setTasks(deleted_task) + persistTasks(deleted_task) + + } + + const modifyInput = (id) => { + props.setFormEditInput([true, id]) + } + + const modifyInputTwo = (e) => { + + e.preventDefault() + + if(!props.text.trim()) { + props.setFormEditInput('') + return + } + + const taskID = props.tasks.findIndex(task => task.id === props.formEditInput[1]) + + props.tasks[taskID].text = props.text + + props.setTasks(props.tasks) + props.setText('') + props.setFormEditInput('') + + persistTasks() + + } + + + + return ( + <> +
+
+ { + props.tasks.map (task => ( +
+
+
+

{ task.text }

+ ({task.id}) +
+
+ + +
+
+ +
+ + { props.formEditInput[0] && task.id === props.formEditInput[1] ? + +
+ props.setText(e.target.value) } + className="input-edit-task" + autoFocus + autoComplete="off" + /> + +
+ + : <> + } +
+
+ )) + } +
+
+ + ) +} + +export default TaskList