Skip to content

Commit 4978516

Browse files
authored
Merge pull request #72 from Stack-Knowledge/feature/styleSettings
[Admin, Common] QA
2 parents 83d46f6 + e426215 commit 4978516

File tree

3 files changed

+83
-19
lines changed

3 files changed

+83
-19
lines changed

packages/common/src/components/Header/index.tsx

+31-16
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ interface HeaderProps {
1818

1919
const Header: React.FC<HeaderProps> = ({ role }) => {
2020
const pathname = usePathname();
21+
2122
if (pathname === '/auth/login') return <></>;
2223

2324
const handleLinkClick = (e: any) => {
@@ -26,6 +27,8 @@ const Header: React.FC<HeaderProps> = ({ role }) => {
2627
}
2728
};
2829

30+
const getIsActive = (targetPath: string) => pathname === targetPath;
31+
2932
return (
3033
<S.HeaderWrapper>
3134
<S.HeaderContainer>
@@ -34,41 +37,53 @@ const Header: React.FC<HeaderProps> = ({ role }) => {
3437
<S.Title>Stack Knowledge</S.Title>
3538
</S.LogoContainer>
3639
<S.MenuNav role={role}>
37-
<S.MenuItemWrapper href='/' onClick={handleLinkClick}>
40+
<S.MenuStrokeItemWrapper href='/' isActive={getIsActive('/')}>
3841
<HomeIcon />
3942
<S.ItemTitle></S.ItemTitle>
40-
</S.MenuItemWrapper>
43+
</S.MenuStrokeItemWrapper>
44+
4145
{role === 'admin' ? (
4246
<>
43-
<S.MenuItemWrapper
47+
<S.MenuStrokeItemWrapper
4448
href='/mission/scoring'
45-
onClick={handleLinkClick}
49+
isActive={getIsActive('mission/scoring')}
4650
>
4751
<QuestionIcon />
4852
<S.ItemTitle>채점하기</S.ItemTitle>
49-
</S.MenuItemWrapper>
50-
<S.MenuItemWrapper
53+
</S.MenuStrokeItemWrapper>
54+
55+
<S.MenuFillItemWrapper
5156
href='/mission/create'
52-
onClick={handleLinkClick}
57+
isActive={getIsActive('/mission/create')}
5358
>
5459
<MadeIcon />
5560
<S.ItemTitle>만들기</S.ItemTitle>
56-
</S.MenuItemWrapper>
61+
</S.MenuFillItemWrapper>
5762
</>
5863
) : (
59-
<S.MenuItemWrapper href='/mission/list' onClick={handleLinkClick}>
60-
<QuestionIcon />
61-
<S.ItemTitle>문제</S.ItemTitle>
62-
</S.MenuItemWrapper>
64+
<>
65+
<S.MenuFillItemWrapper
66+
href='/mission/list'
67+
isActive={getIsActive('/mission/list')}
68+
>
69+
<QuestionIcon />
70+
<S.ItemTitle>문제</S.ItemTitle>
71+
</S.MenuFillItemWrapper>
72+
</>
6373
)}
64-
<S.MenuItemWrapper href='/shop' onClick={handleLinkClick}>
74+
75+
<S.MenuFillItemWrapper href='/shop' isActive={getIsActive('/shop')}>
6576
<ShopIcon />
6677
<S.ItemTitle>상점</S.ItemTitle>
67-
</S.MenuItemWrapper>
68-
<S.MenuItemWrapper href='/ranking' onClick={handleLinkClick}>
78+
</S.MenuFillItemWrapper>
79+
80+
<S.MenuFillItemWrapper
81+
href='/ranking'
82+
isActive={getIsActive('/ranking')}
83+
>
6984
<RankingIcon />
7085
<S.ItemTitle>랭킹</S.ItemTitle>
71-
</S.MenuItemWrapper>
86+
</S.MenuFillItemWrapper>
7287
</S.MenuNav>
7388
</S.HeaderContainer>
7489
</S.HeaderWrapper>

packages/common/src/components/Header/style.ts

+50-2
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,61 @@ export const MenuNav = styled.div`
3434
gap: ${({ role }) => (role === 'admin' ? '1.5rem' : '2.25rem')};
3535
`;
3636

37-
export const MenuItemWrapper = styled(Link)`
37+
export const MenuStrokeItemWrapper = styled(Link)<{ isActive?: boolean }>`
3838
display: flex;
3939
align-items: center;
40+
color: ${({ isActive, theme }) =>
41+
isActive ? theme.color.primary : theme.color.black};
42+
43+
& svg {
44+
path {
45+
stroke: ${({ isActive, theme }) =>
46+
isActive ? theme.color.primary : theme.color.black};
47+
}
48+
}
49+
50+
&:hover {
51+
span,
52+
& svg {
53+
color: ${({ theme }) => theme.color.primary};
54+
55+
path {
56+
stroke: ${({ theme }) => theme.color.primary};
57+
}
58+
}
59+
}
60+
`;
61+
62+
export const MenuFillItemWrapper = styled(Link)<{ isActive?: boolean }>`
63+
${({ isActive, theme }) => {
64+
const activeColor = isActive ? theme.color.primary : theme.color.black;
65+
const hoverColor = theme.color.primary;
66+
return `
67+
display: flex;
68+
align-items: center;
69+
color:${activeColor};
70+
71+
& svg {
72+
circle { stroke:${activeColor};}
73+
74+
rect, path {fill:${activeColor};}
75+
}
76+
77+
&:hover{
78+
span,
79+
& svg{
80+
color:${hoverColor};
81+
82+
circle{stroke:${hoverColor};}
83+
84+
rect,path{fill:${hoverColor};}
85+
}
86+
}
87+
`;
88+
}}
4089
`;
4190

4291
export const ItemTitle = styled.span`
4392
${({ theme }) => theme.typo.body3};
44-
color: ${({ theme }) => theme.color.black};
4593
margin-left: 0.9375rem;
4694
`;

projects/admin/src/PageContainer/GradingPage/style.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ export const Title = styled.span`
2323

2424
export const SectionContainer = styled.span`
2525
display: flex;
26-
gap: 24.75rem;
26+
display: flex;
27+
justify-content: space-between;
2728
padding-bottom: 1.25rem;
2829
`;
2930

0 commit comments

Comments
 (0)