fix(frontend): add stable ids for chat resizable panels (#1341)

Signed-off-by: sysusugan <sugan@foxmail.com>
This commit is contained in:
Simon Su
2026-03-25 20:58:15 +08:00
committed by GitHub
parent fdfe08d4aa
commit adc51e541c

View File

@@ -1,4 +1,5 @@
import { FilesIcon, XIcon } from "lucide-react";
import { usePathname } from "next/navigation";
import { useEffect, useMemo, useRef, useState } from "react";
import type { GroupImperativeHandle } from "react-resizable-panels";
@@ -27,6 +28,7 @@ const ChatBox: React.FC<{ children: React.ReactNode; threadId: string }> = ({
threadId,
}) => {
const { thread } = useThread();
const pathname = usePathname();
const threadIdRef = useRef(threadId);
const layoutRef = useRef<GroupImperativeHandle>(null);
@@ -84,6 +86,10 @@ const ChatBox: React.FC<{ children: React.ReactNode; threadId: string }> = ({
return artifactsOpen;
}, [artifactsOpen, artifacts]);
const resizableIdBase = useMemo(() => {
return pathname.replace(/[^a-zA-Z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
}, [pathname]);
useEffect(() => {
if (layoutRef.current) {
if (artifactPanelOpen) {
@@ -96,6 +102,7 @@ const ChatBox: React.FC<{ children: React.ReactNode; threadId: string }> = ({
return (
<ResizablePanelGroup
id={`${resizableIdBase}-panels`}
orientation="horizontal"
defaultLayout={{ chat: 100, artifacts: 0 }}
groupRef={layoutRef}
@@ -104,6 +111,7 @@ const ChatBox: React.FC<{ children: React.ReactNode; threadId: string }> = ({
{children}
</ResizablePanel>
<ResizableHandle
id={`${resizableIdBase}-separator`}
className={cn(
"opacity-33 hover:opacity-100",
!artifactPanelOpen && "pointer-events-none opacity-0",