4주차 개인 프로젝트 '나만의 캘린더' 만들기
"Scheduler"
📌필수 구현 기능
✅ 게시글 목록 페이지
✅ 게시글 작성 페이지
우측 아래의 추가하기 버튼 위에 [완료된 일정 보기] 만들기

// 현재 디스플레이 상태 체크
// action ( sch_list, show_end = true )
if(action.payload.show_end){
draft.sch_list = action.payload.sch_list.map((s,idx)=>{
if(!s.is_end){
return {...s, display : 'none'}
}
})
}
30분을 헤메이던 끝에 당연하게도 안되는 코드를 붙잡고 있었다는 것을 인지했다.
return 해주는 배열과 형식이 맞지 않은건가? 라는 의문을 시작으로 문제점을 찾았다.
// action (true)
draft.show_end = action.payload.show_end;
// draft.show_end의 값이 true 일 때
if (draft.show_end) {
draft.sch_list.map((s, idx) => {
if (!s.is_end) {
// draft.sch_list 에 display : 'none' 항목을 추가한다.
draft.sch_list[idx] = { ...s, display: "none" };
}
});
}
우측 아래의 추가하기 버튼 위에 [완료된 일정 보기] 만들기 기능을 구현 했다.//dispatch (버튼에 적용)
const onEndSch = () => {
if(!show_end){
dispatch(schActions.showSch(true))
}else{
dispatch(schActions.showSch(false))
}
}
//createAction
const showSch = createAction(SHOW_SCH, (show_end) => ({ show_end }));
//reducer
[SHOW_SCH]: (state, action) =>
produce(state, (draft) => {
draft.show_end = action.payload.show_end;
if (draft.show_end) {
draft.sch_list.map((s, idx) => {
if (!s.is_end) {
draft.sch_list[idx] = { ...s, display: "none" };
}
});
} else {
draft.sch_list.map((s, idx) => {
draft.sch_list[idx] = { ...s, display: "auto" };
draft.show_end = false;
});
}
})
캘린더 내 일정은 시간 순으로 정렬하기
- [주의] 파이어스토어에서 필터해서 가져오지 말고 전체 데이터를 가져온 후, 리덕스에서 필터를 할 것 (컴포넌트에서도 가능)

//state의 sch_list 가져옴
const sch_list = useSelector((state) => state.schedule.sch_list);
//배열의 insert_dt 항목을 기준으로 오름차순 정렬
const sort_sch_list = sch_list.sort(function (a, b) {
return moment([a.insert_dt], "YYYY-MM-DD hh:mm:ss")-
moment([b.insert_dt], "YYYY-MM-DD hh:mm:ss");
});
console.log(sort_sch_list);

오류가 난지 3시간 째.. 아무리 생각해도 이 방법이 맞는 것 같은데 안되는 이유를 모르겠다..
에러메시지를 확인해 보면 읽기 전용이라 0번에 property할 수 없다고 하는데 이리 저리 바꿔봐도 동작을 하지 않았고 이미 새벽 5시가 되어 내일 다시 해보기로 했다..