database-settings.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { useConstant } from 'common'
  2. import { createContext, PropsWithChildren, useContext } from 'react'
  3. import { proxy, useSnapshot } from 'valtio'
  4. export function createDatabaseSettingsState() {
  5. const state = proxy({
  6. usePoolerConnection: true,
  7. setUsePoolerConnection: (value: boolean) => {
  8. state.usePoolerConnection = value
  9. },
  10. showPoolingModeHelper: false,
  11. setShowPoolingModeHelper: (value: boolean) => {
  12. state.showPoolingModeHelper = value
  13. },
  14. })
  15. return state
  16. }
  17. export type DatabaseSettingsState = ReturnType<typeof createDatabaseSettingsState>
  18. export const DatabaseSettingsStateContext = createContext<DatabaseSettingsState>(
  19. createDatabaseSettingsState()
  20. )
  21. export const DatabaseSettingsStateContextProvider = ({ children }: PropsWithChildren) => {
  22. const state = useConstant(createDatabaseSettingsState)
  23. return (
  24. <DatabaseSettingsStateContext.Provider value={state}>
  25. {children}
  26. </DatabaseSettingsStateContext.Provider>
  27. )
  28. }
  29. export function useDatabaseSettingsStateSnapshot(options?: Parameters<typeof useSnapshot>[1]) {
  30. const state = useContext(DatabaseSettingsStateContext)
  31. return useSnapshot(state, options)
  32. }