mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-28 09:53:36 +00:00
Major additions: - Complete Next.js studio application with 1600+ components - Docker support (Dockerfile.combined, docker-compose.yml) - GCP deployment documentation and benchmarks - SQL benchmark scripts for performance testing - Sentry integration for monitoring - Comprehensive test suite and mocks Studio features: - Dashboard and admin interfaces - Data visualization components - Authentication and user management - API integration with RuVector backend - Static data and public assets 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { PropsWithChildren, createContext, useCallback, useContext } from 'react'
|
|
import { proxy, snapshot, useSnapshot } from 'valtio'
|
|
|
|
import { useConstant } from 'common'
|
|
|
|
export function createDatabaseSelectorState() {
|
|
const state = proxy({
|
|
selectedDatabaseId: undefined as string | undefined,
|
|
setSelectedDatabaseId: (id: string | undefined) => {
|
|
state.selectedDatabaseId = id
|
|
},
|
|
})
|
|
|
|
return state
|
|
}
|
|
|
|
export type DatabaseSelectorState = ReturnType<typeof createDatabaseSelectorState>
|
|
|
|
export const DatabaseSelectorStateContext = createContext<DatabaseSelectorState>(
|
|
createDatabaseSelectorState()
|
|
)
|
|
|
|
export const DatabaseSelectorStateContextProvider = ({ children }: PropsWithChildren) => {
|
|
const state = useConstant(createDatabaseSelectorState)
|
|
|
|
return (
|
|
<DatabaseSelectorStateContext.Provider value={state}>
|
|
{children}
|
|
</DatabaseSelectorStateContext.Provider>
|
|
)
|
|
}
|
|
|
|
export function useDatabaseSelectorStateSnapshot(options?: Parameters<typeof useSnapshot>[1]) {
|
|
const state = useContext(DatabaseSelectorStateContext)
|
|
return useSnapshot(state, options)
|
|
}
|
|
|
|
// Helper methods
|
|
export function useGetSelectedDatabaseId() {
|
|
const state = useContext(DatabaseSelectorStateContext)
|
|
return useCallback(() => snapshot(state).selectedDatabaseId, [state])
|
|
}
|