Skip to content
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

[WRFE-48] 래플/이벤트 수정 페이지 #50

Open
wants to merge 18 commits into
base: dev
Choose a base branch
from
Open

Conversation

eric-hjh
Copy link
Contributor

@eric-hjh eric-hjh commented Oct 30, 2024

📖 개요

💻 작업사항

  • 수정 페이지 작업
스크린샷 2024-11-08 오후 6 24 50 스크린샷 2024-11-08 오후 6 24 55

💡 작성한 이슈 외에 작업한 사항

✔️ check list

  • 작성한 이슈의 내용을 전부 적용했나요?
  • 리뷰어를 등록했나요?

@eric-hjh eric-hjh marked this pull request as draft October 30, 2024 11:30
@eric-hjh eric-hjh added 💻 FE 프론트엔드 관련 이슈 ✨ FEAT 새로운 기능 추가 labels Oct 30, 2024
@eric-hjh eric-hjh self-assigned this Oct 30, 2024
@eric-hjh eric-hjh marked this pull request as ready for review November 8, 2024 09:23
@eric-hjh eric-hjh linked an issue Nov 10, 2024 that may be closed by this pull request
1 task
Copy link
Contributor

@ww8007 ww8007 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

궁금한 점 몇개 코멘트 남겼습니다!

Comment on lines 13 to 19
const Edit = ({
params: {id},
searchParams: {type},
}: {
params: {id: string};
searchParams: {type: 'raffle' | 'event'};
}) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 interface를 따로 선언하지 않는 이유가 따로 있으신가요?
저는 보통

interface Params {
 id : string;
}

interface SearchParams {
 type : 'raffle' | 'event'
}

interface EditProps {
 params : Params;
 searchParams : SearchParams;
}

요런식으로 썼는데 interface 파일만 읽더라도 이 컴포넌트에서 대충 어느게 필요하겠구나에 대한
생각을 분리할 수 있어서 좋은 것 같았어요
이 부분에 대한 장현님의 생각은 어떠신가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interface를 따로 선언하지 않는 이유는

  1. 나누지 않는게 더 직관적이다 생각하고,
  2. 개인적으로 코드를 읽을 때 아래 ->위 (왼 -> 오)로 읽는게 좋아서,
  3. 코드양이 굳이 늘아난다는 느낌을 가지고 있었습니다.

인터페이스로 분리할 때는 가독성이 떨어진다 느껴질 때 (ex. props로 받아오는게 많다거나, 복잡한 관계라던가..) 분리를 해서 사용해왔었는데,
'생각을 분리해 볼 수 있다' 와 같은 생각은 못해봤던 접근이어서 한번 생각해보겠습니다!
(이렇게 적었는데 밑에 훅 보니까 분리해서 사용했네요 ; 3개가 많다 생각하진 않는데)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그럼 통일되는 편이 좋을 것 같아요!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

825710c
수정 커밋입니다!
다른 코드를 보았을 때, interface로 분리된 코드가 많아서 통일시키는편이 좋을거 같아서 분리시켜두었습니다!

apps/front/wraffle-webview/app/products/[id]/edit/page.tsx Outdated Show resolved Hide resolved
Comment on lines 11 to 40
export const useDateValidation = ({
startDate,
endDate,
announceAt,
}: UseDateValidationProps) => {
const {setValue} = useFormContext();
const {toast} = useToast();

useEffect(() => {
if (endDate < startDate) {
setValue('endDate', startDate);
toast({
title: '응모 마감 일정은',
description: '응모 시작 일정 이후로 설정해주세요.',
duration: 10000,
variant: 'warning',
});
}

if (announceAt < endDate) {
setValue('announceAt', endDate);
toast({
title: '당첨자 발표 일정은',
description: '응모 마감 일정 이후로 설정해주세요.',
duration: 10000,
variant: 'warning',
});
}
}, [startDate, endDate, announceAt]);
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

외부에서 사용할 때 이 컴포넌트가 어떤 일을 하는지 파일을 열어보기 전 까지는 동작을 예측하기 어려운 코드 같아요

  1. 날짜 판단
  2. 토스트
  3. form에 setting

useDateValidationWithToast 같은 네이밍을 가져가는 것도 좋을거 같은데 과연 form을 여기서 setting 하는게 훅의 책임이 맞는가에 대한 고민이 드네요
어떠신가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 중복을 줄일 수 있는 점과 훅으로 나누긴 했지만 form을 사용하는 제한된 곳에서 사용할것이라는 생각으로 코드를 작성하여 간과한 부분인거 같아 수정하겠습니다

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a9c6708
수정 커밋 입니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저번에 의논했었던 방향에서 처음 이야기 나왔던 onChange에 조건을 거는 방향으로 생각해보다가, 처음 생각했던 흐름은

  • 오버된 날짜를 선택시 날짜를 강제로 변경 시킨 후, toast를 보여주는 방향이었는데,

생각해보니까, 날짜를 강제로 변경하는 흐름 보단, 선택할 때 유효성에 걸리면 토스트를 보여주고, 변경을 못하는 방향이 사용자에게 더 좋은 경험이 될거 같아서 이 방향으로 수정해 보았는데, 어떠신거 같나요??
4e1f418

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eric-hjh
네 저는 이 방향도 좋을 것 같습니다!

Copy link
Contributor Author

@eric-hjh eric-hjh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다!

Comment on lines 13 to 19
const Edit = ({
params: {id},
searchParams: {type},
}: {
params: {id: string};
searchParams: {type: 'raffle' | 'event'};
}) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interface를 따로 선언하지 않는 이유는

  1. 나누지 않는게 더 직관적이다 생각하고,
  2. 개인적으로 코드를 읽을 때 아래 ->위 (왼 -> 오)로 읽는게 좋아서,
  3. 코드양이 굳이 늘아난다는 느낌을 가지고 있었습니다.

인터페이스로 분리할 때는 가독성이 떨어진다 느껴질 때 (ex. props로 받아오는게 많다거나, 복잡한 관계라던가..) 분리를 해서 사용해왔었는데,
'생각을 분리해 볼 수 있다' 와 같은 생각은 못해봤던 접근이어서 한번 생각해보겠습니다!
(이렇게 적었는데 밑에 훅 보니까 분리해서 사용했네요 ; 3개가 많다 생각하진 않는데)

Comment on lines 11 to 40
export const useDateValidation = ({
startDate,
endDate,
announceAt,
}: UseDateValidationProps) => {
const {setValue} = useFormContext();
const {toast} = useToast();

useEffect(() => {
if (endDate < startDate) {
setValue('endDate', startDate);
toast({
title: '응모 마감 일정은',
description: '응모 시작 일정 이후로 설정해주세요.',
duration: 10000,
variant: 'warning',
});
}

if (announceAt < endDate) {
setValue('announceAt', endDate);
toast({
title: '당첨자 발표 일정은',
description: '응모 마감 일정 이후로 설정해주세요.',
duration: 10000,
variant: 'warning',
});
}
}, [startDate, endDate, announceAt]);
};
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 중복을 줄일 수 있는 점과 훅으로 나누긴 했지만 form을 사용하는 제한된 곳에서 사용할것이라는 생각으로 코드를 작성하여 간과한 부분인거 같아 수정하겠습니다

@eric-hjh eric-hjh requested a review from ww8007 November 27, 2024 13:22
@@ -0,0 +1,10 @@
export const validateDate = (
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

validateDate 보다는 이 날짜가 이전 날짜 보다 큰지를 보여주도록 함수 명에서 드러나면 좋을 것 같아요
isDateBefore 같은 느낌이 되면 어떨까요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

17b7a0f
수정 커밋입니다!

Comment on lines 33 to 39
onSelect={date => {
if (validateDate(date, announceAt)) {
field.onChange(date);
} else {
toast(ENDDATE_IS_OVER_ANNOUNCEAT);
}
}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ui에서 이 로직을 담당하는 것 보다는 onSelect를 외부에서 받아서 관리하는 방식이 좋아보일 것 같아요!
추후에 이 로직을 수정하기 위해서는 ui에 해당하는 이 onSelect까지 와야 한다는 사실을 알기 어려울 것 같아요

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1ff0234
수정 커밋입니다!

Comment on lines 30 to 36
onSelect={date => {
if (validateDate(date, endDate)) {
field.onChange(date);
} else {
toast(STARTDATE_IS_OVER_ENDDATE);
}
}}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분도 위와 동일 합니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1ff0234
수정 커밋입니다!

@eric-hjh eric-hjh requested a review from ww8007 December 11, 2024 12:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💻 FE 프론트엔드 관련 이슈 ✨ FEAT 새로운 기능 추가
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[WRFE-48](feat): 수정 페이지 추가
2 participants