Skip to content

Commit

Permalink
Merge pull request #3 from emiliazm/interactive-list
Browse files Browse the repository at this point in the history
Interactive list
  • Loading branch information
emiliazm committed Apr 29, 2022
2 parents 8669132 + 12125b8 commit 17c7503
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 3 deletions.
25 changes: 25 additions & 0 deletions src/methods.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
let tasks = [];
let lastId = localStorage.getItem('lastId') || 0;

export const getLastId = () => lastId;

export const setLastId = (id) => {
lastId = id;
localStorage.setItem('lastId', lastId);
};

export const loadTasks = () => {
tasks = JSON.parse(localStorage.getItem('tasks')) || [];
const sTasks = [...tasks];
const uTaskId = sTasks.sort((a, b) => b.id - a.id)[0]?.id || 0;
if (uTaskId > lastId) {
setLastId(uTaskId);
}
};

export const getTasks = () => tasks;
Expand All @@ -28,4 +41,16 @@ export const deleteTask = (taskId) => {
tasks[i].index = i + 1;
});
localStorage.setItem('tasks', JSON.stringify(tasks));
};

export const checkStatus = (taskId) => {
const task = tasks.find((e) => e.id === Number(taskId));
task.isCompleted = !task.isCompleted;
localStorage.setItem('tasks', JSON.stringify(tasks));
};

export const clearAllBtn = () => {
const cleared = tasks.filter((task) => !task.isCompleted);
tasks = cleared.map((task, i) => ({ ...task, index: i + 1 }));
localStorage.setItem('tasks', JSON.stringify(tasks));
};
5 changes: 5 additions & 0 deletions src/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,8 @@ li {
.list-items.erasing .dots {
display: none;
}

/* check status */
.completed {
text-decoration: line-through;
}
42 changes: 39 additions & 3 deletions src/ui.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {
getTasks, updateTask, deleteTask, loadTasks, addTask,
getTasks, updateTask, deleteTask, loadTasks,
addTask, checkStatus, getLastId, setLastId, clearAllBtn,
} from './methods.js';

// edit item
Expand Down Expand Up @@ -36,13 +37,40 @@ const uiRemoveTask = (e) => {
});
};

// status
const uiCheckStatus = (e) => {
const { taskid } = e.target.parentNode.dataset;
checkStatus(taskid);

const liElement = e.target.parentNode;
liElement.classList.toggle('completed', !liElement.classList.contains('completed'));
};

// Clear completed
const uiClearCompleted = () => {
const ulElement = document.querySelector('.check-list');
const liElements = ulElement.childNodes;
let i = 0;
while (i < liElements.length) {
const liElement = liElements[i];
const cbElement = liElement.querySelector('.check-box');
if (cbElement.checked) {
liElement.remove();
} else {
i += 1;
liElement.dataset.taskindex = i;
}
}
clearAllBtn();
};

// create item
const uiCreateTask = (task) => {
const tasks = getTasks();
tasks.sort((a, b) => a.index - b.index);
const ulList = document.querySelector('.check-list');
const insideUl = `
<input id="ck-${task.id}" type="checkbox" name="checkBox">
<input id="ck-${task.id}" class="check-box" type="checkbox" name="checkBox">
<label class="lb-task" id="lb-${task.id}" for="ta-${task.id}">${task.description}</label>
<textarea id="ta-${task.id}" class="ta-task" name="edit-task">${task.description}</textarea>
<span class="dots material-symbols-outlined">more_vert</span>
Expand All @@ -51,12 +79,18 @@ const uiCreateTask = (task) => {

const liToTasks = document.createElement('li');
liToTasks.setAttribute('class', 'list-items');
if (task.isCompleted) {
liToTasks.setAttribute('class', 'completed');
}
liToTasks.setAttribute('data-taskid', `${task.id}`);
liToTasks.setAttribute('data-taskindex', `${task.index}`);
liToTasks.innerHTML = insideUl;
liToTasks.querySelector('.lb-task').onclick = uiClickLabel;
liToTasks.querySelector('.ta-task').onblur = uiBlurTextArea;
liToTasks.querySelector('.trash').onclick = uiRemoveTask;
const cbElement = liToTasks.querySelector('.check-box');
cbElement.checked = task.isCompleted;
cbElement.onclick = uiCheckStatus;
ulList.appendChild(liToTasks);
};

Expand All @@ -71,7 +105,8 @@ const uiAdd = (e) => {
if (inputValue !== '') {
const tasks = getTasks();
const indexId = tasks.length + 1;
const id = tasks.length + 1;
const id = getLastId() + 1;
setLastId(id);
const task = {
description: inputValue,
isCompleted: false,
Expand All @@ -94,4 +129,5 @@ export default function setup() {
loadTasks();
displayTasks();
todoForm.addEventListener('submit', uiAdd);
document.querySelector('.btn').addEventListener('click', () => uiClearCompleted());
}

0 comments on commit 17c7503

Please sign in to comment.