-
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
[FE] 버튼 로딩 구현 및 이벤트 생성 페이지에 적용 #476
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.
원래 로딩 애니메이션 제가 하려고 했는데 대신 맡아서 진행해줘서 고마워요!
@@ -60,6 +60,7 @@ | |||
"@emotion/react": "^11.11.4", | |||
"@storybook/addon-webpack5-compiler-swc": "^1.0.5", | |||
"@svgr/webpack": "^8.1.0", | |||
"lottie-react": "^2.4.0", |
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.
이거는 dev dependency는 아닌 것 같은데 기술 검토를 맡을 필요가 있을 것 같아요. (물론 zustand, react-query 할 때는 하지 않기도 했죠)
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.
오호.. 확실히 lottie-react는 dev dependency는 아니라고 생각이 드네요! 프론트엔드 애니메이션을 구현하기 위해서 사용하는 라이브러리니까요! 기능 구현에 사용하기 때문에 dependency가 맞는 것 같습니다~!
const animationSize = (size: ButtonSize) => { | ||
switch (size) { | ||
case 'small': | ||
return {width: 30, height: 12}; | ||
|
||
case 'large': | ||
return {width: 50, height: 20}; | ||
|
||
default: | ||
return {width: 40, height: 16}; | ||
} | ||
}; | ||
|
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.
인정합니다. 진짜 최고야.. 보는 내가 짜릿해..
{...htmlProps} | ||
> | ||
{variants === 'loading' ? ( | ||
<Lottie animationData={loadingAnimation} loop={true} style={animationSize(size)} /> |
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.
loop true는 애니메이션을 계속 반복한다는 의미인가요?
@@ -10,6 +10,8 @@ import UnhandledErrorBoundary from '../../UnhandledErrorBoundary'; | |||
import {ErrorInfo, ErrorProvider} from './ErrorProvider'; | |||
import {useError} from './useError'; | |||
|
|||
jest.mock('lottie-react', () => () => <div>Lottie Mock</div>); |
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.
테스트 코드가 터지지 않도록 신경 써준 것까지 완벽;;;
@@ -15,7 +15,7 @@ const useSetEventPasswordPage = () => { | |||
const [canSubmit, setCanSubmit] = useState(false); | |||
const navigate = useNavigate(); | |||
const location = useLocation(); | |||
const {mutate: postEvent} = usePostEvent(); | |||
const {mutate: postEvent, isPending: isPostEventPending} = usePostEvent(); |
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.
isPending good~~~
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.
저도 실제로 저희 서비스 qc를 하면서 이벤트가 생성되는 과정에서 기다리지 못하고 버튼을 두번 클릭한 적이 있는데요..
토다리가 이 부분을 신경써서 이번에 구현해줘서 너무 좋습니다! 최고에용!
@@ -60,6 +60,7 @@ | |||
"@emotion/react": "^11.11.4", | |||
"@storybook/addon-webpack5-compiler-swc": "^1.0.5", | |||
"@svgr/webpack": "^8.1.0", | |||
"lottie-react": "^2.4.0", |
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.
오호.. 확실히 lottie-react는 dev dependency는 아니라고 생각이 드네요! 프론트엔드 애니메이션을 구현하기 위해서 사용하는 라이브러리니까요! 기능 구현에 사용하기 때문에 dependency가 맞는 것 같습니다~!
const animationSize = (size: ButtonSize) => { | ||
switch (size) { | ||
case 'small': | ||
return {width: 30, height: 12}; | ||
|
||
case 'large': | ||
return {width: 50, height: 20}; | ||
|
||
default: | ||
return {width: 40, height: 16}; | ||
} | ||
}; | ||
|
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.
인정합니다. 진짜 최고야.. 보는 내가 짜릿해..
475번 pr의 변경사항을 포함하고 있습니다
issue
구현 목적
구현 내용
1. loading animation을 위한 lottie animation
https://app.lottiefiles.com/animation/1e9dc066-f026-4fda-b4c5-522e29259397?panel=download
2.
Button
loading variantsButton
컴포넌트와FixedButton
컴포넌트에 loading variants를 추가했습니다.3. SetEventPassword 페이지에 적용
usePostEvent
가 pending인 상태인 경우,FixedButton
이 loading 상태가 되도록 구현하였습니다.2024-08-22.4.10.11.mov
Trouble Shooting
lottie-web 라이브러리는 브라우저 환경을 필요로 하며, 일부 브라우저 관련 API(canvas, fillStyle 등)를 사용합니다. 그러나 Jest 테스트 환경에서 사용하는 jsdom은 브라우저의 일부 기능을 완전히 구현하지 않기 때문에, 이로 인해 fillStyle을 설정할 때 문제가 발생할 수 있습니다.
따라서, 테스트 환경에서 Lottie 모듈을 사용하는 부분을 mocking하여, 실제로 Lottie 애니메이션을 렌더링하지 않도록 변경하여 테스트를 통과할 수 있었습니다.