Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,25 @@ import Router from './routes/Router';
import { RecoilRoot } from 'recoil';
import { GlobalStyle } from '@/styles';
import { Header, Spinner } from '@/components';
import { ModalsProvider, WaffleCardsProvider } from '@/contexts';
import {
ModalsProvider,
WaffleCardsProvider,
LoadingProvider,
} from '@/contexts';

function App() {
return (
<RecoilRoot>
<Suspense fallback={<Spinner loading />}>
<GlobalStyle />
<Header />
<ModalsProvider>
<WaffleCardsProvider>
<Router />
</WaffleCardsProvider>
</ModalsProvider>
<LoadingProvider>
<ModalsProvider>
<WaffleCardsProvider>
<Router />
</WaffleCardsProvider>
</ModalsProvider>
</LoadingProvider>
Copy link
Collaborator

Choose a reason for hiding this comment

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

그럼 Spinner컴포넌트는
</ModalsProvider>
여기에
</LoadingProvider>
항상 있는 거고 필요한 페이지에서 true, false해서 보여지고 안보여지게 하는 거 맞죠??

Copy link
Collaborator

Choose a reason for hiding this comment

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

이거 리뷰해놓고 제출을 안하고있었네요 ㅠㅠㅋㅋ

Copy link
Member Author

Choose a reason for hiding this comment

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

@yyoooon
Spinner 컴포넌트 </LoadingProvider> 에서만 관리해여!!

</Suspense>
</RecoilRoot>
);
Expand Down
5 changes: 5 additions & 0 deletions src/contexts/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,8 @@ export {
useWaffleCardsState,
useWaffleCardsDispatch,
} from './waffleCards/waffleCardsProvider';
export {
LoadingProvider,
useLoadingState,
useLoadingDispatch,
} from './loading/loadingProvider';
28 changes: 28 additions & 0 deletions src/contexts/loading/loadingProvider.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import React, { createContext, useContext, useState } from 'react';
import { Spinner } from '@/components';

const LoadingDispatchContext = createContext<(loading: boolean) => void>(() => {
return;
});

const LoadingStateContext = createContext(false);

interface LoadingProviderProps {
children: React.ReactElement | React.ReactElement[];
}

export const LoadingProvider = ({ children }: LoadingProviderProps) => {
const [loading, setLoading] = useState<boolean>(false);

return (
<LoadingStateContext.Provider value={loading}>
<LoadingDispatchContext.Provider value={setLoading}>
{children}
<Spinner loading={loading} />
</LoadingDispatchContext.Provider>
</LoadingStateContext.Provider>
);
};

export const useLoadingState = () => useContext(LoadingStateContext);
export const useLoadingDispatch = () => useContext(LoadingDispatchContext);
19 changes: 9 additions & 10 deletions src/pages/HomePage/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { useModals } from '@/hooks';
import styled from '@emotion/styled';
import { useWaffleCardsDispatch } from '@/contexts';
import { waffleCardApi, commentApi, likeApi } from '@/apis';
import { useLoadingDispatch } from '@/contexts';
import {
Tab,
Spinner,
WaffleCardsList,
ScrollGuide,
Modals,
Expand All @@ -17,11 +17,11 @@ import {
const HomePage = () => {
const { openModal } = useModals();
const [tabValue, setTabValue] = useState('total');
const [isLoading, setIsLoading] = useState(false);
const setLoading = useLoadingDispatch();
const { setWaffleCardsByType, refreshWaffleCards } = useWaffleCardsDispatch();

const handleClickWaffleCard = async waffleCard => {
setIsLoading(true);
setLoading(true);

try {
const response = await commentApi.getCommentsByWaffleCardId(
Expand All @@ -44,7 +44,7 @@ const HomePage = () => {
});
}

setIsLoading(false);
setLoading(false);
};

const handleClickWaffleCardCreate = async () => {
Expand Down Expand Up @@ -78,10 +78,10 @@ const HomePage = () => {
}).then(async result => {
if (result.isConfirmed) {
try {
setIsLoading(true);
setLoading(true);
await waffleCardApi.deleteWaffleCard(waffleCardId);
await refreshWaffleCards(tabValue);
setIsLoading(false);
setLoading(false);
} catch (error) {
console.error(
`in ChattingCardModal : 댓글 삭제 실패 - ${error.message}`,
Expand Down Expand Up @@ -109,13 +109,13 @@ const HomePage = () => {

useEffect(() => {
const initWaffleCardsByType = async () => {
setIsLoading(true);
setLoading(true);
await setWaffleCardsByType(tabValue, { cached: true });
setIsLoading(false);
setLoading(false);
};

initWaffleCardsByType();
}, [setWaffleCardsByType, tabValue]);
}, [setLoading, setWaffleCardsByType, tabValue]);

return (
<Container>
Expand All @@ -128,7 +128,6 @@ const HomePage = () => {
onClickWaffleCardDelete={handleClickWaffleCardDelete}
onClickLikeToggle={handleClickLikeToggle}
/>
<Spinner loading={isLoading} />
<Modals />
{tabValue === 'total' && <ScrollGuide />}
</Container>
Expand Down
10 changes: 8 additions & 2 deletions src/pages/LoginPage/index.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
import { useEffect } from 'react';
import Swal from 'sweetalert2';
import { useNavigate } from 'react-router-dom';
import Common from '@/styles';
import { useForm } from '@/hooks';
import { useUser } from '@/hooks';
import styled from '@emotion/styled';
import { formValidator } from '@/utils';
import { Text, Button, Input, BackButton, Spinner } from '@/components';
import { useLoadingDispatch } from '@/contexts';
import { Text, Button, Input, BackButton } from '@/components';

const LoginPage = () => {
const { login } = useUser();
const navigate = useNavigate();
const setLoading = useLoadingDispatch();
const { isLoading, errors, handleChange, handleSubmit } = useForm({
initialValues: {
email: '',
Expand Down Expand Up @@ -57,6 +60,10 @@ const LoginPage = () => {
navigate('/signup');
};

useEffect(() => {
setLoading(isLoading);
}, [isLoading, setLoading]);

return (
<Container>
<StyledBackButton />
Expand All @@ -82,7 +89,6 @@ const LoginPage = () => {
가입하기
</StyledButton>
</ContentContainer>
<Spinner loading={isLoading} />
</Container>
);
};
Expand Down
10 changes: 8 additions & 2 deletions src/pages/SignUpPage/index.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
import { useEffect } from 'react';
import Swal from 'sweetalert2';
import { useNavigate } from 'react-router-dom';
import Common from '@/styles';
import { authApi } from '@/apis';
import { useForm } from '@/hooks';
import styled from '@emotion/styled';
import { formValidator } from '@/utils';
import { Text, Button, Input, BackButton, Spinner } from '@/components';
import { useLoadingDispatch } from '@/contexts';
import { Text, Button, Input, BackButton } from '@/components';

const SignUpPage = () => {
const navigate = useNavigate();
const setLoading = useLoadingDispatch();
const { isLoading, errors, handleChange, handleSubmit } = useForm({
initialValues: {
email: '',
Expand Down Expand Up @@ -67,6 +70,10 @@ const SignUpPage = () => {
},
});

useEffect(() => {
setLoading(isLoading);
}, [isLoading, setLoading]);

return (
<Container>
<StyledBackButton />
Expand Down Expand Up @@ -94,7 +101,6 @@ const SignUpPage = () => {
</InputWrapper>
<StyledButton type="submit">가입하기</StyledButton>
</ContentContainer>
<Spinner loading={isLoading} />
</Container>
);
};
Expand Down