
...



🧙♀️import styled from 'styled-components';
이부분을 감싸는 부분 하나 만들기


ItemsBox는 이부분 전체를 감싸는 녀석
🤷♀️ NavLink & Link의 차이점 ❓❓
👉 active인지 아닌지를 아는 기능이 있음
현재 / 이 경로에 있으면 isActive는 true고 없으면 false✔<NavLink
to={'/'}
className={({isActive}) =>
isActive ? 'active-item' : 'inactive-item';
}
>
</NavLink>






@media (max-width: 950px) {
transition: 350ms transform ease-in-out;




transform: ${({openMenu})
=> openMenu === "open" ? "translateX(0%)" : "translateX(-100%)"}

// 0.2초동안 변화 천천히 시작하고 끝남
// 0.25초동안 변화 천천히 시작하고 끝남
transition: 200ms visibility ease-in-out,
250ms background-color ease-in-out;
// 사이드바 열려있으면 normal로 아니면 hidden(숨김)
visibility: ${({openMenu})
=> openMenu === "open" ? "normal" : "hidden"};
background-color: ${({openMenu})
=> openMenu === "open" ? "rgba(0, 0, 0, 0.8)" : "rgba(0, 0, 0, 0)"};
cursor: pointer;



햄버거바 클릭하면
이렇게 사이드바가 잘 나오는 걸 확인할 수 있음👀


이렇게 해주고


🙋♀️이제 이 부분 하나씩 만들어줄 것❗
tags는 여기에 있음


객체 안엔 어떤 게 있냐면 tag엔 태그의 이름이랑 태그의 유니크한 id가 있음✔

사이드바에서 Coding 클릭하면 /tag/coding으로 이동하고
/tag/${tag(태그의 이름인 tag 넣어주기)}





이렇게 잘 된 걸 확인 할 수 있음👀



다시 Sidebar.jsx로 와서 { getStandardName(tag) } 해주면 됨
첫글자는 대문자, 나머지는 소문자로 잘 나오는 것을 확인할 수 있음👀
하드 코딩
현재는 이렇게 나옴
호버했을 때 이렇게 색상이 약간 다르게 되는 걸 볼 수 있음
이 모달이 나오는데
modal에 viewEditTagsModal 임
모달을 위해서 이미 만들어놓은 게 이부분
useDispatch 이용해서 dispatch 만들기
여기 payload엔 뭘 넣어줘야할까❓
여기에 action.payload 에서 받아오는 게 { type, view } 얘네를 넣어줘야함
type은 'add' | 'edit' 이 있었는데 여기선 'edit' 이니까 써주고
Edit Notes 클릭하면 이젠 true가 뜸👀







이렇게 다 잘 만들어진 것을 확인할 수 있음👀
그러기 위해 menuSlice 에서 이걸 이용하면 됨✔


이젠 사이드 바에서 원하는 거 클릭하면 사이드바가 없어지는 걸 확인 할 수 있음👀
우선 이걸 보여주기 위해서
App.jsx로 가서 TagsModal를 여기다 넣어주고 실행화면 보면 저렇게 되어있을 것


첨엔 없는데
TagsModal이 나오는 걸 볼 수 있음👀
여기에서도 사용되고
여기서도 사용되고 있음
이거의 type은 edit 이라고 넣어주면 됨




이거처럼 만들어보자❗

여기 보면 Edit | ADD Tags가 될 것✔
App.jsx 에서 type을 넣어줬었는데
Edit Tags 라고 잘 나오는 걸 볼 수 있음👀
이제 Edit Tags 옆에 있는 ✖ 이부분 해줄것


modal 에서 viewEditTagsModal을 false로 해주면 없어질것
modalSlice.js 에서 만들어놓은 toggleTagsModal 
onClick={() => dispatch(toggleTagsModal({ type, view: false }))}





이부분은 form 태그 아래 에다가 만들어주면됨
스타일 컴포넌트 만들어주기
👉 tagsList 다 가져와야함❗


<div className='editTags__tag'>
{getStandardName(tag)}
</div>

이런식으로 되어있어서 스타일링 하러 가자❗const Box = styled.div`
// 최소 250px, 최대 280px 사이에서 60% 값을 적용
width: clamp(250px 60%, 280px);
// 화면 높이의 85%까지 최대 높이 제한
max-height: 85vh;
// 내용이 넘칠 때만 세로 스크롤이 생김
overflow-y: auto;
background-color: white;
color: black;
border-radius: 5px;
padding: 15px 20px;
.editTags__header {
display: flex;
justify-content: space-between;
align-items: center;
.editTags__title {
font-weight: 500;
font-size: 1.3rem;
}
.editTags__close {
svg {
font-size: 1.6rem;
}
}
}
form {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
height: 30px;
margin: 30px 0;
}
`
const StyledInput = styled.input`
height: 100%;
width: 100%;
border: none;
border-bottom: 1px solid black;
// border 변화가 150ms 동안 천천히 시작되며 변경
transition: 150ms border ease-in;
font-size: 1rem;
font-weight: 500;
$:focus {
border-bottom: 2px solid black;
}
&::placeholder {
color: rgba(0, 0, 0, 0.3);
}
`
const TagsBox = styled.div`
li {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 1.2rem;
height: 30px;
margin-bottom: 10px;
}
`


svg {
font-size: 1.2rem;
color: rgba(0, 0, 0, 0.5);
// transform 변화는 0.25초 동안 부드럽게 (ease-in-out) 진행
// color 변화는 0.2초 동안 부드럽게 (ease-in-out) 진행
transition: 250ms transform ease-in-out, 200ms color ease-in-out;
&:hover {
transform: scale(1.15);
color: rgba(0, 0, 0, 0.8);
}
}
`;
hover➡ransform: scale(1.15) 해줘서 호버 시 이렇게 됨 ( 15% 크게 )
스타일링 완성👍
input 창에 타이핑한 걸 넣어줘야함



이렇게 타이핑하고 엔터누르면
이렇게 됨 🥴 ...
onSubmit 으로 폼 안에서 처리해야함❗
⬇
엔터눌러도 페이지 리플레쉬 안 되는 걸 볼 수 있음👀
그리고 마지막엔 setInputText를 초기화 해주기
tagsSlice.js 여기서 처리해줘야함⭕
여기다 하나를 추가해주는 것



⌨ Coding 이라고 이미 있는데 coding 이라고 input 창에 치면



addTags & deleteTags 내보내주기🥏

타이핑한 값은 inputText니까➡inputText
타이핑 대문자 넣어도
첫글자 빼고 나머지 소문자로 되고 리스트에 추가 된 것을 확인할 수 있음👀...