Skip to content

Instantly share code, notes, and snippets.

@zafar-saleem
Created November 13, 2018 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zafar-saleem/8e5c669aa9bfc269a3d2d142bc1ec320 to your computer and use it in GitHub Desktop.
Save zafar-saleem/8e5c669aa9bfc269a3d2d142bc1ec320 to your computer and use it in GitHub Desktop.
class Todo {
constructor() {
let self = this;
this.list = document.querySelector('.list-items');
this.render();
document.querySelector('.btn-add-item').addEventListener('click', this.create.bind(this));
document.querySelector('.btn-update').addEventListener('click', this.update.bind(this));
document.addEventListener('click', event => {
if (event.target.classList.contains('btn-delete')) {
self.remove(event);
}
if (event.target.classList.contains('btn-edit')) {
self.renderEditForm(event);
}
// step to add event listener to complete button
if (event.target.classList.contains('btn-complete')) {
self.setTaskComplete(event);
}
});
}
renderEditForm(event) {
let id = event.target.getAttribute('data-id');
document.querySelector('.edit-popup').classList.remove('hide');
document.querySelector('.edit-popup').classList.add('show');
document.querySelector('.btn-update').setAttribute('data-id', id);
mockData.forEach(item => {
if (item.id === id) {
document.querySelector('.edit-item').value = item.title;
}
});
}
render() {
this.list.innerHTML = '';
mockData.forEach(item => {
this.createDomElements(item.id);
this.li.insertAdjacentHTML('afterbegin', item.title);
if (item.done) {
this.li.classList.add('done');
}
this.list.appendChild(this.li);
});
}
createDomElements(id) {
this.li = document.createElement('li');
this.edit = document.createElement('button');
this.delete = document.createElement('button');
this.complete = document.createElement('button');
this.edit.classList.add('btn-edit');
this.delete.classList.add('btn-delete');
this.complete.classList.add('btn-complete');
this.delete.setAttribute('data-id', id);
this.edit.setAttribute('data-id', id);
this.complete.setAttribute('data-id', id);
this.edit.innerHTML = 'Edit';
this.delete.innerHTML = 'Delete';
this.complete.innerHTML = 'Complete';
this.li.appendChild(this.delete);
this.li.appendChild(this.edit);
this.li.appendChild(this.complete);
}
create() {
let todoItem = document.querySelector('.item').value;
let newItem = {
id: Date.now().toString(),
title: todoItem,
done: false,
date: new Date()
};
mockData.push(newItem);
document.querySelector('.item').value = '';
this.render();
}
remove(event) {
let id = event.target.getAttribute('data-id');
mockData = mockData.filter(item => {
if (item.id !== id) {
return item;
}
});
this.render();
}
update(event) {
let id = event.target.getAttribute('data-id');
let itemTobeUpdated = document.querySelector('.edit-item').value;
mockData = mockData.map(item => {
if (item.id === id) {
item['title'] = itemTobeUpdated;
}
return item;
});
document.querySelector('.edit-popup').classList.remove('show');
document.querySelector('.edit-popup').classList.add('hide');
this.render();
}
setTaskComplete(event) {
let id = event.target.getAttribute('data-id');
mockData = mockData.map(item => {
if (item.id === id) {
item['done'] = true;
}
return item;
});
this.render();
}
}
export default Todo;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment