ProjectSettings.Commands.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. import { useParams } from 'common'
  2. import { useRouter } from 'next/router'
  3. import type { CommandOptions, ICommand } from 'ui-patterns/CommandMenu'
  4. import { useRegisterCommands, useSetCommandMenuOpen } from 'ui-patterns/CommandMenu'
  5. import { IRouteCommand } from 'ui-patterns/CommandMenu/internal/types'
  6. import { COMMAND_MENU_SECTIONS } from '@/components/interfaces/App/CommandMenu/CommandMenu.utils'
  7. import { useIsPlatformWebhooksEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
  8. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  9. export function useProjectSettingsGotoCommands(options?: CommandOptions) {
  10. const router = useRouter()
  11. const setIsOpen = useSetCommandMenuOpen()
  12. let { ref, slug } = useParams()
  13. const platformWebhooksEnabled = useIsPlatformWebhooksEnabled()
  14. ref ||= '_'
  15. const hasOrgSlug = typeof slug === 'string' && slug.length > 0 && slug !== '_'
  16. const { projectSettingsLogDrains, projectSettingsCustomDomains, authenticationSignInProviders } =
  17. useIsFeatureEnabled([
  18. 'project_settings:log_drains',
  19. 'project_settings:custom_domains',
  20. 'authentication:sign_in_providers',
  21. ])
  22. useRegisterCommands(
  23. COMMAND_MENU_SECTIONS.NAVIGATE,
  24. [
  25. {
  26. id: 'nav-project-settings-add-ons',
  27. name: 'Add-ons',
  28. value: 'Add-ons addons add ons add on add-on',
  29. route: `/project/${ref}/settings/addons`,
  30. defaultHidden: true,
  31. },
  32. {
  33. id: 'nav-project-settings-general',
  34. name: 'General Settings',
  35. route: `/project/${ref}/settings/general`,
  36. defaultHidden: true,
  37. },
  38. {
  39. id: 'nav-project-settings-database',
  40. name: 'Database Settings',
  41. route: `/project/${ref}/database/settings`,
  42. defaultHidden: true,
  43. },
  44. {
  45. id: 'nav-project-settings-auth',
  46. name: 'Auth Settings',
  47. route: authenticationSignInProviders
  48. ? `/project/${ref}/auth/providers`
  49. : `/project/${ref}/auth/policies`,
  50. defaultHidden: true,
  51. },
  52. ...(platformWebhooksEnabled
  53. ? [
  54. {
  55. id: 'nav-project-settings-webhooks',
  56. name: 'Project Webhooks',
  57. route: `/project/${ref}/settings/webhooks`,
  58. defaultHidden: true,
  59. } as IRouteCommand,
  60. ...(hasOrgSlug
  61. ? [
  62. {
  63. id: 'nav-organization-settings-webhooks',
  64. name: 'Organization Webhooks',
  65. route: `/org/${slug}/webhooks`,
  66. defaultHidden: true,
  67. } as IRouteCommand,
  68. ]
  69. : []),
  70. ]
  71. : []),
  72. {
  73. id: 'nav-project-settings-api',
  74. name: 'API Settings',
  75. route: `/project/${ref}/integrations/data_api/settings`,
  76. defaultHidden: true,
  77. },
  78. {
  79. id: 'nav-project-settings-storage',
  80. name: 'Storage Settings',
  81. route: `/project/${ref}/storage/settings`,
  82. defaultHidden: true,
  83. },
  84. ...(projectSettingsCustomDomains
  85. ? [
  86. {
  87. id: 'nav-project-settings-custom-domains',
  88. name: 'Custom Domains',
  89. route: `/project/${ref}/settings/general#custom-domains`,
  90. defaultHidden: true,
  91. } as IRouteCommand,
  92. ]
  93. : []),
  94. {
  95. id: 'nav-project-settings-restart-project',
  96. name: 'Project availability',
  97. value: 'project availability restart project pause project resume project',
  98. route: `/project/${ref}/settings/general#restart-project`,
  99. defaultHidden: true,
  100. },
  101. {
  102. id: 'nav-project-settings-pause-project',
  103. name: 'Pause project',
  104. route: `/project/${ref}/settings/general#pause-project`,
  105. defaultHidden: true,
  106. },
  107. {
  108. id: 'nav-project-settings-transfer-project',
  109. name: 'Transfer project',
  110. route: `/project/${ref}/settings/general#transfer-project`,
  111. defaultHidden: true,
  112. },
  113. {
  114. id: 'nav-project-settings-delete-project',
  115. name: 'Delete project',
  116. route: `/project/${ref}/settings/general#delete-project`,
  117. defaultHidden: true,
  118. },
  119. {
  120. id: 'nav-project-settings-database-password',
  121. name: 'Database password',
  122. route: `/project/${ref}/database/settings#database-password`,
  123. defaultHidden: true,
  124. },
  125. {
  126. id: 'nav-project-settings-connection-string',
  127. name: 'Connection string',
  128. action: () => {
  129. router.push(
  130. {
  131. pathname: router.pathname,
  132. query: { ...router.query, showConnect: 'true' },
  133. },
  134. undefined,
  135. { shallow: true }
  136. )
  137. setIsOpen(false)
  138. },
  139. defaultHidden: true,
  140. } as ICommand,
  141. {
  142. id: 'nav-project-settings-connection-pooling',
  143. name: 'Connection pooling',
  144. route: `/project/${ref}/database/settings#connection-pooler`,
  145. defaultHidden: true,
  146. },
  147. {
  148. id: 'nav-project-settings-ssl-configuration',
  149. name: 'SSL configuration',
  150. route: `/project/${ref}/database/settings#ssl-configuration`,
  151. defaultHidden: true,
  152. },
  153. {
  154. id: 'nav-project-settings-network-restrictions',
  155. name: 'Network restrictions',
  156. route: `/project/${ref}/database/settings#network-restrictions`,
  157. defaultHidden: true,
  158. },
  159. {
  160. id: 'nav-project-settings-banned-ips',
  161. name: 'Banned IPs',
  162. route: `/project/${ref}/database/settings#banned-ips`,
  163. defaultHidden: true,
  164. },
  165. ...(projectSettingsLogDrains
  166. ? [
  167. {
  168. id: 'nav-project-settings-log-drains',
  169. name: 'Log drains',
  170. route: `/project/${ref}/settings/log-drains`,
  171. defaultHidden: true,
  172. } as IRouteCommand,
  173. ]
  174. : []),
  175. ],
  176. { ...options, deps: [platformWebhooksEnabled, ref, slug] }
  177. )
  178. }