app-state.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { LOCAL_STORAGE_KEYS as COMMON_LOCAL_STORAGE_KEYS } from 'common'
  2. import { proxy, snapshot, useSnapshot } from 'valtio'
  3. const getInitialState = () => {
  4. return {
  5. activeDocsSection: ['introduction'],
  6. docsLanguage: 'js',
  7. showProjectApiDocs: false,
  8. showCreateBranchModal: false,
  9. showAiSettingsModal: false,
  10. ongoingQueriesPanelOpen: false,
  11. mobileMenuOpen: false,
  12. showSidebar: true,
  13. showEditorPanel: false,
  14. lastRouteBeforeVisitingAccountPage: '',
  15. }
  16. }
  17. export const appState = proxy({
  18. ...getInitialState(),
  19. activeDocsSection: ['introduction'],
  20. docsLanguage: 'js' as 'js' | 'bash',
  21. showProjectApiDocs: false,
  22. setShowProjectApiDocs: (value: boolean) => {
  23. appState.showProjectApiDocs = value
  24. },
  25. setActiveDocsSection: (value: string[]) => {
  26. appState.activeDocsSection = value
  27. },
  28. setDocsLanguage: (value: 'js' | 'bash') => {
  29. appState.docsLanguage = value
  30. },
  31. isOptedInTelemetry: false,
  32. setIsOptedInTelemetry: (value: boolean | null) => {
  33. appState.isOptedInTelemetry = value === null ? false : value
  34. if (typeof window !== 'undefined' && value !== null) {
  35. localStorage.setItem(COMMON_LOCAL_STORAGE_KEYS.TELEMETRY_CONSENT, value.toString())
  36. }
  37. },
  38. isMfaEnforced: false,
  39. setIsMfaEnforced: (value: boolean) => {
  40. appState.isMfaEnforced = value
  41. },
  42. showCreateBranchModal: false,
  43. setShowCreateBranchModal: (value: boolean) => {
  44. appState.showCreateBranchModal = value
  45. },
  46. showAiSettingsModal: false,
  47. setShowAiSettingsModal: (value: boolean) => {
  48. appState.showAiSettingsModal = value
  49. },
  50. showSidebar: true,
  51. setShowSidebar: (value: boolean) => {
  52. appState.showSidebar = value
  53. },
  54. showOngoingQueriesPanelOpen: false,
  55. setOnGoingQueriesPanelOpen: (value: boolean) => {
  56. appState.ongoingQueriesPanelOpen = value
  57. },
  58. mobileMenuOpen: false,
  59. setMobileMenuOpen: (value: boolean) => {
  60. appState.mobileMenuOpen = value
  61. },
  62. connectSheetSource: 'header_button' as 'header_button' | 'connect_section',
  63. setConnectSheetSource: (value: 'header_button' | 'connect_section') => {
  64. appState.connectSheetSource = value
  65. },
  66. lastRouteBeforeVisitingAccountPage: '',
  67. setLastRouteBeforeVisitingAccountPage: (value: string) => {
  68. appState.lastRouteBeforeVisitingAccountPage = value
  69. },
  70. })
  71. export const getAppStateSnapshot = () => snapshot(appState)
  72. export const useAppStateSnapshot = (options?: Parameters<typeof useSnapshot>[1]) =>
  73. useSnapshot(appState, options)