Professional-JavaScript-Course
Professional-JavaScript-Course copied to clipboard
How do we implement the bookmark click function like the one in React and Next JS Course?
I implemented the bookmark clickhandler in rmtdev project and it works. But now I want it to work like the rmtdev project in React and Next JS course? How shoud we do that? I tried different solution and none worked like expected.
This code will have problem. When we click the bookmark icon, it will show like this without the "#" in the url.
.
jobListSearchEl.addEventListener("click", (event) => {
if (event.target.classList.contains("job-item__bookmark-icon")) {
bookmarkClickHandler(event);
}else{
clickHandler(event)
}
});
This is my bookmarkclickhandler and it works.
import {
state,
bookmarksBtnEl,
jobDetailsEl,
jobListBookmarksEl,
jobListSearchEl,
} from "../common.js";
import renderJobList from "./JobList.js";
const bookmarkClickHandler = (event, bookmarkTag = "item") => {
if (!event.target.className.includes("bookmark")) {
return;
}
if (state.bookmarkJobItems.some((jobItem) => jobItem.id === state.activeJobItem.id)) {
state.bookmarkJobItems = state.bookmarkJobItems.filter((jobItem) => jobItem.id !== state.activeJobItem.id);
} else {
state.bookmarkJobItems.push(state.activeJobItem);
}
localStorage.setItem("bookmarkJobItems", JSON.stringify(state.bookmarkJobItems));
document.querySelector(`.job-${bookmarkTag}__bookmark-icon`).classList.toggle(`job-${bookmarkTag}__bookmark-icon--bookmarked`);
renderJobList();
renderJobList("bookmarks");
};
const mouseEnterHandler = () => {
bookmarksBtnEl.classList.add("bookmarks-btn--active");
jobListBookmarksEl.classList.add("job-list--visible");
renderJobList("bookmarks");
};
const mouseLeaveHandler = () => {
bookmarksBtnEl.classList.remove("bookmarks-btn--active");
jobListBookmarksEl.classList.remove("job-list--visible");
};
bookmarksBtnEl.addEventListener("mouseenter", mouseEnterHandler);
jobListBookmarksEl.addEventListener("mouseleave", mouseLeaveHandler);
jobListBookmarksEl.addEventListener("click", (event) => {
bookmarkClickHandler(event);
});
jobListSearchEl.addEventListener("click", (event) => {
bookmarkClickHandler(event);
});
jobDetailsEl.addEventListener("click", (event) => {
bookmarkClickHandler(event, "info");
});
export default bookmarkClickHandler;