Skip to content

Commit 75a436d

Browse files
authored
Merge pull request #104 from boostcampwm-2024/dev-fe
dev-fe 브랜치 메인으로 머지
2 parents a2ac04c + 0cd685a commit 75a436d

Some content is hidden

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

59 files changed

+3158
-168
lines changed

frontend/components.json

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"$schema": "https://ui.shadcn.com/schema.json",
3+
"style": "default",
4+
"rsc": false,
5+
"tsx": true,
6+
"tailwind": {
7+
"config": "tailwind.config.js",
8+
"css": "src/index.css",
9+
"baseColor": "slate",
10+
"cssVariables": true,
11+
"prefix": ""
12+
},
13+
"aliases": {
14+
"components": "@/components",
15+
"utils": "@/lib/utils",
16+
"ui": "@/components/editor/ui",
17+
"lib": "@/lib",
18+
"hooks": "@/hooks"
19+
},
20+
"iconLibrary": "lucide"
21+
}

frontend/package.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,44 @@
33
"private": true,
44
"version": "0.0.0",
55
"type": "module",
6+
"exports": {
7+
".": {
8+
"types": "./dist/index.d.ts",
9+
"import": "./dist/index.es.js",
10+
"require": "./dist/index.cjs.js"
11+
}
12+
},
613
"scripts": {
714
"dev": "vite --host",
815
"build": "tsc -b && vite build",
916
"lint": "eslint .",
1017
"preview": "vite preview --host"
1118
},
1219
"dependencies": {
20+
"@radix-ui/react-popover": "^1.1.2",
21+
"@radix-ui/react-scroll-area": "^1.2.0",
22+
"@radix-ui/react-separator": "^1.1.0",
23+
"@radix-ui/react-slot": "^1.1.0",
1324
"@tanstack/react-query": "^5.59.19",
25+
"@xyflow/react": "^12.3.4",
1426
"autoprefixer": "^10.4.20",
27+
"axios": "^1.7.7",
1528
"class-variance-authority": "^0.7.0",
1629
"clsx": "^2.1.1",
30+
"framer-motion": "^11.11.11",
1731
"highlight.js": "^11.10.0",
1832
"lowlight": "^3.1.0",
33+
"lucide-react": "^0.454.0",
34+
"next-themes": "^0.4.3",
1935
"novel": "^0.5.0",
2036
"postcss": "^8.4.47",
2137
"react": "^18.3.1",
2238
"react-dom": "^18.3.1",
2339
"tailwind-merge": "^2.5.4",
2440
"tailwindcss": "^3.4.14",
41+
"tailwindcss-animate": "^1.0.7",
42+
"tailwindest": "^2.3.6",
43+
"use-debounce": "^10.0.4",
2544
"zustand": "^5.0.1"
2645
},
2746
"devDependencies": {

frontend/public/logo.png

244 KB
Loading

frontend/public/warning-icon.png

2.72 KB
Loading

frontend/public/workspace-logo.svg

Lines changed: 3 additions & 0 deletions
Loading

frontend/src/App.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
22

33
import Sidebar from "./components/sidebar";
44
import HoverTrigger from "./components/HoverTrigger";
5-
import Editor from "./components/editor";
6-
import { defaultEditorContent } from "./components/editor/content";
5+
import EditorView from "./components/editor/EditorView";
76
import SideWrapper from "./components/layout/SideWrapper";
7+
import Canvas from "./components/canvas";
88

99
const queryClient = new QueryClient();
1010

1111
function App() {
1212
return (
1313
<QueryClientProvider client={queryClient}>
14-
<div className="h-screen bg-[#231F20]">
14+
<div className="h-screen bg-white">
1515
<SideWrapper side="right">
16-
<Editor initialValue={defaultEditorContent} />
16+
<EditorView />
1717
</SideWrapper>
18-
<HoverTrigger className="w-64">
18+
<Canvas className="z-0 h-full w-full" />
19+
<HoverTrigger className="absolute inset-0 z-20 w-64">
1920
<Sidebar />
2021
</HoverTrigger>
2122
</div>

frontend/src/api/node.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Get, Post, Patch, Delete } from "@/lib/axios";
2+
3+
export interface NodeRequest {
4+
title: string;
5+
x: number;
6+
y: number;
7+
}
8+
9+
export interface NodeCoors {
10+
x: number;
11+
y: number;
12+
}
13+
14+
export const getNodeCoors = async (id: number) => {
15+
const url = `/node${id}`;
16+
17+
const res = await Get<NodeCoors>(url);
18+
return res.data;
19+
};
20+
21+
export const createNode = async (id: number, nodeData: NodeRequest) => {
22+
const url = `/node/${id}`;
23+
24+
const res = await Post<null, NodeRequest>(url, nodeData);
25+
return res.data;
26+
};
27+
28+
export const deleteNode = async (id: number) => {
29+
const url = `/node/${id}`;
30+
31+
const res = await Delete<null>(url);
32+
return res.data;
33+
};
34+
35+
export const updateNode = async (id: number, nodeData: NodeRequest) => {
36+
const url = `/node/${id}`;
37+
38+
const res = await Patch<null, NodeRequest>(url, nodeData);
39+
return res.data;
40+
};

frontend/src/api/page.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { JSONContent } from "novel";
2+
3+
import { Get, Post, Delete, Patch } from "@/lib/axios";
4+
5+
export type Page = {
6+
id: number;
7+
title: string;
8+
content: JSONContent;
9+
};
10+
11+
export type CreatePageRequest = {
12+
title: string;
13+
content: JSONContent;
14+
x: number;
15+
y: number;
16+
};
17+
18+
export type PageRequest = {
19+
title: string;
20+
content: JSONContent;
21+
};
22+
23+
export const getPage = async (id: number) => {
24+
const url = `/page/${id}`;
25+
26+
const res = await Get<Page>(url);
27+
return res.data;
28+
};
29+
30+
export const getPages = async () => {
31+
const url = "/page";
32+
33+
const res = await Get<Page[]>(url);
34+
return res.data;
35+
};
36+
37+
export const createPage = async (pageData: CreatePageRequest) => {
38+
const url = `/page`;
39+
40+
const res = await Post<null, CreatePageRequest>(url, pageData);
41+
return res.data;
42+
};
43+
44+
export const deletePage = async (id: number) => {
45+
const url = `/page/${id}`;
46+
47+
const res = await Delete<null>(url);
48+
return res.data;
49+
};
50+
51+
export const updatePage = async (id: number, pageData: PageRequest) => {
52+
const url = `/page/${id}`;
53+
54+
const res = await Patch<null, PageRequest>(url, pageData);
55+
return res.data;
56+
};
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import usePageStore from "@/store/usePageStore";
2+
import Editor from "./editor";
3+
import { usePage } from "@/hooks/usePages";
4+
5+
export default function EditorView() {
6+
const { currentPage } = usePageStore();
7+
const { data } = usePage(currentPage);
8+
9+
if (!data) {
10+
return <div></div>;
11+
}
12+
13+
return <Editor key={data.id} initialValue={data.content} pageId={data.id} />;
14+
}

frontend/src/components/LogoBtn.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import logo from "/logo.png?url";
22

33
export default function LogoBtn() {
44
return (
5-
<div className="h-8 w-8 rounded-md bg-slate-700 p-2">
5+
<div className="h-8 w-8 overflow-clip rounded-md">
66
<img src={logo} />
77
</div>
88
);

0 commit comments

Comments
 (0)