-
Notifications
You must be signed in to change notification settings - Fork 6
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
[FE] 새 방 비교 페이지를 완성하고 방 선택 페이지를 만들어 연결한다. #973
Conversation
…ng-ggood into feat/952-compareRoom
@@ -4,7 +4,7 @@ | |||
"noImplicitAny": true, | |||
"esModuleInterop": true, | |||
"module": "esnext", | |||
"target": "es5", |
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.
set 에 ... 디스트럭쳐를 쓰기 위해서 ES2015 버전으로 업그레이드 했습니다.
@@ -17,7 +18,12 @@ const ChecklistAnswerSection = ({ categories }: Props) => { | |||
<div key={`accordion-${category.categoryId}`}> | |||
<Accordion.header text={category.categoryName} id={category.categoryId} isMarked={true} /> | |||
<Accordion.body id={category.categoryId}> | |||
<CategoryAccordion key={category.categoryId} category={category} /> | |||
{category.questions.map((question, index) => ( |
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.
불필요한 depth 를 줄였습니다.
question={question} | ||
answer={answer} | ||
/> | ||
<S.QuestionBox key={question.questionId}> |
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.
ChecklistQuestionItem을 제사용하기 위해 해당 컴포넌트의 Wrapper 를 제거하여 리팩토링하였습니다.
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 RoomCompareSelectPage = () => { | ||
const navigate = useNavigate(); | ||
const [selectedRoomIds, setSelectedRoomIds] = useState<Set<number>>(new Set()); | ||
const { data: checklistList, isLoading } = useGetChecklistList(); | ||
const { showToast } = useToast(); | ||
|
||
const userChecklists = checklistList?.filter(checklist => checklist.checklistId !== 1) || []; | ||
|
||
useEffect(() => { | ||
if (userChecklists.length < MIN_ROOM_COMPARE_COUNT) { | ||
showToast({ message: '비교 기능은 작성한 체크리스트가 2개 이상일 때만 가능합니다.' }); | ||
navigate(ROUTE_PATH.checklistList); | ||
} | ||
}, []); | ||
|
||
const toggleSelectChecklist = (roomId: number) => { | ||
setSelectedRoomIds(prev => { | ||
const updatedSet = new Set(prev); | ||
if (prev.has(roomId)) { | ||
updatedSet.delete(roomId); | ||
} else if (prev.size < 2) { | ||
updatedSet.add(roomId); | ||
} else { | ||
showToast({ message: '방은 2개까지만 선택할 수 있습니다.', type: 'info' }); | ||
} | ||
return updatedSet; | ||
}); | ||
}; | ||
|
||
const handleClickBackward = () => navigate(ROUTE_PATH.checklistList); | ||
|
||
const handleSelectRooms = () => { | ||
if (selectedRoomIds.size !== 2) { | ||
return showToast({ message: '비교할 2개의 방을 선택해주세요.', type: 'info' }); | ||
} | ||
const rooms = [...selectedRoomIds]; | ||
|
||
navigate(ROUTE_PATH.roomCompare, { | ||
state: { | ||
roomId1: rooms[0], | ||
roomId2: rooms[1], | ||
}, | ||
}); | ||
}; | ||
|
||
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.
방비교선택 예전 지워진 코드를 사용하지 않고 새로구현한 이유가 있나요?
예전 방비교선택 관련 코드에 로직 테스트코드랑 컴포넌트 스토리도 작성되어있었는데
그게 사라져서 조금 아쉽네요
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.
앗 원래는 방 3개까지 비교가 되는 로직이었지만 2개의 방을 비교하는 로직으로 바뀌었습니다. 내부적인 디자인도 많이 바뀌어서 일부분만 사용했었는데요.기존 코드에 테스트 코드랑 스토리북 코드가 들어가있는 건 몰랐네요! 이 부분은 확인 후 반영해보도록 하겠습니다. 알려주셔서 감사해요😁
제이드도 취준으로 바쁘실텐데 화이팅입니다👏
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.
확인했습니다~! 수고 많으셨어요 리안~~!!
방 비교 페이지가 결국 다시 멋지게 돌아왔네요
새로 변경된 메인도 계속 빨간 아이콘이 신경쓰이신다면 변경해도 괜찮을거 같습니다~
다만 아직 내부에 목데이터가 있는거 같아서 비교 api 를 모두 연결된 후 완전한 코드로 올라가는게 좋지 않을까 생각이 듭니다!
그리고 추가적으로 제안드릴 이야기는 코드 스타일 중 index.ts
를 사용해서 컴포넌트나 훅들을 가져오는 것에 대해서 어떻게 생각하시는지 물어보고 싶어요! 생각보다 저희 코드의 임포트 부분이 길다고 생각이 들어서요~!!
리안과 제이드는 어떻게 생각하시나요?
//TODO: 임시 타입 | ||
interface CategorySectionType { | ||
id: SmallAnswerType; | ||
text: string; | ||
color: string; | ||
} | ||
|
||
const CateogorySection: CategorySectionType[] = [ | ||
{ id: 'good', text: '긍정적', color: theme.palette.green400 }, | ||
{ id: 'bad', text: '부정적', color: theme.palette.red500 }, | ||
{ id: 'none', text: '무응답', color: theme.palette.grey300 }, | ||
]; | ||
|
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.
임시 타입이었지만 실제 적용하는 타입이 되었습니다!
display: flex; | ||
margin: 0.5rem 0; | ||
|
||
font-size: 14px; |
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.
기존 폰트 컨벤션을 사용하면 좋을거 같아요
@@ -20,18 +21,16 @@ const AccordionHeader = ({ | |||
text, | |||
isMarked = true, | |||
markColor = theme.palette.yellow500, | |||
isShowMarkerIfOpen = true, |
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.
text={'A방'} | ||
size={'medium'} | ||
onClick={() => handleRoomMarkerClick(0)} | ||
/> | ||
<Marker | ||
isCircle={false} | ||
backgroundColor={theme.palette.green500} | ||
text={'B방'} |
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.
방 비교 api 가 완성되었다고 들어서 mock 으로 처리될 걸 처리하고 머지되면 좋을거 같네요!
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.
네네! 완성했습니다
@@ -4,7 +4,7 @@ export const checklistList: { checklists: ChecklistPreview[] } = { | |||
checklists: [ | |||
{ | |||
checklistId: 1, | |||
roomName: '건대역 오픈형', | |||
roomName: '예시용 체크리스트', |
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.
e2e 테스트 때문에 기존 데이터를 삭제하신걸까요?
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 RoomCompareSelectPage = () => { | ||
const navigate = useNavigate(); | ||
const [selectedRoomIds, setSelectedRoomIds] = useState<Set<number>>(new Set()); | ||
const { data: checklistList, isLoading } = useGetChecklistList(); | ||
const { showToast } = useToast(); | ||
|
||
const userChecklists = checklistList?.filter(checklist => checklist.checklistId !== 1) || []; | ||
|
||
useEffect(() => { | ||
if (userChecklists.length < MIN_ROOM_COMPARE_COUNT) { | ||
showToast({ message: '비교 기능은 작성한 체크리스트가 2개 이상일 때만 가능합니다.' }); | ||
navigate(ROUTE_PATH.checklistList); | ||
} | ||
}, []); | ||
|
||
const toggleSelectChecklist = (roomId: number) => { | ||
setSelectedRoomIds(prev => { | ||
const updatedSet = new Set(prev); | ||
if (prev.has(roomId)) { | ||
updatedSet.delete(roomId); | ||
} else if (prev.size < 2) { | ||
updatedSet.add(roomId); | ||
} else { | ||
showToast({ message: '방은 2개까지만 선택할 수 있습니다.', type: 'info' }); | ||
} | ||
return updatedSet; | ||
}); | ||
}; | ||
|
||
const handleClickBackward = () => navigate(ROUTE_PATH.checklistList); | ||
|
||
const handleSelectRooms = () => { | ||
if (selectedRoomIds.size !== 2) { | ||
return showToast({ message: '비교할 2개의 방을 선택해주세요.', type: 'info' }); | ||
} | ||
const rooms = [...selectedRoomIds]; | ||
|
||
navigate(ROUTE_PATH.roomCompare, { | ||
state: { | ||
roomId1: rooms[0], | ||
roomId2: rooms[1], | ||
}, | ||
}); | ||
}; | ||
|
||
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.
그러게요 그때 열심히 작성한 코드,,,, 이렇게 돌아올지 알았다면 지우지 말껄,,,
…ng-ggood into feat/952-compareRoom
배럴 파일을 쓰면 트리쉐이킹이 무력화되고, 순환참조 가능성이 증가하는 점 때문에, 좋지 않게 생각하고 있어요. ! 😭 관련 참고링크
|
@skiende74
|
좋은 것 같습니다 ! |
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.
시일이 조금 걸리신다면 우선 머지하고 추후PR에서 반영하셔도 좋을거같습니다 !!
❗ Issue
✨ 구현한 기능
비교 선택 페이지를 만들었습니다.
디자인은 다음과 같습니다.
1. 기존의 컴포넌트들을 재사용하였으며, 몇 컴포넌트를 리팩토링 했습니다.
ChecklistQuestion
,CustomBanner
등을 재사용성 있게 리팩토링 하여 사용했습니다.2. Marker 라는 새로운 컴포넌트를 만들었습니다.
Marker(새로 생긴 공용 컴포넌트)
라는 새로운 공용 컴포넌트를 만들어 지하철 호선 표시마크, 비교 페이지에 A,B 표시에 사용해 주었습니다.📢 논의하고 싶은 내용
디자인 관련 얘기긴 한데, 메인 페이지에서 방의 아이콘을 빨간색을 빼는 것(노란색으로 대체) 을 어떻게 생각하시는지 궁금합니다. 비교 페이지에서 빨간색이 시맨틱으로 쓰여서, 방 또한 빨간색의 경우 부정적인 의미가 생겼다고 생각합니다. 아티클의 경우는 관련이 없으니까 유지하도 될 것 같습니다. 디자인적으로도 색상이 덜 다채로워서 더 예쁘다고 생각하는데, 방의 경우는 다음과 같이 바꾸는 것에 대해 어떻게 생각하시나요?
🎸 기타