|
1 | | -import * as React from 'react' |
2 | | -import { |
3 | | - useLocalCurrentFramework, |
4 | | -} from './FrameworkSelect' |
| 1 | +import { useLocalCurrentFramework } from './FrameworkSelect' |
5 | 2 | import { useCurrentUserQuery } from '~/hooks/useCurrentUser' |
6 | 3 | import { useParams } from '@tanstack/react-router' |
7 | | -import { useLocalStorage } from '~/utils/useLocalStorage' |
| 4 | +import { create } from 'zustand' |
8 | 5 | import { Tabs, type TabDefinition } from './Tabs' |
9 | 6 | import { CodeBlock } from './CodeBlock' |
10 | 7 | import type { Framework } from '~/libraries/types' |
11 | 8 |
|
12 | 9 | type PackageManager = 'bun' | 'npm' | 'pnpm' | 'yarn' |
13 | 10 | type InstallMode = 'install' | 'dev-install' |
14 | 11 |
|
| 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 | + |
15 | 28 | type PackageManagerTabsProps = { |
16 | 29 | id: string |
17 | 30 | packagesByFramework: Record<string, string[]> |
@@ -73,8 +86,8 @@ export function PackageManagerTabs({ |
73 | 86 | packagesByFramework, |
74 | 87 | mode, |
75 | 88 | }: PackageManagerTabsProps) { |
76 | | - const [storedPackageManager, setStoredPackageManager] = |
77 | | - useLocalStorage<PackageManager>('packageManager', PACKAGE_MANAGERS[0]) |
| 89 | + const { packageManager: storedPackageManager, setPackageManager } = |
| 90 | + usePackageManagerStore() |
78 | 91 |
|
79 | 92 | const { framework: paramsFramework } = useParams({ strict: false }) |
80 | 93 | const localCurrentFramework = useLocalCurrentFramework() |
@@ -123,7 +136,7 @@ export function PackageManagerTabs({ |
123 | 136 | tabs={tabs} |
124 | 137 | children={children} |
125 | 138 | activeSlug={selectedPackageManager} |
126 | | - onTabChange={(slug) => setStoredPackageManager(slug as PackageManager)} |
| 139 | + onTabChange={(slug) => setPackageManager(slug as PackageManager)} |
127 | 140 | /> |
128 | 141 | ) |
129 | 142 | } |
0 commit comments