1. 북마크 리팩토링
- 북마크 버튼의 핸들러 함수를 따로 함수로 빼고, 함수명도 좀더 가독성 있게 바꿈
- 클릭 이벤트는 공통 함수 파일로 뺌
- 👻북마크 페이지에서 로컬 스로티리지에 저장된 데이터를 뿌릴때 순서가 랜덤으로 됨ㅜㅜ
👉객체로 바꾼후에 push로 붙여서 저장
// 전
bookmarkButton.addEventListener("click", () => {
if (window.localStorage.getItem(data.title)) {
window.localStorage.removeItem(data.title);
alert("북마크에서 삭제되었습니다.");
bookmarkButton.innerHTML = "Add bookmark";
const event = new CustomEvent("bookmarkUpdate");
window.dispatchEvent(event);
} else {
window.localStorage.setItem(data.title, JSON.stringify(data));
alert("북마크에 추가되었습니다.");
bookmarkButton.innerHTML = "Remove bookmark";
}
modalClose();
});
export function getBookmark() {
if (!localStorage.key(0)) {
alert("저장된 북마크가 없습니다");
return;
}
const bookmarkData = Array.from({ length: localStorage.length }, (_, i) => {
const key = localStorage.key(i);
return JSON.parse(localStorage.getItem(key));
});
document.querySelector(".section__list").innerHTML = "";
getMovieDataElement(bookmarkData);
if (!bookmarkBtn.classList.contains("header__bookmark--active")) {
bookmarkBtn.classList.add("header__bookmark--active");
} else {
bookmarkBtn.classList.remove("header__bookmark--active");
document.querySelector(".section__list").innerHTML = "";
getMovieData();
}
}
// 후
function getBookmarks() {
return JSON.parse(localStorage.getItem("movies")) || [];
}
export function isBookmarked(movieId) {
const existingData = getBookmarks();
return existingData.some((movie) => movie.id === movieId);
}
function addBookmark(movieData) {
const bookmarks = getBookmarks();
bookmarks.push(movieData);
localStorage.setItem("movies", JSON.stringify(bookmarks));
alert("북마크에 추가되었습니다.");
}
function removeBookmark(movieId) {
let bookmarks = getBookmarks();
bookmarks = bookmarks.filter((movie) => movie.id !== movieId);
localStorage.setItem("movies", JSON.stringify(bookmarks));
alert("북마크에서 삭제되었습니다.");
}
export function handleBookmarkToggle(data) {
const bookmarkToggleBtn = document.querySelector(".modal_btn");
const isBookmarkedMovie = isBookmarked(data.id);
if (isBookmarkedMovie) {
removeBookmark(data.id);
bookmarkToggleBtn.innerHTML = "MARK";
} else {
addBookmark(data);
bookmarkToggleBtn.innerHTML = "UNMARK";
}
closeModal();
}
export function displayBookmarked() {
if (!localStorage.key(0)) {
alert("저장된 북마크가 없습니다");
return;
}
const sectionList = document.querySelector(".section__list");
const bookmarkData = getBookmarks();
sectionList.innerHTML = "";
getMovieDataElement(bookmarkData);
}
2. 검색 리팩토링
마찬가지로 핸들러 함수를 따로 함수로 만들고, if문으로 바꿔서 가독성을 높임
//전
searchInput.addEventListener(
"keyup",
(e) => e.key === "Enter" && handleSearch
);
//후
function onEnterKey(e) {
if (e.key === "Enter") {
handleSearch();
}
}
searchInput.addEventListener("keyup", onEnterKey);
'부트캠프 프로젝트(完) > 영화 검색 사이트(完)' 카테고리의 다른 글
[영화 검색 사이트 프로젝트]회고록 (0) | 2024.10.23 |
---|---|
[영화 검색 사이트 프로젝트] 4. 대소문자 구분x , 디바운싱, 리팩토링1 (0) | 2024.10.21 |
[영화 검색 사이트 프로젝트] 3. 파일분리, 북마크 구현 (0) | 2024.10.18 |
[영화 검색 사이트 프로젝트] 2. 검색 구현 (0) | 2024.10.17 |
[영화 검색 사이트 프로젝트] 1. api연동 및 데이터 뿌리기 (0) | 2024.10.16 |