import { useConstant } from 'common' import { createContext, PropsWithChildren, useCallback, useContext } from 'react' import { proxy, snapshot, useSnapshot } from 'valtio' export function createDatabaseSelectorState() { const state = proxy({ selectedDatabaseId: undefined as string | undefined, setSelectedDatabaseId: (id: string | undefined) => { state.selectedDatabaseId = id }, }) return state } export type DatabaseSelectorState = ReturnType export const DatabaseSelectorStateContext = createContext( createDatabaseSelectorState() ) export const DatabaseSelectorStateContextProvider = ({ children }: PropsWithChildren) => { const state = useConstant(createDatabaseSelectorState) return ( {children} ) } export function useDatabaseSelectorStateSnapshot(options?: Parameters[1]) { const state = useContext(DatabaseSelectorStateContext) return useSnapshot(state, options) } // Helper methods export function useGetSelectedDatabaseId() { const state = useContext(DatabaseSelectorStateContext) return useCallback(() => snapshot(state).selectedDatabaseId, [state]) }