-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 리마인더 구현 #142
feat: 리마인더 구현 #142
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
핵심기능 멋있게 만들어주셔서 감사해요 클린!!
로컬로 돌렸을 때는 개발서버랑 스토리북 둘 다 잘 돌아갑니다 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
작업량이 정말 엄청나네요 😮
코멘트는 큰 내용은 없고 pushOff 네이밍을 delay로 하면 어떨지 제안해봅니다!
수고하셨어요 클린..
frontend/src/apis/reminder.ts
Outdated
}); | ||
}; | ||
|
||
const reminderAPI = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
const reminderAPI = { | |
const ReminderAPI = { |
아래 컨벤션 참조해서 파스칼 케이스로 네이밍하는 것도 좋아보입니다!
https://github.com/ParkSB/javascript-style-guide#naming--PascalCase-singleton
switch (status) { | ||
case 'late': | ||
return theme.color.accent; | ||
case 'today': | ||
return theme.color.primary; | ||
case 'future': | ||
return theme.color.grayDark; | ||
default: | ||
return theme.color.grayDark; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
타입이 있어서 아래처럼 작성해도 안전할 것 같은데 어떤가요?
switch (status) { | |
case 'late': | |
return theme.color.accent; | |
case 'today': | |
return theme.color.primary; | |
case 'future': | |
return theme.color.grayDark; | |
default: | |
return theme.color.grayDark; | |
return { | |
late: theme.color.accent, | |
today: theme.color.primary, | |
future: theme.color.grayDark, | |
}[status]; |
const convertSubFix = (status: TodayStatus) => { | ||
switch (status) { | ||
case 'today': | ||
return '오늘이에요!'; | ||
case 'late': | ||
return '일 지났어요🥺'; | ||
case 'future': | ||
return '일 남았습니다!'; | ||
default: | ||
return ''; | ||
} | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
여기도 이렇게 어떤가요?
const convertSubFix = (status: TodayStatus) => { | |
switch (status) { | |
case 'today': | |
return '오늘이에요!'; | |
case 'late': | |
return '일 지났어요🥺'; | |
case 'future': | |
return '일 남았습니다!'; | |
default: | |
return ''; | |
} | |
}; | |
const convertSubFix = (status: TodayStatus) => ({ | |
today: '오늘이에요!', | |
late: '일 지났어요🥺', | |
future: '일 남았습니다!', | |
}[status]); |
frontend/src/apis/reminder.ts
Outdated
}); | ||
}; | ||
|
||
const pushOff = ({ id, body }: PushOffProps) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
네이밍을 delay
라고 하는 건 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아예 네이밍이 바뀔것 같습니다 .. ㅎ
9285bb2
to
a03da58
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리팩터링 양도 상당하네요!!
코드 양도 많고, 대부분 잘 구현해주신 것 같습니다!
반영할 것만 반영해주세요!
frontend/src/apis/reminder.ts
Outdated
}); | ||
}; | ||
|
||
const waterPlant = ({ id, body }: WaterPlantProps) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
- 함수의 타입이어서 Props보다는 Params가 맞는 것 같습니다!
- 여기서만 사용하는 타입이라면 import 대신 이 파일에서 타입을 정의하는 건 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
확실히 Params가 더 맞는것 같네요...!! 수정하겠습니다 ㅎ
const id = useId(); | ||
|
||
const checkHandler = () => { | ||
setChecked((prev) => !prev); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
setChecked((prev) => !prev); | |
setChecked(!checked); |
실시간으로 변경된 스냅샷을 사용하지 않는다면 콜백을 사용하지 않는 것이 의도에 더 맞는 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
전 함수의 순수성(?)을 생각해서 외부의 값을 참조하지 않고 해당 메서드에서 처리되는게 낫다고 생각을 해서 콜백 형식으로 작성했습니다. 직접 값을 할당하는 방식이 콜백을 사용하는 것과 다르게 특별한 기능적 차이나 의도의 차이가 있을까요?? (의도의 차이가 어떤건지 잘 몰라서 여쭙습니다...ㅎ)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 아는 부분에서 설명 드릴게요!
한번의 리렌더링에서 setState를 여러번 쓰고, 실시간으로 바뀌는 상태를 사용하고 싶은 의도일 때 콜백을 사용한다고 알고 있습니다.
간단하게 아래 두 코드를 보면 이해가 될 것 같습니다!
setState(count + 1); // 2
setState(count + 1); // 2
// 최종 2로 리렌더링
setState((prev) => prev + 1); // 2
setState((prev) => prev + 1); // 3
// 최종 3로 리렌더링
!checked
이런식으로 작성해도 원시값은 참조가 완전 바뀌기 때문에 리렌더링 트리거에 차이는 없을거에요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
설명 감사합니다!
개인적인 생각으로는 Handler
가 조건에 따른 분기처리를 해야하는 경우라면 상황에 맞는 setState를 사용하는게 맞다고 생각이 들지만, 결국 변경된 상태에 따라 동일한 작업을 수행하는 것이라면 코드를 수정할 필요가 있을까? 하는 생각이 들었습니다! 쵸파는 어떻게 생각하시나요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 지금 상태에서 결과는 똑같긴 합니다!
다만 '실시간 데이터를 반영하는 것은 아니다'는 메세지를 주는 의미가 있다고 생각했어요.
const [checked, setChecked] = useState(isChecked); | ||
const id = useId(); | ||
|
||
const checkHandler = () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
const checkHandler = () => { | |
const check = () => { |
핸들러가 맞긴 하지만 함수의 행동만 네이밍 하는 건 어떤가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 Handler를 붙이는 게 좀 더 명시적인것 같아요... 메서드의 이름은 최대한 구체적으로 작성하는게 낫다고 생각하는데 쵸파의 생각은 어떤가요?
|
||
return ( | ||
<Label htmlFor={id}> | ||
<Input type={'checkbox'} id={id} /> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
<Input type={'checkbox'} id={id} /> | |
<Input type="checkbox" id={id} /> |
} | ||
`; | ||
|
||
export const PutOff = styled.button` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
사용되지 않는 친구인 것 같습니다!
@@ -0,0 +1,98 @@ | |||
import { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
R
type import 가 빠졌네요!
const context = useContext(ReminderContext); | ||
const today = getToday(); | ||
|
||
const changeDateHandler = (changeDate: string) => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
여기도 Handler
Suffix를 빼보는 건 어떨지 제안해봅니다!
보통 핸들러 함수는 컴포넌트 안에, 로직 함수는 훅으로 빼는 패턴이 많이 쓰인다고 생각하는데요,
그래서 핸들러라는 표현을 안해줘도 이해할 수 있고, 행동에 네이밍 초점을 맞추면 좋지 않을까? 생각했어요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"표현을 안해줘도 이해할 수 있고"는 상당히 주관적인 것 같아요🥲 행동에 네이밍 초점을 맞춘다면 그것은 유틸 함수를 작성할때 좀 더 알맞지 않나? 라고 생각했습니다. 핸들러의 역할을 갖는 메서드라면 핸들러라고 명확하게 명시하는게 좀 더 깔끔하다고 생각이 듭니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클린 말도 맞습니다!
표현을 안해줘도 이해할 수 있다는 뜻은 '함수 명만 보고도 핸들러구나'까지는 아니고 코드를 조금 살펴보면 알 수 있다는 뜻이었어요!
마치 저희가 타입을 사용할 때 ~Type
Suffix를 붙이지 않는 이유랑 비슷하다고 생각했어요.
const Reminder = () => { | ||
const { reminderData, waterMutate, changeDateMutate } = useReminderHooks(); | ||
|
||
if (reminderData === undefined) return null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A
이렇게 어떤가요?
if (reminderData === undefined) return null; | |
if (!reminderData) return null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
변경해주신 부분들 확인했어요!
중간에 리마인더 기획이 바뀌어서 할 일이 많았을 것 같은데 고생하셨습니다ㅠㅠ
value: string; | ||
onChange?: (value: string) => void; | ||
placeholder?: string; | ||
changeCallback?: (value: string) => void; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C
React.InputHTMLAttributes<HTMLInputElement>
에 들어있는 value나 onChange가 아니라 직접 선언하신 이유가 궁금해요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
value는 타입 체크때문에 그렇습니다. value를 받아서 사용하는 convertDateKorYear
에서 받는 타입과 HTMLInputElement에서 받는 value의 타입이 달라서 특정했습니다.
onChange는 약간의 레거시 느낌이 있긴 합니다. 당시에 작성했을 때는 changeHandler와 changeHandler가 발생하고 난 다음에 실행될 callback을 분리하는게 관심사 분리 측면에서 낫다는 생각에 분리했었는데, 지금 생각해보니 눈가리고 아옹(?) 느낌이네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
value는 이해했습니다!
onChange도 어떤 느낌인지는 알 것 같아요. 만약 요 DateInput 내에서 입력값에 대한 검증이나 전처리가 필요하다면 callback을 받아서 처리 후에 실행하는 방향이 깔끔해 보여요. 근데 지금은 value, setValue 역할을 form reducer가 해 줘서 불필요해 보이기도 합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
변경해 주신 부분들 확인했어요! 부상투혼 멋있습니다 클린
* feat: 리마인더 페이지 생성 및 라우터 적용 * feat: reminder 관련 msw 모킹 생성 * feat: reminder api 추가 * design: 기본 디자인 추가 * feat: reminder데이터 UI에 활용하기 좋게 mapping 타입 선언 * feat: reminder 데이터 fetch 구현 및 해당 데이터 UI에 맞춰 구현 * design: 리마인더 디자인 구현 * refactor: DateInput 컴포넌트 callback수정 및 min,max 설정 * feat: ReminderCard 컴포넌트 구현 * design: dateInput 글자 넘치는 것 css로 커버 * design: 전역에서 사용할 디자인 추가 * refactor: BackgroundProps export 추가 * feat: ReminderCardBox 연결 * chore: image 경로 추가 및 console 제거 * design: 리마인더 카드 내부에 갭 설정 * refactor: data 값 변경 * refactor: lastWaterDay -> dDay로 변경 * refactor: 상태에 따른 알림 메세지 다르게 설정 * refactor: 중복되는 날짜에 카드가 있을 경우 날짜 하루만 표시 * feat: 공용 checkbox 구현 * refactor: CheckBox 컴포넌트 적용 및 Image 컴포넌트 사용 * feat: 오늘부터 특정 일수 이후의 날짜를 구하는 함수 구현 * refactor: action 발생시 날짜 찍히도록 설정 * feat: 물주기 msw구현 * refactor: msw 값 반환시에 내림차순으로 정렬 * refactor: reminder페이지 관심사 분리에 따른 컴포넌트 분리 * feat: 미루기 api 구현 * refactor: 물주기 api 훅 분리 * refactor: reminder에 사용되는 hooks들 분리 * chore: 사용하지 않는 console 제거 및 로직 변화에 따른 스토리북 수정 * refactor: reminder msw 수정 및 입력 값에 따라 계산되도록 설정 * refactor: action 메서드 contextAPI 사용 및 promise 순서 보장 * refactor: 날짜 미루기 조건 설정 - 미루기가 오늘보다 늦는다면 미뤄지는 날짜 기준이 lastWaterDate가 됨 - else 미뤄지는 날짜 기준이 today임. * chore: ReminderCard ->Card로 파일명 변경 * test: CardBox 스토리 작성 * test: MonthBox 스토리 작성 * refactor: params 형태 변경 및 적용 * refactor: checkbox 타입 추가 * refactor: todayStatus type변경 및 적용 * refactor: hooks의 모든 return값을 받을 수 있도록 처리 - 타입을 반환하는 과정에서 as unnkown as Promise<T>를 사용했음. - 위에 설정 안하면 에러 발생... * refactor: notDate-> showDate로 변수명 변경 * refactor: mutationProps 타입 선언 * refactor: checkbox id 자체 생성 * chore: 네이밍 PascalCase로 변경 * refactor: 리마인더 타입 수정 * refactor: pushoff -> changeDate로 함수명 변경 * refactor: DateInput htmlinputprops 확장 * refactor: merge 하면서 생긴 파일 path 수정 * refactor: Authorization 추가 * refactor: Props -> params로 subfix 변경 * refactor: checkbox 타입으로 전달 * style: import type 설정 및 사용하지 않는 코드 제거 * chore: 인증 이메일 변경 * refactor: 구조분해 할당 필요없는 부분 제거 * refactor: 쓸모없는 key 제거 * refactor: 타입 재활용 및 중복 코드 삭제 * design: hover 제거
* feat: 반려 식물 조회, 수정 시 사용자 검증 기증 추가 * feat: 반려 식물 조회, 수정 시 사용자 검증 어노테이션 추가 * refactor: 컨트롤러 테스트 코드 모킹 타입 구체화, Authorization 헤더 추가 * test: 반려 식물 주인 확인 테스트 추가 * chore: 코드 컨벤션 수정 * refactor: 사용자 검증 테스트에서 검증에 필요한 사용자 생성 위치 변경 * refactor: 사전 식물 컨트롤러 테스트 UITest를 상속하지 않도록 변경 * refactor: 테스트 코드 url path variable 추출 * chore: dDay -> dday로 변경 * feat: 리마인더 구현 (#142) * feat: 리마인더 페이지 생성 및 라우터 적용 * feat: reminder 관련 msw 모킹 생성 * feat: reminder api 추가 * design: 기본 디자인 추가 * feat: reminder데이터 UI에 활용하기 좋게 mapping 타입 선언 * feat: reminder 데이터 fetch 구현 및 해당 데이터 UI에 맞춰 구현 * design: 리마인더 디자인 구현 * refactor: DateInput 컴포넌트 callback수정 및 min,max 설정 * feat: ReminderCard 컴포넌트 구현 * design: dateInput 글자 넘치는 것 css로 커버 * design: 전역에서 사용할 디자인 추가 * refactor: BackgroundProps export 추가 * feat: ReminderCardBox 연결 * chore: image 경로 추가 및 console 제거 * design: 리마인더 카드 내부에 갭 설정 * refactor: data 값 변경 * refactor: lastWaterDay -> dDay로 변경 * refactor: 상태에 따른 알림 메세지 다르게 설정 * refactor: 중복되는 날짜에 카드가 있을 경우 날짜 하루만 표시 * feat: 공용 checkbox 구현 * refactor: CheckBox 컴포넌트 적용 및 Image 컴포넌트 사용 * feat: 오늘부터 특정 일수 이후의 날짜를 구하는 함수 구현 * refactor: action 발생시 날짜 찍히도록 설정 * feat: 물주기 msw구현 * refactor: msw 값 반환시에 내림차순으로 정렬 * refactor: reminder페이지 관심사 분리에 따른 컴포넌트 분리 * feat: 미루기 api 구현 * refactor: 물주기 api 훅 분리 * refactor: reminder에 사용되는 hooks들 분리 * chore: 사용하지 않는 console 제거 및 로직 변화에 따른 스토리북 수정 * refactor: reminder msw 수정 및 입력 값에 따라 계산되도록 설정 * refactor: action 메서드 contextAPI 사용 및 promise 순서 보장 * refactor: 날짜 미루기 조건 설정 - 미루기가 오늘보다 늦는다면 미뤄지는 날짜 기준이 lastWaterDate가 됨 - else 미뤄지는 날짜 기준이 today임. * chore: ReminderCard ->Card로 파일명 변경 * test: CardBox 스토리 작성 * test: MonthBox 스토리 작성 * refactor: params 형태 변경 및 적용 * refactor: checkbox 타입 추가 * refactor: todayStatus type변경 및 적용 * refactor: hooks의 모든 return값을 받을 수 있도록 처리 - 타입을 반환하는 과정에서 as unnkown as Promise<T>를 사용했음. - 위에 설정 안하면 에러 발생... * refactor: notDate-> showDate로 변수명 변경 * refactor: mutationProps 타입 선언 * refactor: checkbox id 자체 생성 * chore: 네이밍 PascalCase로 변경 * refactor: 리마인더 타입 수정 * refactor: pushoff -> changeDate로 함수명 변경 * refactor: DateInput htmlinputprops 확장 * refactor: merge 하면서 생긴 파일 path 수정 * refactor: Authorization 추가 * refactor: Props -> params로 subfix 변경 * refactor: checkbox 타입으로 전달 * style: import type 설정 및 사용하지 않는 코드 제거 * chore: 인증 이메일 변경 * refactor: 구조분해 할당 필요없는 부분 제거 * refactor: 쓸모없는 key 제거 * refactor: 타입 재활용 및 중복 코드 삭제 * design: hover 제거 * feat: 반려 식물 목록 페이지 구현 (#156) * feat: PET_LIST 데이터 추가 및 MSW 작성 * feat: 라우터 상수에 dictSearch 추가 * feat: PetList 페이지 추가 * feat: getList API 추가 * feat: usePetList 쿼리 훅 추가 * feat: PetCard 컴포넌트 구현 * feat: Pet, PetListResponse 타입 추가 * feat: PetList 페이지 구현 * feat: Suspense 적용 * design: 추가버튼 색 연하게 * chore: / 추가 * Merge branch 'develop' into feature/138-반려_식물_목록_페이지 * design: 등록 버튼에 배경은 흰색, 나머지는 메인 색 적용 * design: 카드 테두리 추가 및 글자 간격과 색 변경 * refactor: 핸들러 대신 Link 태그 사용 * chore: Auth 추가 * refactor: 사용하지 않는 옵션 삭제 * refactor: PetDetails를 가장 기본이 되는 타입으로 리팩터링 * refactor: Type 변경내용 적용 * refactor: 쿼리에 PetPlant 네이밍 적용 * fix: NewPetPlantRequest에 lastWaterDate 추가 * feat: 생일일 때 왕관 추가 * refactor: PetPlant로 네이밍 변경 - Card는 데이터보다는 뷰에 관련한 내용이기 때문 * refactor: Type 네이밍 변경 적용 * feat: aria-label 추가 * fix: Authorization 변경 * feat: label에 식물 별명 추가 * refactor: 리마인더 조회 정렬 추가 (#175) * refactor: 반려 식물 전체 조회 시 정렬하여 응답하도록 수정 * refactor: 리마인더 조회 응답 오름차순 정렬로 수정 * chore: 공백 제거 * chore: dDay -> dday로 변경 * chore: resolve conflict --------- Co-authored-by: 정호진 <[email protected]> Co-authored-by: 유강현 <[email protected]> Co-authored-by: Seongyeon Kim <[email protected]>
* feat: 리마인더 페이지 생성 및 라우터 적용 * feat: reminder 관련 msw 모킹 생성 * feat: reminder api 추가 * design: 기본 디자인 추가 * feat: reminder데이터 UI에 활용하기 좋게 mapping 타입 선언 * feat: reminder 데이터 fetch 구현 및 해당 데이터 UI에 맞춰 구현 * design: 리마인더 디자인 구현 * refactor: DateInput 컴포넌트 callback수정 및 min,max 설정 * feat: ReminderCard 컴포넌트 구현 * design: dateInput 글자 넘치는 것 css로 커버 * design: 전역에서 사용할 디자인 추가 * refactor: BackgroundProps export 추가 * feat: ReminderCardBox 연결 * chore: image 경로 추가 및 console 제거 * design: 리마인더 카드 내부에 갭 설정 * refactor: data 값 변경 * refactor: lastWaterDay -> dDay로 변경 * refactor: 상태에 따른 알림 메세지 다르게 설정 * refactor: 중복되는 날짜에 카드가 있을 경우 날짜 하루만 표시 * feat: 공용 checkbox 구현 * refactor: CheckBox 컴포넌트 적용 및 Image 컴포넌트 사용 * feat: 오늘부터 특정 일수 이후의 날짜를 구하는 함수 구현 * refactor: action 발생시 날짜 찍히도록 설정 * feat: 물주기 msw구현 * refactor: msw 값 반환시에 내림차순으로 정렬 * refactor: reminder페이지 관심사 분리에 따른 컴포넌트 분리 * feat: 미루기 api 구현 * refactor: 물주기 api 훅 분리 * refactor: reminder에 사용되는 hooks들 분리 * chore: 사용하지 않는 console 제거 및 로직 변화에 따른 스토리북 수정 * refactor: reminder msw 수정 및 입력 값에 따라 계산되도록 설정 * refactor: action 메서드 contextAPI 사용 및 promise 순서 보장 * refactor: 날짜 미루기 조건 설정 - 미루기가 오늘보다 늦는다면 미뤄지는 날짜 기준이 lastWaterDate가 됨 - else 미뤄지는 날짜 기준이 today임. * chore: ReminderCard ->Card로 파일명 변경 * test: CardBox 스토리 작성 * test: MonthBox 스토리 작성 * refactor: params 형태 변경 및 적용 * refactor: checkbox 타입 추가 * refactor: todayStatus type변경 및 적용 * refactor: hooks의 모든 return값을 받을 수 있도록 처리 - 타입을 반환하는 과정에서 as unnkown as Promise<T>를 사용했음. - 위에 설정 안하면 에러 발생... * refactor: notDate-> showDate로 변수명 변경 * refactor: mutationProps 타입 선언 * refactor: checkbox id 자체 생성 * chore: 네이밍 PascalCase로 변경 * refactor: 리마인더 타입 수정 * refactor: pushoff -> changeDate로 함수명 변경 * refactor: DateInput htmlinputprops 확장 * refactor: merge 하면서 생긴 파일 path 수정 * refactor: Authorization 추가 * refactor: Props -> params로 subfix 변경 * refactor: checkbox 타입으로 전달 * style: import type 설정 및 사용하지 않는 코드 제거 * chore: 인증 이메일 변경 * refactor: 구조분해 할당 필요없는 부분 제거 * refactor: 쓸모없는 key 제거 * refactor: 타입 재활용 및 중복 코드 삭제 * design: hover 제거
* feat: 반려 식물 조회, 수정 시 사용자 검증 기증 추가 * feat: 반려 식물 조회, 수정 시 사용자 검증 어노테이션 추가 * refactor: 컨트롤러 테스트 코드 모킹 타입 구체화, Authorization 헤더 추가 * test: 반려 식물 주인 확인 테스트 추가 * chore: 코드 컨벤션 수정 * refactor: 사용자 검증 테스트에서 검증에 필요한 사용자 생성 위치 변경 * refactor: 사전 식물 컨트롤러 테스트 UITest를 상속하지 않도록 변경 * refactor: 테스트 코드 url path variable 추출 * chore: dDay -> dday로 변경 * feat: 리마인더 구현 (#142) * feat: 리마인더 페이지 생성 및 라우터 적용 * feat: reminder 관련 msw 모킹 생성 * feat: reminder api 추가 * design: 기본 디자인 추가 * feat: reminder데이터 UI에 활용하기 좋게 mapping 타입 선언 * feat: reminder 데이터 fetch 구현 및 해당 데이터 UI에 맞춰 구현 * design: 리마인더 디자인 구현 * refactor: DateInput 컴포넌트 callback수정 및 min,max 설정 * feat: ReminderCard 컴포넌트 구현 * design: dateInput 글자 넘치는 것 css로 커버 * design: 전역에서 사용할 디자인 추가 * refactor: BackgroundProps export 추가 * feat: ReminderCardBox 연결 * chore: image 경로 추가 및 console 제거 * design: 리마인더 카드 내부에 갭 설정 * refactor: data 값 변경 * refactor: lastWaterDay -> dDay로 변경 * refactor: 상태에 따른 알림 메세지 다르게 설정 * refactor: 중복되는 날짜에 카드가 있을 경우 날짜 하루만 표시 * feat: 공용 checkbox 구현 * refactor: CheckBox 컴포넌트 적용 및 Image 컴포넌트 사용 * feat: 오늘부터 특정 일수 이후의 날짜를 구하는 함수 구현 * refactor: action 발생시 날짜 찍히도록 설정 * feat: 물주기 msw구현 * refactor: msw 값 반환시에 내림차순으로 정렬 * refactor: reminder페이지 관심사 분리에 따른 컴포넌트 분리 * feat: 미루기 api 구현 * refactor: 물주기 api 훅 분리 * refactor: reminder에 사용되는 hooks들 분리 * chore: 사용하지 않는 console 제거 및 로직 변화에 따른 스토리북 수정 * refactor: reminder msw 수정 및 입력 값에 따라 계산되도록 설정 * refactor: action 메서드 contextAPI 사용 및 promise 순서 보장 * refactor: 날짜 미루기 조건 설정 - 미루기가 오늘보다 늦는다면 미뤄지는 날짜 기준이 lastWaterDate가 됨 - else 미뤄지는 날짜 기준이 today임. * chore: ReminderCard ->Card로 파일명 변경 * test: CardBox 스토리 작성 * test: MonthBox 스토리 작성 * refactor: params 형태 변경 및 적용 * refactor: checkbox 타입 추가 * refactor: todayStatus type변경 및 적용 * refactor: hooks의 모든 return값을 받을 수 있도록 처리 - 타입을 반환하는 과정에서 as unnkown as Promise<T>를 사용했음. - 위에 설정 안하면 에러 발생... * refactor: notDate-> showDate로 변수명 변경 * refactor: mutationProps 타입 선언 * refactor: checkbox id 자체 생성 * chore: 네이밍 PascalCase로 변경 * refactor: 리마인더 타입 수정 * refactor: pushoff -> changeDate로 함수명 변경 * refactor: DateInput htmlinputprops 확장 * refactor: merge 하면서 생긴 파일 path 수정 * refactor: Authorization 추가 * refactor: Props -> params로 subfix 변경 * refactor: checkbox 타입으로 전달 * style: import type 설정 및 사용하지 않는 코드 제거 * chore: 인증 이메일 변경 * refactor: 구조분해 할당 필요없는 부분 제거 * refactor: 쓸모없는 key 제거 * refactor: 타입 재활용 및 중복 코드 삭제 * design: hover 제거 * feat: 반려 식물 목록 페이지 구현 (#156) * feat: PET_LIST 데이터 추가 및 MSW 작성 * feat: 라우터 상수에 dictSearch 추가 * feat: PetList 페이지 추가 * feat: getList API 추가 * feat: usePetList 쿼리 훅 추가 * feat: PetCard 컴포넌트 구현 * feat: Pet, PetListResponse 타입 추가 * feat: PetList 페이지 구현 * feat: Suspense 적용 * design: 추가버튼 색 연하게 * chore: / 추가 * Merge branch 'develop' into feature/138-반려_식물_목록_페이지 * design: 등록 버튼에 배경은 흰색, 나머지는 메인 색 적용 * design: 카드 테두리 추가 및 글자 간격과 색 변경 * refactor: 핸들러 대신 Link 태그 사용 * chore: Auth 추가 * refactor: 사용하지 않는 옵션 삭제 * refactor: PetDetails를 가장 기본이 되는 타입으로 리팩터링 * refactor: Type 변경내용 적용 * refactor: 쿼리에 PetPlant 네이밍 적용 * fix: NewPetPlantRequest에 lastWaterDate 추가 * feat: 생일일 때 왕관 추가 * refactor: PetPlant로 네이밍 변경 - Card는 데이터보다는 뷰에 관련한 내용이기 때문 * refactor: Type 네이밍 변경 적용 * feat: aria-label 추가 * fix: Authorization 변경 * feat: label에 식물 별명 추가 * refactor: 리마인더 조회 정렬 추가 (#175) * refactor: 반려 식물 전체 조회 시 정렬하여 응답하도록 수정 * refactor: 리마인더 조회 응답 오름차순 정렬로 수정 * chore: 공백 제거 * chore: dDay -> dday로 변경 * chore: resolve conflict --------- Co-authored-by: 정호진 <[email protected]> Co-authored-by: 유강현 <[email protected]> Co-authored-by: Seongyeon Kim <[email protected]>
🔥 연관 이슈
🚀 작업 내용
지각 | 오늘 일정 | 남은 일정
에 따른 배경색을 분리힌다.2023-07-26.9.30.48.mov
대략적인 Reminder 데이터의 섹션(?)을 구분해 봤습니다!
작업 내용이 조금 많이 있습니다. msw 설정과 날짜 계산 로직을 넣어본다고 넣었는데 잘 넣었는지 모르겠네요 ㅎ
checkbox
구현을 했는데 쓸모가 없어져서... 혹시 모르니 같이 올려놔 봅니다!ReminderExtendType
입니다.useReminder
에 있는convertReminderData
입니다.useReminderHooks
를 선언했는데, 데이터에 변화가 있을 때마다 refetch를 해야했기 때문에 3개의 훅이 같은 파일에서 있을 필요가 있다고 생각해서 새로운 훅을 만들었습니다.Reminder
가 최대 4뎁스까지 가기 때문에,ContextAPI
를 통해서 callback 함수들을 전역으로 설정했습니다.이후 궁금하신 사항 있으면 바로바로 말씀해 주세요!
💬 리뷰 중점사항
우선은 기능 구현이 잘 되는지 확인 부탁드립니다.
리마인더 로직을 짜면서 테스트의 필요성에 대해 살짝 느끼게 되었는데, 테스팅 라이브러리 도입에 대한 여러분의 생각을 듣고싶습니다!!
ps. 쵸파 테코톡 화이팅, 참새 아프지 마세요 ㅠ