Skip to content

Commit dca978b

Browse files
authored
Merge pull request #275 from boostcampwm-2024/feature-fe-#15
새로 생성된 노드 auto-focus
2 parents e9712d8 + 978db34 commit dca978b

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

apps/frontend/src/features/canvas/model/useCanvas.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Edge,
99
EdgeChange,
1010
Connection,
11+
useReactFlow,
1112
} from "@xyflow/react";
1213
import "@xyflow/react/dist/style.css";
1314
import { SocketIOProvider } from "y-socket.io";
@@ -19,7 +20,7 @@ import { calculateBestHandles } from "@/features/canvas/model/calculateHandles";
1920
import { createSocketIOProvider } from "@/shared/api/socketProvider";
2021
import { useCollaborativeCursors } from "./useCollaborativeCursors";
2122
import { getSortedNodes } from "./sortNodes";
22-
23+
import { usePageStore } from "@/features/pageSidebar/model/pageStore";
2324
export interface YNode extends Node {
2425
isHolding: boolean;
2526
}
@@ -41,6 +42,27 @@ export const useCanvas = () => {
4142
const existingPageIds = useRef(new Set<string>());
4243
const holdingNodeRef = useRef<string | null>(null);
4344

45+
const currentPage = usePageStore((state) => state.currentPage);
46+
const { fitView } = useReactFlow();
47+
48+
useEffect(() => {
49+
if (currentPage) {
50+
setTimeout(() => {
51+
fitView({
52+
nodes: [{ id: currentPage.toString() }],
53+
duration: 500,
54+
padding: 0.5,
55+
});
56+
const nodeElement = document.querySelector(
57+
`[data-nodeid="${currentPage}"]`,
58+
) as HTMLInputElement;
59+
if (nodeElement) {
60+
nodeElement.focus();
61+
}
62+
}, 100);
63+
}
64+
}, [currentPage, fitView]);
65+
4466
useEffect(() => {
4567
const yTitleMap = ydoc.getMap("title");
4668
const yEmojiMap = ydoc.getMap("emoji");

apps/frontend/src/features/canvas/ui/Node/NoteNode/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export type NoteNodeData = { title: string; id: number; emoji: string };
1111
export type NoteNodeType = Node<NoteNodeData, "note">;
1212

1313
export function NoteNode({ data }: NodeProps<NoteNodeType>) {
14-
const { setCurrentPage } = usePageStore();
14+
const { currentPage, setCurrentPage } = usePageStore();
1515
const { users } = useUserStore();
1616

1717
const [activeUsers, setActiveUsers] = useState(users);
@@ -31,7 +31,7 @@ export function NoteNode({ data }: NodeProps<NoteNodeType>) {
3131

3232
return (
3333
<div
34-
className="h-24 w-48 rounded-lg border-[1px] border-[#eaeaea] bg-white p-3 shadow-sm"
34+
className={`h-24 w-48 rounded-lg border-[1px] ${currentPage === data.id ? "border-[#8dbaef]" : "border-[#eaeaea]"} bg-white p-3 shadow-sm`}
3535
onClick={handleNodeClick}
3636
>
3737
<Handle

0 commit comments

Comments
 (0)