Files
supabase/apps/ui-library/context/framework-context.tsx
Saxon Fletcher e8698432bc Chore/move framework (#34426)
* init

* Update component-preview.tsx

* move framework selector

* simplified framework selection

* moaar

* remove

* Update framework-selector.tsx

* side menu item fix

---------

Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com>
2025-03-27 17:39:01 +08:00

46 lines
1.4 KiB
TypeScript

'use client'
import { frameworkTitles } from '@/config/docs'
import { createContext, useContext, useEffect, useState } from 'react'
type Framework = keyof typeof frameworkTitles
type FrameworkContextType = {
framework: Framework
setFramework: (framework: Framework) => void
}
const FrameworkContext = createContext<FrameworkContextType | undefined>(undefined)
export function FrameworkProvider({ children }: { children: React.ReactNode }) {
const [framework, setFrameworkState] = useState<Framework>('nextjs')
// Initialize from localStorage on mount (client-side only)
useEffect(() => {
const storedFramework = localStorage.getItem('preferredFramework')
if (storedFramework && Object.keys(frameworkTitles).includes(storedFramework)) {
setFrameworkState(storedFramework as Framework)
}
}, [])
// Update localStorage when framework changes
const setFramework = (newFramework: Framework) => {
setFrameworkState(newFramework)
localStorage.setItem('preferredFramework', newFramework)
}
return (
<FrameworkContext.Provider value={{ framework, setFramework }}>
{children}
</FrameworkContext.Provider>
)
}
// Custom hook to use the framework context
export function useFramework() {
const context = useContext(FrameworkContext)
if (context === undefined) {
throw new Error('useFramework must be used within a FrameworkProvider')
}
return context
}