Tell us what’s happening:
The last test is not passing even though it behaves as expected when I try it manually. At least I think so. If there’s anything I’m missing please help me out.
Thanks.
23 - When you click the #delete-bookmark-button, you should delete the bookmark corresponding to the selected radio button and appropriate category from the local storage and update the displayed bookmark list.
Your code so far
/* file: script.js */
const mainSection = document.getElementById("main-section");
const categorySelector = document.getElementById("category-dropdown");
const viewCategoryBtn = document.getElementById("view-category-button");
const addBookmarkBtn = document.getElementById("add-bookmark-button");
//Add Bookmark form section
const formHeading = document.querySelector(".category-name");
const formSection = document.getElementById("form-section");
const newName = document.getElementById("name");
const newUrl = document.getElementById("url");
const goBackFormBtn = document.getElementById("close-form-button");
const addBookmarkFormBtn = document.getElementById("add-bookmark-button-form");
//bookmark list (view category) section
const bookmarkListSection = document.getElementById("bookmark-list-section");
const categoryList = document.getElementById("category-list");
const goBackListBtn = document.getElementById("close-list-button");
const deleteBookmarkBtn = document.getElementById("delete-bookmark-button");
//adding bookmarks to localStorage
const setBookmarks = () => {
let bookmarks = getBookmarks();
const bookmark = {};
bookmark.category = categorySelector.value;
bookmark.name = newName.value;
bookmark.url = newUrl.value;
bookmarks.push(bookmark);
localStorage.setItem("bookmarks", JSON.stringify(bookmarks));
}
//get bookmarks from localStorage
const getBookmarks = () => {
try{
let bookmarkArr = JSON.parse(localStorage.getItem("bookmarks"));
let validArr;
bookmarkArr.forEach((bookmarkObj) => {
let hasName = Object.hasOwn(bookmarkObj,"name");
let hasCategory = Object.hasOwn(bookmarkObj,"category");
let hasUrl = Object.hasOwn(bookmarkObj,"url");
if (hasName && hasCategory && hasUrl) {
validArr = true;
} else {
validArr = false;
}
});
return validArr ? bookmarkArr : [];
}catch(error){return []}
}
const updateHtml = () => {
const category = categorySelector.value;
formHeading.innerText = category;
const bookmarksArr = getBookmarks();
const condition = bookmarksArr.some(obj => obj.category === category);
categoryList.innerHTML = "";
if (!condition) {
categoryList.innerHTML = `<p>No Bookmarks Found</p>`;
return;
}
bookmarksArr.forEach((obj) => {
if (obj.category === category) {
categoryList.innerHTML += `<input type="radio" id="${obj.name}" value=${obj.name} name="${category}"/>
<label for="${obj.name}"><a href="${obj.url}">${obj.name}</a></label>`
}
})
}
//display or close form
const displayOrCloseForm = () => {
formSection.classList.toggle("hidden");
mainSection.classList.toggle("hidden");
formHeading.innerText = categorySelector.value;
}
//display of hide "view Category"
const displayOrHideCategory = () => {
bookmarkListSection.classList.toggle("hidden");
mainSection.classList.toggle("hidden");
}
//delete selected bookmark
const deleteBookmark = () => {
let category = categorySelector.value;
let bookmarkArr = getBookmarks();
let radioBtns = document.getElementsByName(category);
for (let i = 0; i < radioBtns.length; i++) {
if (radioBtns[i].checked) {
let newBookmarkArr = bookmarkArr.filter(obj => obj.name !== radioBtns[i].value);
console.log(newBookmarkArr);
localStorage.setItem("bookmarks", JSON.stringify(newBookmarkArr));
updateHtml();
return;
}
}
}
addBookmarkBtn.addEventListener("click", displayOrCloseForm);
goBackFormBtn.addEventListener("click", displayOrCloseForm);
addBookmarkFormBtn.addEventListener("click", () => {
displayOrCloseForm();
setBookmarks();
newName.value = "";
newUrl.value = "";
});
viewCategoryBtn.addEventListener("click", () => {
displayOrHideCategory();
updateHtml();
});
goBackListBtn.addEventListener("click", displayOrHideCategory);
deleteBookmarkBtn.addEventListener("click", deleteBookmark);
//console.log(getBookmarks());
<!-- file: index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=0.0">
<title>Bookmark Manager</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<main>
<section id="main-section">
<h1>Bookmark Manager</h1>
<div id="dropdown">
<label for="category-dropdown">Select a category:</label>
<select id="category-dropdown" name="options">
<option value="news" selected>News</option>
<option value="entertainment">Entertainment</option>
<option value="work">Work</option>
<option value="miscellaneous">Miscellaneous</option>
</select>
</div>
<div id="buttons">
<button type="button" id="view-category-button">View Category</button>
<button type="button" id="add-bookmark-button">Add Bookmark</button>
</div>
</section>
<section id="form-section" class="hidden">
<form>
<h2 class="category-name"></h2>
<div>
<label for="name">Name:</label>
<input type="text" id="name">
</div>
<div>
<label for="url">URL:</label>
<input type="text" id="url">
</div>
<div>
<button type="button" id="close-form-button">Go Back</button>
<button type="button" id="add-bookmark-button-form">Add Bookmark</button>
</div>
</form>
</section>
<section id="bookmark-list-section" class="hidden">
<h2 class="category-name"></h2>
<div id="category-list">
</div>
<div>
<button type="button" id="close-list-button">Go Back</button>
<button type="button" id="delete-bookmark-button">Delete Bookmark</button>
</div>
</section>
</main>
<script src="script.js"></script>
</body>
</html>
/* file: styles.css */
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
Challenge Information:
Build a Bookmark Manager App - Build a Bookmark Manager App