Skip to content

Commit b90ee52

Browse files
committed
feat: implement zustand for package manager state synchronization
1 parent ba8aff0 commit b90ee52

File tree

1 file changed

+21
-8
lines changed

1 file changed

+21
-8
lines changed

src/components/PackageManagerTabs.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
1-
import * as React from 'react'
2-
import {
3-
useLocalCurrentFramework,
4-
} from './FrameworkSelect'
1+
import { useLocalCurrentFramework } from './FrameworkSelect'
52
import { useCurrentUserQuery } from '~/hooks/useCurrentUser'
63
import { useParams } from '@tanstack/react-router'
7-
import { useLocalStorage } from '~/utils/useLocalStorage'
4+
import { create } from 'zustand'
85
import { Tabs, type TabDefinition } from './Tabs'
96
import { CodeBlock } from './CodeBlock'
107
import type { Framework } from '~/libraries/types'
118

129
type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn'
1310
type InstallMode = 'install' | 'dev-install'
1411

12+
// Use zustand for cross-component synchronization
13+
// This ensures all PackageManagerTabs instances on the page stay in sync
14+
const usePackageManagerStore = create<{
15+
packageManager: PackageManager
16+
setPackageManager: (pm: PackageManager) => void
17+
}>((set) => ({
18+
packageManager:
19+
typeof document !== 'undefined'
20+
? (localStorage.getItem('packageManager') as PackageManager) || 'npm'
21+
: 'npm',
22+
setPackageManager: (pm: PackageManager) => {
23+
localStorage.setItem('packageManager', pm)
24+
set({ packageManager: pm })
25+
},
26+
}))
27+
1528
type PackageManagerTabsProps = {
1629
id: string
1730
packagesByFramework: Record<string, string[]>
@@ -73,8 +86,8 @@ export function PackageManagerTabs({
7386
packagesByFramework,
7487
mode,
7588
}: PackageManagerTabsProps) {
76-
const [storedPackageManager, setStoredPackageManager] =
77-
useLocalStorage<PackageManager>('packageManager', PACKAGE_MANAGERS[0])
89+
const { packageManager: storedPackageManager, setPackageManager } =
90+
usePackageManagerStore()
7891

7992
const { framework: paramsFramework } = useParams({ strict: false })
8093
const localCurrentFramework = useLocalCurrentFramework()
@@ -123,7 +136,7 @@ export function PackageManagerTabs({
123136
tabs={tabs}
124137
children={children}
125138
activeSlug={selectedPackageManager}
126-
onTabChange={(slug) => setStoredPackageManager(slug as PackageManager)}
139+
onTabChange={(slug) => setPackageManager(slug as PackageManager)}
127140
/>
128141
)
129142
}

0 commit comments

Comments
 (0)