프론트엔드로 가는 길/portfolio 제작 여정기 👩🏻‍💻

03 BookBucket - 내가 읽지 않을 책을 삭제하자!📚[2.21]

woody-j 2023. 2. 22. 15:10

3. 읽지 않을 책 삭제하기

1) 삭제 버튼 눌렸을

(1) 플러스 버튼 색 변경되고, 체크 버튼 생성

 


⓵ minusBtn state 생성

 let [minusBtn, setMinusBtn] = useState(false);

 

 

⓶ minusBtn 클릭시 상태값 true로 변경

  const deleteBefore = () => {
    setMinusBtn(!minusBtn);
  };
 

⓷ minusBtn이 true일 때 circlePlus class에 on을 부착하고, faSquareCheck -> faSquareMinus 아이콘 변경

// 왼쪽 +버튼
<FontAwesomeIcon
              icon={plusBtn ? faCircleCheck : faCirclePlus}
              className={`squareMinus cursor ${minusBtn ? "on" : ""}`}
              onClick={openInput}
            />​
// 오른쪽 -버튼
<FontAwesomeIcon
              icon={minusBtn ? faSquareCheck : faSquareMinus}
              className={`squareMinus cursor ${plusBtn ? "on" : ""}`}
              onClick={deleteBefore}
            />


(2) 포스트 잇에 드롭쉐도우 효과 생김

 ⓵ minusBtn 상태값 true일 때 img2 class에 on 붙이기

  <div
                  className={`bucket cursor img2 center ${
                    minusBtn ? "on" : ""
                  }
                >

[main.css]

 .img2.on {
        filter: drop-shadow(3px 3px 5px $subG);
      }


2) 삭제할 포스트 클릭

(1) 선택한 포스트  투명해짐

⓵ 선택한 포스트 잇 id 값 찾기

 const isOn = (book) => {
    if (minusBtn) {
      let copy = [...listBook];
      const mathId = copy.find((el) => el.id === book);
    }
  };

⓶ 선택한 id값 전달하기 

    <div
                  className={`bucket cursor img2 center ${
                    minusBtn ? "on" : ""
                  } 
                  onClick={() => {
                  //book.id
                    isOn(book.id);
                  }}
                >

선택한 포스트 잇  isOn 값 false로 만들고 listBook 상태값 변경

  const isOn = (book) => {
    if (minusBtn) {
      let copy = [...listBook];
      const mathId = copy.find((el) => el.id === book);
      mathId.isOn = !mathId.isOn;
      setListBook(copy);
    }
  };

⓸ isOn값이 false일때 img2 class에 oc 부착

.center.oc {
        opacity: 50%;
      }
 <div
                  className={`bucket cursor img2 center ${
                    minusBtn ? "on" : ""
                    //oc 부착
                  } ${book.isOn === false ? "oc" : ""}`}
                  onClick={() => {
                    isOn(book.id);
                  }}
                >

 (2) 다시 클릭하면 돌아옴

 mathId.isOn = !mathId.isOn;

클릭할 때마다 isOn값이 변경


3) 삭제 체크 버튼 클릭


 
(1) 선택 것이 있다면 "정말 삭제하시겠습니까?" alert창 팝업
   

const deleteBook = () => {
    if (minusBtn) {
      let copy = [...listBook];
      let saveContent = copy.filter((el) => el.isOn === true);
        setListBook(saveContent);
        alert("정말 삭제하시겠습니까?!");
      }
    }
  };


(2)
 선택 것이 없다면 그냥 main 화면으로 돌아가기

  const deleteBook = () => {
    if (minusBtn) {
      let copy = [...listBook];
      let saveContent = copy.filter((el) => el.isOn === true);
      let deleteContent = copy.filter((el) => el.isOn === false);
      //   선택한 것이 없을 때 alert창을 안띄우기
      if (deleteContent.length === 0) {
        return;
      } else {
        setListBook(saveContent);
        alert("정말 삭제하시겠습니까?!");
      }
    }
  };