...







✖를 클릭하는 거니까 DeleteBox 에서 onClick handleDeleteClick 만들어줌
⭐무조건 ( ) => 해줘야함

여기 같은 경우는 이미 tagsSlice 에서 deleteTags 만들어줬었음❗1️⃣ filter 역할 : payload와 같은 id를 가진 태그를 삭제❌
( state.tagsList 에서 id가 payload와 같지 않은( !== ) 태그만 남김 )
2️⃣ id !== payload → id가 payload와 다르면( true ) 유지, 같으면( false ) 제거
3️⃣ { payload } 구조분해할당 하는 이유
👉 action.payload 에서 payload만 꺼내서 사용하기 위해
👉 deleteTags: (state, action) => { action.payload } 대신
{ payload }로 바로 사용 가능하기 때문

mainNotes 에서 tags 에 있는 게 있으면 지우는 것
여기서 처리해줘야함🔨
mainNotes 안에 있는 데이터 중에서 수정을 지워줘야하는 것✔
여기있는 데이터 변경해줘야함🔄
태그 두개 추가했음
같은 거 다 없애줘야함
tags 2개 중에서 new 라는 애만 지워줄거임
여기까진 원래 쓰던 Edit을 위한 로직을 쓴거고
✅ 여기선 Delete을 위한 로직을 써야함
원래 있던 tags의 데이터를 가져와야함❗
여기 두개에서 note 한번씩 순회하면서 coding 이라는 태그를 지울건데
그럴려면 이걸 다 ( 얘네들은 변경 안할거니까 ) 전체를 다 ...note 나열하고
여기서 tags만 지울것
coding 이라는 애를 찾아서 찾았으면






태그를 추가할 때나 삭제할 때나 이부분은 tagsSlice로 이동하기🌫🐱🏍
태그를 첨에 추가할 때 이미 같은 태그의 이름( tag )이 있는지 확인 하는 부분🔍
Work 태그 이름이 이미 있는 상태에서 work 라고 쳤더니
이런식으로 나오는 걸 볼 수 있음( 스타일링 안 해줘서 그럼 )👀
이렇게 스타일까지 적용돼서 잘 나오는 것을 볼 수 있음👀
새로운 태그 이름이 추가되면 새로운 태그가 등록되었습니다. 뜨게 해주기
✖눌러서 삭제했으면 태그가 삭제되었습니다. 뜨게 해주기



노트가 있으면 이렇게
없으면 이렇게 노트가 없습니다. 해줘야함
mainNotes의 Length가 0 이면 노트가 없는 상태인거고 아니면 있는 상태인거임❗
전역 스타일 styles.jsx 에서 만들어놓은 EmptyMsgBox 가져와서
mainNotes.length가 0 이면 노트가 없습니다. 띄워줄 것
노트가 없으니까 노트가 없습니다. 라고 잘 나오는 걸 볼 수 있음👀// 노트가 없습니다. 이부분
export const EmptyMsgBox = styled.div`
text-align: center;
font-size: 1.4rem;
font-weight: 500;
`;

// 메인을 감싸는 부분
export const Container = styled.div`
padding: 25px 0px 25px 25px;
// 너비가 650px 이하로 화면이 줄어들 때 적용됨
@media (max-width: 650px) {
padding: 20px;
}
`;
이렇게 해주고 다시 AllNotes로 돌아가기🌫🐱🏍
이렇게 구성되어있음
TopBox 스타일 컴포넌트 만들어줌
TopBox 안에 input & button이 들어갈 것👌



타이핑 한 값을 이 컴포넌트에서 기억하길 원하니까
🧠 useState로 state 만들기 💡

전역 스타일 styles.jsx 에 작성해둔 ButtonOutline 가져오기
정렬 버튼 누르면 정렬 모달창을 보여주는 부분임🤓
modal에 있는 viewFilterModal 이걸 바꿔주기 위해서
이미 modalSlice 에서 만들어놨었음👍 toggleFiltersModal을 이용하면 됨🙆♀️


여기 보면 notesList에 이미 두개가 있음 ( 이게 첨부터 있는 더미데이터 )
더미데이터 만들어주기 위해 src 폴더 안에 notesData.js 파일 만들어주기

notes 이걸
첨에 mainNotes에 들어있게 해야하는데
notesListSlice로 가보면 initialState에 다 빈 배열로 되어있음
만들고 있는 거에서 이거랑 위에랑 똑같은 것
두 개의 더미데이터 넣어주려면 mainNotes 여기에 넣어주면 됨✔


👇const TopBox = styled.div`
margin-right: 25px;
.notes__filter-btn {
display: flex;
justify-content: flex-end;
}
`;

// input을 감싸고있는 div
const InputBox = styled.div`
flex: 1;
height: 33px;
display: flex;
align-items: center;
box-shadow: 0px 1px 2px 1px rgba(0, 0, 0, 0.25);
border-radius: 5px;
transition: 300ms box-shadow ease-in;
margin-bottom: 16px;
&:hover {
box-shadow: 0px 2px 3px 1px rgba(0, 0, 0, 0.4);
}
// input 스타일
input {
// 너비 높이 꽉채우기
width: 100%; height: 100%;
padding: 0px 10px;
border: none;
border-radius: 5px;
// 노트의 제목을 입력해주세요.
&::placeholder {
color: rgba(0, 0, 0, 0.3); // 흐리게
}
}
`;
box-shadow 까지 하면 이렇게 됨👌
✨export const ButtonOutline = styled.button`
padding: 6px 20px;
border-radius: 5px;
cursor: pointer;
background-color: rgba(0, 0, 0, 0.05);
box-shadow: 0px 2px 1px 1px rgba(0, 0, 0, 0.2);
transition: 250ms background-color ease-in-out;
// 줄 바꿈 없이 한 줄로 표시
white-space: nowrap;
span {
font-weight: 500;
font-size: 1rem;
margin-left: 5px;
}
border:none;
&:hover {
background-color: rgba(0, 0, 0, 0.1);
}
@media (max-width: 600px) {
padding: 6px 12px;
}
`;
호버 했을 때 버튼 배경색 달라짐
✨
TopBox는 input & 정렬 Btn 부분이고, Box 영역이 이부분임

조건 로직이 들어가야됨
이렇게 정렬 기능의 로직도 들어가야함🤓

AllNotes.jsx로 와서 이렇게 넣어주기
여기에 있는 UI 부분이 이런식으로 나오게 해야함✔
이렇게 해주고



지금 현재 이렇게 나옴
이걸 바꿔줘야 NoteCard가 바뀌는 것
getAllNotes 에서 note 객체 데이터랑 type이 props로 내려가고 있으니까
이렇게 받아와야함
그리고 여기 UI는 이거 하나가 될 수 있게 여기다 만들어줘야함 🆗


이렇게 date가 나오는 걸 볼 수 있음👀

Add Tag 버튼 누르고 Exercise & Quotes 태그 추가하고 저장하면
두 개가 추가돼서 총 3개의 태그가 됨
tags 얘를 보여줘야하는데 배열이니까 당연히 map으로 순회해야함<TagsBox>
{
tags?.map(({ tag, id }) => (
<span key={id}>{tag}></span>
))
}
</TagsBox>
exercise랑 coding 태그가 나온 걸 볼 수 있음👀
마지막으로 TopBox 부분은 이렇게 해줘야함
이렇게 잘 나오는 걸 볼 수 있음👀
priority는 HIGH 이부분임
Coding 에도 있는데 얘를 만약에 Archive로 보낸다고 하면
Archive 에선 핀이 없음, 얘를 삭제 아이콘을 클릭하면
Trash로 이동하는데 여기에도 핀이 없음

이부분은 다시 이렇게 돌려놓고
전역 스타일인 styles.jsx 안에 만들어놓은 NotesIconBox를 가져옴
핀 아이콘이 나오는 걸 볼 수 있음👀const Card = styled.div`
width: clamp(250px, 100%, 265px);
height: 220px;
border-radius: 8px;
box-shadow: 0px 1.5px 3px 0px rgba(0, 0, 0, 0.5);
padding: 20px;
margin: 0 35px 35px 0;
background-color: white;
transition: 250ms box-shadow ease-in-out, 300ms transform ease-out;
&:hover {
transform: scale(1.05); // 아주 조금만 크게 해주기
box-shadow: 0px 4px 6px 0px rgba(0, 0, 0, 0.6);
}
@media (max-width: 600px) {
margin-right: 0px;
}
`;
height 주면 이렇게 됨
모서리 둥글게( border-radius ), box-shadow로 이렇게 그림자 생기고
호버 했을 땐 이런식으로 됨const ContentBox = styled.div`
width: 100%; height: 65px;
margin: 15px 0 10px;
font-size: 14px;
cursor: pointer;
overflow-y: hidden;
// 이미지도 올 수 있으니까
img {
width: 80px; height: 65px;
border-radius: 5px;
}
`;

const TagsBox = styled.div`
height: 25px;
margin-bottom: 15px;
overflow: scroll;
span {
display: inline;
background-color: rgba(0, 0, 0, 0.07);
color: rgba(0, 0, 0, 0.7);
padding: 2px 5px;
border-radius: 5px;
font-size: 11px;
font-weight: 500;
margin-right: 8px;
}
&::-webkit-scrollbar {
display: none;
}
`;
overflow: scroll➡지금은 태그가 한개 뿐이어서 없어도 무관하겠지만

const TopBox = styled.div`
display: flex;
justify-content: space-between;
// Note 1 tit ... 부분
.noteCard__title {
font-weight: 600;
font-size: 1.15rem;
cursor: pointer;
}
// high랑 핀 부분
.noteCard__top-opitons {
white-space: nowrap;
margin-left: 8px;
}
// high 부분
.noteCard__priority {
text-transform: uppercase; // 대문자로
font-size: 12px;
font-weight: 600;
margin-right: 10px;
}
// 핀 부분
.noteCard__pin {
svg {
font-size: 15px;
}
}
`;


const FooterBox = styled.div`
display: flex;
justify-content: space-between;
align-items: center;
.noteCard__date {
font-size: 12px;
font-weight: 500;
color: rgba(0, 0, 0, 0.6);
}
`;

✌...