Skip to content

Commit c6819c5

Browse files
authored
Merge pull request #166 from boostcampwm-2024/feature-fe-#165
에디터에 패널 open/close 기능 추가
2 parents 505dd38 + 7f3d72d commit c6819c5

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed

frontend/src/App.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
2-
32
import Sidebar from "./components/sidebar";
43
import HoverTrigger from "./components/HoverTrigger";
54
import EditorView from "./components/EditorView";
@@ -12,7 +11,7 @@ const queryClient = new QueryClient();
1211
function App() {
1312
return (
1413
<QueryClientProvider client={queryClient}>
15-
<div className="h-screen bg-white">
14+
<div className="fixed inset-0 bg-white">
1615
<SideWrapper side="right">
1716
<EditorView />
1817
</SideWrapper>
Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,31 @@
1+
import { PanelRightClose, PanelLeftClose } from "lucide-react";
2+
import usePageStore from "@/store/usePageStore";
3+
14
interface EditorLayoutProps {
25
children: React.ReactNode;
36
}
47

5-
export default function EditorLayout({ children }: EditorLayoutProps) {
8+
const EditorLayout = ({ children }: EditorLayoutProps) => {
9+
const { isPanelOpen, togglePanel } = usePageStore();
10+
611
return (
7-
<div className="relative h-[720px] w-[520px] overflow-auto border-muted bg-background bg-white sm:rounded-lg sm:border sm:shadow-lg">
8-
{children}
12+
<div
13+
className={`absolute right-0 h-[720px] w-[520px] transform rounded-bl-lg rounded-br-lg rounded-tr-lg border bg-white shadow-lg transition-transform duration-100 ease-in-out ${isPanelOpen ? "translate-x-0" : "translate-x-full"}`}
14+
>
15+
<div className="h-full overflow-auto">{children}</div>
16+
17+
<button
18+
onClick={togglePanel}
19+
className="absolute -left-8 top-0 z-50 flex h-8 w-8 !cursor-pointer items-center justify-center rounded-l border-b border-l border-t border-[#e0e6ee] bg-[#f5f5f5]"
20+
>
21+
{isPanelOpen ? (
22+
<PanelRightClose className="h-4 w-4" />
23+
) : (
24+
<PanelLeftClose className="h-4 w-4" />
25+
)}
26+
</button>
927
</div>
1028
);
11-
}
29+
};
30+
31+
export default EditorLayout;

frontend/src/components/layout/SideWrapper.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ type SideWrapperProps = {
1313
};
1414

1515
export default function SideWrapper({ side, children }: SideWrapperProps) {
16-
return <div className={`absolute z-10 ${sideStyle[side]} `}>{children}</div>;
16+
return <div className={`absolute z-50 ${sideStyle[side]} `}>{children}</div>;
1717
}

frontend/src/store/usePageStore.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,25 @@ import { create } from "zustand";
22

33
interface PageStore {
44
currentPage: number | null;
5+
isPanelOpen: boolean;
56
setCurrentPage: (currentPage: number | null) => void;
7+
togglePanel: () => void;
8+
setIsPanelOpen: (isOpen: boolean) => void;
69
}
710

811
const usePageStore = create<PageStore>((set) => ({
912
currentPage: null,
10-
setCurrentPage: (currentPage: number | null) => set({ currentPage }),
13+
isPanelOpen: true,
14+
setCurrentPage: (currentPage: number | null) =>
15+
set((state) => ({
16+
currentPage,
17+
isPanelOpen:
18+
currentPage === state.currentPage
19+
? !state.isPanelOpen
20+
: currentPage !== null,
21+
})),
22+
togglePanel: () => set((state) => ({ isPanelOpen: !state.isPanelOpen })),
23+
setIsPanelOpen: (isPanelOpen: boolean) => set({ isPanelOpen }),
1124
}));
1225

1326
export default usePageStore;

0 commit comments

Comments
 (0)