persist selectedtab in usequeryparams

This commit is contained in:
ajvpot
2025-09-10 01:47:45 +02:00
parent 901cec1820
commit e43dd51336
4 changed files with 19 additions and 3 deletions
@@ -52,4 +52,4 @@ export async function GET(
code: "INTERNAL_ERROR"
}, { status: 500 });
}
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
"use client";
import { useConfig } from '@/components/ConfigContext';
import { useSearchQuery } from '@/hooks/useSearchQuery';
import { useSearchQuery } from '@/hooks/useQueryParams';
import { useMeshcoreSearch } from '@/hooks/useMeshcoreSearch';
import SearchInput from '@/components/SearchInput';
import SearchResults from '@/components/SearchResults';
+17 -1
View File
@@ -9,6 +9,7 @@ import RegionSelector from "./RegionSelector";
import { getRegionConfig } from "../lib/regions";
import { useChatMessages } from "../hooks/useChatMessages";
import { useIntersectionObserver } from "../hooks/useIntersectionObserver";
import { useQueryParams } from "../hooks/useQueryParams";
interface ChatBoxProps {
@@ -23,6 +24,10 @@ interface TabItem {
isAllMessages?: boolean;
}
interface ChatBoxQuery {
selectedTab?: number;
}
export default function ChatBox({
showAllMessagesTab = false,
className = "",
@@ -39,7 +44,18 @@ export default function ChatBox({
? [{ channelName: "All Messages", privateKey: "", isAllMessages: true }, ...meshcoreKeys]
: meshcoreKeys;
const [selectedTab, setSelectedTab] = useState(showAllMessagesTab ? 1 : 0);
// Use query params to persist selected tab across navigation
const { query, setParam } = useQueryParams<ChatBoxQuery>({
selectedTab: showAllMessagesTab ? 1 : 0,
});
// Ensure selectedTab is within bounds of available tabs
const rawSelectedTab = query.selectedTab ?? (showAllMessagesTab ? 1 : 0);
const selectedTab = rawSelectedTab >= 0 && rawSelectedTab < allTabs.length
? rawSelectedTab
: (showAllMessagesTab ? 1 : 0);
const setSelectedTab = (tabIndex: number) => setParam('selectedTab', tabIndex);
const [minimized, setMinimized] = useState(!startExpanded); // Use startExpanded as default for minimized state
const selectedKey = allTabs[selectedTab];