Skip to content

Commit d5e9b47

Browse files
authored
Merge pull request #261 from YAPP-Github/develop
[RELEASE] 1.4.8
2 parents 2bb2714 + 18870aa commit d5e9b47

70 files changed

Lines changed: 748 additions & 341 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

next.config.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default withSentryConfig(withVanillaExtract(nextConfig), {
5050
silent: !process.env.CI,
5151

5252
// 소스맵 확장 (빌드 시간 증가)
53-
widenClientFileUpload: true,
53+
widenClientFileUpload: isProd,
5454

5555
// ad-blocker 방지를 위해 사용 (서버 비용 증가 시 제거)
5656
tunnelRoute: isProd,

src/apis/config/createBaseFetchClient.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2-
import { CustomError, NetworkError, UnhandledError } from './error';
2+
import { AuthError, CustomError, NetworkError, UnhandledError } from './error';
33
import { APIErrorResponse, AuthErrorCode } from './types';
44
import { getDefaultHeader, isAuthError } from './utils';
55

@@ -79,7 +79,16 @@ export const createBaseFetchClient = (options: BaseFetchClientOptions = {}) => {
7979
url,
8080
});
8181

82-
throw new CustomError({ code: apiError.code, status: response.status });
82+
switch (apiError.code) {
83+
case 'AU0001':
84+
case 'AU0002':
85+
case 'AU0003':
86+
case 'AU0004':
87+
case 'AU0005':
88+
throw new AuthError({ code: apiError.code, status: response.status });
89+
default:
90+
throw new CustomError({ code: apiError.code, status: response.status });
91+
}
8392
}
8493

8594
return await response.json();
@@ -89,7 +98,7 @@ export const createBaseFetchClient = (options: BaseFetchClientOptions = {}) => {
8998
throw new NetworkError();
9099
}
91100

92-
if (error instanceof CustomError) {
101+
if (error instanceof CustomError || error instanceof AuthError) {
93102
throw error;
94103
}
95104

src/apis/config/error.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ERROR_MESSAGES } from './constants';
2-
import { ErrorCode } from './types';
2+
import { AuthErrorCode, ErrorCode } from './types';
33

44
export const SERVER_ERROR_STATUS = 500;
55
export const NETWORK_ERROR_STATUS = 5001;
@@ -11,6 +11,10 @@ interface CustomErrorParams {
1111
message?: string;
1212
}
1313

14+
interface AuthErrorParams extends Omit<CustomErrorParams, 'code'> {
15+
code: AuthErrorCode;
16+
}
17+
1418
export class CustomError extends Error {
1519
code: ErrorCode;
1620
status: number;
@@ -24,6 +28,19 @@ export class CustomError extends Error {
2428
}
2529
}
2630

31+
export class AuthError extends Error {
32+
code: AuthErrorCode;
33+
status: number;
34+
message: string;
35+
36+
constructor({ code, status, message }: AuthErrorParams) {
37+
super();
38+
this.code = code;
39+
this.status = status;
40+
this.message = message || ERROR_MESSAGES[code];
41+
}
42+
}
43+
2744
export class NetworkError extends Error {
2845
status = NETWORK_ERROR_STATUS;
2946
message = '네트워크가 불안정해요. 다시 시도해주세요!';

src/app/home/components/ExperimentPostSection/ExperimentPostSection.css.ts renamed to src/app/home/components/ExperimentContentSection/ExperimentContentSection.css.ts

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1-
import { style } from '@vanilla-extract/css';
1+
import { keyframes, style } from '@vanilla-extract/css';
22

33
import { colors } from '@/styles/colors';
44
import { fonts } from '@/styles/fonts.css';
55

6+
const fadeIn = keyframes({
7+
'0%': {
8+
opacity: 0.3,
9+
},
10+
'100%': {
11+
opacity: 1,
12+
},
13+
});
14+
615
export const postContainerLayout = style({
716
display: 'grid',
817
gridTemplateRows: 'auto 1.6rem auto 1.6rem auto 0.6rem auto',
@@ -74,24 +83,10 @@ export const filterWrapper = style({
7483
'screen and (max-width: 767px)': {
7584
padding: '1.6rem',
7685
overflowX: 'auto',
77-
},
78-
},
79-
});
80-
81-
export const recruitCheckLabel = style({
82-
...fonts.label.large.SB14,
83-
color: colors.text06,
84-
});
8586

86-
export const recruitCheckWrapper = style({
87-
gridArea: 'checkbox',
88-
display: 'flex',
89-
alignItems: 'center',
90-
91-
'@media': {
92-
'screen and (max-width: 767px)': {
93-
padding: '0.4rem 1.6rem',
94-
justifyContent: 'flex-end',
87+
'::-webkit-scrollbar': {
88+
display: 'none',
89+
},
9590
},
9691
},
9792
});
@@ -100,6 +95,7 @@ export const totalPostCountWrapper = style({
10095
gridArea: 'count',
10196
display: 'flex',
10297
alignItems: 'center',
98+
animation: `${fadeIn} 0.2s ease-out`,
10399

104100
'@media': {
105101
'screen and (max-width: 767px)': {
@@ -109,11 +105,6 @@ export const totalPostCountWrapper = style({
109105
},
110106
});
111107

112-
export const totalPostCount = style({
113-
...fonts.label.large.R14,
114-
color: colors.text03,
115-
});
116-
117-
export const postListContainer = style({
108+
export const postListWrapper = style({
118109
gridArea: 'posts',
119110
});
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { Suspense } from 'react';
2+
3+
import {
4+
postContainerLayout,
5+
postContainerTitleDesktop,
6+
horizontalLineMobile,
7+
filterWrapper,
8+
totalPostCountWrapper,
9+
postListWrapper,
10+
} from './ExperimentContentSection.css';
11+
import ExperimentPostSection from '../ExperimentPostSection/ExperimentPostSection';
12+
import ExperimentPostTotalCount from '../ExperimentPostTotalCount/ExperimentPostTotalCount';
13+
import FilterSection from '../FilterSection/FilterSection';
14+
import RecruitStatusCheckbox from '../RecruitStatusCheckbox/RecruitStatusCheckbox';
15+
16+
import { ExperimentPostListFilters } from '@/apis/post';
17+
import FilterSkeleton from '@/components/Skeleton/FilterSkeleton/FilterSkeleton';
18+
import PostListSkeleton from '@/components/Skeleton/PostListSkeleton/PostListSkeleton';
19+
import TotalCountSkeleton from '@/components/Skeleton/TotalCountSkeleton/TotalCountSkeleton';
20+
21+
interface ExperimentContentSectionProps {
22+
searchParams: {
23+
[k in keyof ExperimentPostListFilters]?: string;
24+
};
25+
}
26+
27+
const ExperimentContentSection = ({ searchParams }: ExperimentContentSectionProps) => {
28+
return (
29+
<section className={postContainerLayout}>
30+
<h2 className={postContainerTitleDesktop}>공고를 확인해 보세요</h2>
31+
<div className={horizontalLineMobile} />
32+
33+
{/* 필터링 */}
34+
<div className={filterWrapper}>
35+
<Suspense fallback={<FilterSkeleton />}>
36+
<FilterSection searchParams={searchParams} />
37+
</Suspense>
38+
</div>
39+
40+
{/* 모집 중인 공고만 보기 */}
41+
<RecruitStatusCheckbox />
42+
43+
{/* 총 공고 개수 */}
44+
<div className={totalPostCountWrapper}>
45+
<Suspense fallback={<TotalCountSkeleton />}>
46+
<ExperimentPostTotalCount searchParams={searchParams} />
47+
</Suspense>
48+
</div>
49+
50+
{/* 공고 목록 */}
51+
<div className={postListWrapper}>
52+
<Suspense fallback={<PostListSkeleton />}>
53+
<ExperimentPostSection searchParams={searchParams} />
54+
</Suspense>
55+
</div>
56+
</section>
57+
);
58+
};
59+
60+
export default ExperimentContentSection;

src/app/home/components/ExperimentPostSection/ExperimentPostCardListContainer/ExperimentPostCardList/EmptyPostCard/EmptyPostCard.css.ts renamed to src/app/home/components/ExperimentPostCardListContainer/ExperimentPostCardList/EmptyPostCard/EmptyPostCard.css.ts

File renamed without changes.

src/app/home/components/ExperimentPostSection/ExperimentPostCardListContainer/ExperimentPostCardList/EmptyPostCard/EmptyPostCard.tsx renamed to src/app/home/components/ExperimentPostCardListContainer/ExperimentPostCardList/EmptyPostCard/EmptyPostCard.tsx

File renamed without changes.

src/app/home/components/ExperimentPostSection/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCard/ExperimentPostCard.css.ts renamed to src/app/home/components/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCard/ExperimentPostCard.css.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { style, styleVariants } from '@vanilla-extract/css';
1+
import { keyframes, style, styleVariants } from '@vanilla-extract/css';
22

33
import { colors } from '@/styles/colors';
44
import { fonts } from '@/styles/fonts.css';
@@ -23,6 +23,15 @@ export const textEllipsis = styleVariants({
2323
},
2424
});
2525

26+
const fadeIn = keyframes({
27+
'0%': {
28+
opacity: 0.3,
29+
},
30+
'100%': {
31+
opacity: 1,
32+
},
33+
});
34+
2635
export const postCardLayout = style({
2736
position: 'relative',
2837
display: 'grid',
@@ -42,6 +51,7 @@ export const postCardLayout = style({
4251
padding: '1.6rem 2rem',
4352
borderRadius: '1.2rem',
4453
backgroundColor: colors.field01,
54+
animation: `${fadeIn} 0.2s ease-out`,
4555

4656
selectors: {
4757
'&:hover': {

src/app/home/components/ExperimentPostSection/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCard/ExperimentPostCard.tsx renamed to src/app/home/components/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCard/ExperimentPostCard.tsx

File renamed without changes.

src/app/home/components/ExperimentPostSection/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCardList.css.ts renamed to src/app/home/components/ExperimentPostCardListContainer/ExperimentPostCardList/ExperimentPostCardList.css.ts

File renamed without changes.

0 commit comments

Comments
 (0)