Skip to content

Commit 9b64d4f

Browse files
authored
Merge pull request #187 from vecosystem/feature/#185-sidebar-ux-develop
2 parents 152da09 + 42f258d commit 9b64d4f

6 files changed

Lines changed: 54 additions & 8 deletions

File tree

โ€Žsrc/components/Sidebar/FullSidebarContent.tsxโ€Ž

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ const FullSidebarContent = ({
113113

114114
<div className="flex flex-col items-start self-stretch">
115115
{/* ์ฒซ ๋ฒˆ์งธ ๋“œ๋กญ๋‹ค์šด: ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ธฐ๋ณธ ํŒ€ */}
116-
<DropdownMenu dropdownId="ws-default-team" headerTitle="์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ธฐ๋ณธ ํŒ€" initialOpen={true}>
116+
<DropdownMenu
117+
dropdownId="ws-default-team"
118+
headerTitle="์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ธฐ๋ณธ ํŒ€"
119+
initialOpen={true}
120+
>
117121
<div className="flex flex-col">
118122
{isLoading ? null : (
119123
<DropdownMenu
@@ -169,9 +173,11 @@ const FullSidebarContent = ({
169173
<DropdownMenu dropdownId="my-teams" headerTitle="๋‚˜์˜ ํŒ€" initialOpen={true}>
170174
{/* Team ๋“œ๋กญ๋‹ค์šด (๋‚ด๋ถ€ ๋“œ๋กญ๋‹ค์šด) */}
171175
{isLoading ? null : myTeams.length === 0 ? (
172-
<div className="text-gray-400 font-xsmall-r px-[3rem] pb-[1.6rem]">
173-
๋“ฑ๋ก๋œ ํŒ€์ด ์—†์Šต๋‹ˆ๋‹ค.
174-
</div>
176+
<button type="button" onClick={() => navigate('/workspace/setting/team-list')}>
177+
<div className="text-gray-400 font-xsmall-r px-[3rem] pb-[1.6rem] cursor-pointer underline underline-offset-[0.3rem]">
178+
ํŒ€ ์ƒ์„ฑํ•˜๊ธฐ
179+
</div>
180+
</button>
175181
) : (
176182
<>
177183
<SortableDropdownList

โ€Žsrc/components/Sidebar/SidebarItem.tsxโ€Ž

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,20 @@ const SidebarItem = ({
2222
type="button"
2323
className="flex grow items-center gap-[0.8rem] cursor-pointer"
2424
>
25-
<span className="w-[2.4rem] h-[2.4rem] shrink-0 aspect-square">
25+
<span className="w-[2.4rem] h-[2.4rem] shrink-0">
2626
<span className="block group-hover:hidden">
27-
<img src={defaultIcon} alt="defaultIcon" />
27+
<img
28+
src={defaultIcon}
29+
alt="defaultIcon"
30+
className="w-full h-full rounded-full object-cover"
31+
/>
2832
</span>
2933
<span className="hidden group-hover:block">
30-
<img src={hoverIcon} alt="hoverIcon" />
34+
<img
35+
src={hoverIcon}
36+
alt="hoverIcon"
37+
className="w-full h-full rounded-full object-cover"
38+
/>
3139
</span>
3240
</span>
3341
<span className="font-small-r text-gray-600 letter-spacing-[0.028rem] group-hover:text-primary-blue group-hover:font-bold">
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { useEffect } from 'react';
2+
import { useUIStore } from '../stores/ui';
3+
4+
export const useAutoCloseSidebar = (breakpoint = 768) => {
5+
const { setSidebarOpen } = useUIStore();
6+
7+
useEffect(() => {
8+
console.log('useAutoCloseSidebar');
9+
const mediaQuery = window.matchMedia(`(max-width: ${breakpoint}px)`);
10+
11+
const handleMediaChange = (e: MediaQueryListEvent | MediaQueryList) => {
12+
if (e.matches) {
13+
setSidebarOpen(false);
14+
}
15+
};
16+
17+
handleMediaChange(mediaQuery); // ์ดˆ๊ธฐ ์ƒํƒœ ํ™•์ธ
18+
mediaQuery.addEventListener('change', handleMediaChange);
19+
20+
return () => {
21+
mediaQuery.removeEventListener('change', handleMediaChange);
22+
};
23+
}, [breakpoint, setSidebarOpen]);
24+
};

โ€Žsrc/layouts/ProtectedLayout.tsxโ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { LOCAL_STORAGE_KEY } from '../constants/key.ts';
1010
import { useLocalStorage } from '../hooks/useLocalStorage.ts';
1111
import { useUIStore } from '../stores/ui.ts';
1212
import { SIDEBAR_WIDTH } from '../constants/sidebar';
13+
import { useAutoCloseSidebar } from '../hooks/useAutoCloseSidebar';
1314

1415
const ProtectedLayout = () => {
1516
const location = useLocation();
@@ -20,6 +21,8 @@ const ProtectedLayout = () => {
2021
const isLoggedIn = !!getAccessToken() && !!getInviteUrl();
2122
const { sidebarOpen } = useUIStore();
2223

24+
useAutoCloseSidebar();
25+
2326
if (!isLoggedIn) {
2427
return <Navigate to="/onboarding" replace />;
2528
}

โ€Žsrc/pages/setting/SettingWorkspaceProfile.tsxโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const SettingWorkspaceProfile = () => {
1818
<button className="w-[4.2rem] h-[4.2rem] flex items-center justify-center">
1919
<img
2020
src={workspaceData?.workspaceImageUrl || vecocirclenavy}
21-
className="w-full h-full"
21+
className="w-full h-full rounded-full object-cover"
2222
alt="ํ”„๋กœํ•„ ์‚ฌ์ง„"
2323
/>
2424
</button>

โ€Žsrc/stores/ui.tsโ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { immer } from 'zustand/middleware/immer';
44

55
interface UIState {
66
sidebarOpen: boolean;
7+
setSidebarOpen: (open: boolean) => void;
78
toggleSidebar: () => void;
89

910
dropdownOpen: Record<string, boolean>;
@@ -15,6 +16,10 @@ export const useUIStore = create<UIState>()(
1516
persist(
1617
immer((set) => ({
1718
sidebarOpen: true,
19+
setSidebarOpen: (open) =>
20+
set((s) => {
21+
s.sidebarOpen = open;
22+
}),
1823
toggleSidebar: () =>
1924
set((s) => {
2025
s.sidebarOpen = !s.sidebarOpen;

0 commit comments

Comments
ย (0)