This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

sync semble tab state with URL via sembleTab query param

+27 -4
+2 -2
src/webapp/app/(dashboard)/url/page.tsx
··· 7 7 import SembleContainerSkeleton from '@/features/semble/containers/sembleContainer/Skeleton.SembleContainer'; 8 8 9 9 interface Props { 10 - searchParams: Promise<{ id: string | undefined; viaCardId?: string }>; 10 + searchParams: Promise<{ id: string | undefined; viaCardId?: string; sembleTab?: string }>; 11 11 } 12 12 13 13 export async function generateMetadata({ 14 14 searchParams, 15 15 }: { 16 - searchParams: Promise<{ id: string | undefined; viaCardId?: string }>; 16 + searchParams: Promise<{ id: string | undefined; viaCardId?: string; sembleTab?: string }>; 17 17 }): Promise<Metadata> { 18 18 const { id: url } = await searchParams; 19 19
+25 -2
src/webapp/features/semble/components/sembleTabs/SembleTabs.tsx
··· 1 1 'use client'; 2 2 3 3 import { useState, Suspense } from 'react'; 4 + import { useRouter, useSearchParams } from 'next/navigation'; 4 5 import { 5 6 Box, 6 7 Container, ··· 42 43 | 'collections' 43 44 | 'addedBy' 44 45 | 'similar' 46 + | 'mentions' 45 47 | 'connections' 46 48 | 'graph'; 47 49 50 + const VALID_TABS: TabValue[] = [ 51 + 'notes', 52 + 'collections', 53 + 'addedBy', 54 + 'similar', 55 + 'mentions', 56 + 'connections', 57 + 'graph', 58 + ]; 59 + 48 60 export default function SembleTabs(props: Props) { 49 - const [activeTab, setActiveTab] = useState<TabValue>('similar'); 61 + const searchParams = useSearchParams(); 62 + const router = useRouter(); 63 + const tabParam = searchParams.get('sembleTab') as TabValue; 64 + const [activeTab, setActiveTab] = useState<TabValue>( 65 + VALID_TABS.includes(tabParam) ? tabParam : 'similar', 66 + ); 50 67 const { data: featureFlags } = useFeatureFlags(); 51 68 const { data: urlMetadata } = useUrlMetadata({ 52 69 url: props.url, ··· 59 76 <Tabs 60 77 keepMounted={false} 61 78 value={activeTab} 62 - onChange={(val) => setActiveTab(val as TabValue)} 79 + onChange={(val) => { 80 + const newTab = val as TabValue; 81 + setActiveTab(newTab); 82 + const viaCardId = searchParams.get('viaCardId'); 83 + const qs = `id=${props.url}&sembleTab=${newTab}${viaCardId ? `&viaCardId=${viaCardId}` : ''}`; 84 + router.replace(`?${qs}`, { scroll: false }); 85 + }} 63 86 > 64 87 <Box 65 88 style={{