'How to add local storage to keep lists on browser refresh
I am trying to do local storage for a to-do app and I am not sure how to do it, is it possible for someone to show me how to do it for this app?
Below I have the full code for the HTML and JS so that you can see what is happening and to assist with the code I have.
I made a code snippet so you can see how the app functions.
const STORAGE_KEY = "task-list-storage-key";
/************************************
* creates objct of elements needed *
************************************/
const elements = {
form: document.querySelector("#new-task-form"),
input: document.querySelector("#new-task-input"),
list: document.querySelector("#tasks"),
cal: document.querySelector("#calendar")
}
/****************************
* Generates an ID for task *
****************************/
const createId = () => `${Math.floor(Math.random() * 10000)}-${new Date().getTime()}`
/**********************************************
* function that creates the HTML elements *
**********************************************/
const createTask = () => {
const id = createId()
const task = elements.input.value;
const date = elements.cal.value;
if (!task && !date) return alert("Please fill in task and select date");
if (!task) return alert("Please fill in task");
if (!date) return alert("Please select date");
const tasks = document.createElement("div");
tasks.innerHTML = `
<button class = "sort">Sort</button>
<div class="task" data-id = "${id}">
<div class="content">
<input type ="checkbox" class="tick">
<input type ="text" class = "text" id = "text" value="${task}" readonly>
<label class = "due-date" for ="text">${date}</label>
<input type ="date" class = "date" id = "date">
</div>
<div class = "actions">
<button class="edit" data-id="${id}">Edit</button>
<button class="delete" data-id="${id}">Delete</button>
</div>
</div>
`
elements.list.appendChild(tasks)
markOfdddueDate()
return tasks
}
/********************************************
* Marks due date as complete with checkbox *
********************************************/
function markOfdddueDate() {
let allCheckboxes = document.querySelectorAll('.tick')
allCheckboxes.forEach(checkbox => {
checkbox.addEventListener('change', (e) => {
let parentElem = e.target.parentElement
console.log(e.target.parentElement)
if (e.target.checked) {
parentElem.style.textDecoration = "line-through"
} else {
parentElem.style.textDecoration = "none"
}
});
});
}
/**************************************************************
* Event that listens for the edit,save and delete buttons *
**************************************************************/
elements.list.addEventListener('click', event => {
const {
target
} = event;
const {
id
} = target.dataset;
const task = id ? document.querySelector(`[data-id="${id}"]`) : null;
const type = {
edit: event.target.classList.contains('edit'),
delete: event.target.classList.contains('delete')
}
const isFromSaveLabel = target.innerText.toLowerCase() === 'save'
//Checking to see if buttons are pressed//
if (task && type.edit && isFromSaveLabel) {
const text = task.querySelector('.text')
target.innerText = 'Edit'
text.setAttribute('readonly', "true")
return
};
if (task && type.edit) {
const text = task.querySelector('.text')
target.innerText = 'save'
text.removeAttribute('readonly')
text.focus()
return
};
if (task && type.delete) {
const textlist = task.querySelector('.task')
textlist.appendChild.remove()
return
}
});
/*******************************************************************
* Submits the HTML elements to have the lists submited and created*
*******************************************************************/
const submitHandler = (event) => {
event.preventDefault();
createTask();
}
elements.form.addEventListener("submit", submitHandler);
/*********************************
* Storing tasks in local storage*
*********************************/
function getStoredtask() {
const storedkey = localStorage.getItem(STORAGE_KEY);
if (storedkey) {
task = JSON.parse(storedkey);
createTask()
}
}
function Storingtasks() {
localStorage.setItem(STORAGE_KEY, JSON.stringify(createTask()))
}
getStoredtask()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-do App</title>
<script src="../js/tasklist.js" defer></script>
<script src="../js/dateTime.js" defer></script>
<link rel="stylesheet" href="css/stylesheet.css" />
</head>
<body>
<header>
<div class="header">
<h1>To-Do List</h1>
<div class="time">
<div class="dateTime"></div>
<div class="day"></div>
</div>
</div>
<form id="new-task-form">
<div class="add-task">
<input type="text" name="new-task-input" id="new-task-input" placeholder="What do you have planned?" />
<input type="date" id="calendar">
</div>
<input type="submit" id="new-task-submit" value="Add task" />
</form>
</header>
<main>
<section class="task-list">
<h2>Tasks</h2>
<div id="tasks">
<!--<button class = "sort">Sort</button>
<div class="task">
<div class="content">
<input
type="text"
class="text"
value="A new task"
readonly>
</div>
<div class="actions">
<button class="edit">Edit</button>
<button class="delete">Delete</button>
</div>
</div>-->
</div>
</section>
</main>
</body>
</html>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
