SettingsMenu.utils.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { useFlag, useParams } from 'common'
  2. import { ArrowUpRight } from 'lucide-react'
  3. import { useIsPlatformWebhooksEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext'
  4. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  5. import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization'
  6. import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
  7. import { IS_PLATFORM, PROJECT_STATUS } from '@/lib/constants'
  8. export const useGenerateSettingsMenu = () => {
  9. const { ref } = useParams()
  10. const { data: project } = useSelectedProjectQuery()
  11. const { data: organization } = useSelectedOrganizationQuery()
  12. const showDashboardPreferences = useFlag('dashboardPreferences')
  13. const platformWebhooksEnabled = useIsPlatformWebhooksEnabled()
  14. const { projectSettingsLegacyJwtKeys: legacyJwtKeysEnabled, billingAll: billingEnabled } =
  15. useIsFeatureEnabled(['project_settings:legacy_jwt_keys', 'billing:all'])
  16. const isProjectActive = project?.status === PROJECT_STATUS.ACTIVE_HEALTHY
  17. if (!IS_PLATFORM) {
  18. return [
  19. {
  20. title: 'Configuration',
  21. items: [
  22. {
  23. name: `Log Drains`,
  24. key: `log-drains`,
  25. url: `/project/${ref}/settings/log-drains`,
  26. items: [],
  27. },
  28. ],
  29. },
  30. ]
  31. }
  32. return [
  33. {
  34. title: 'Configuration',
  35. items: [
  36. {
  37. name: 'General',
  38. key: 'general',
  39. url: `/project/${ref}/settings/general`,
  40. items: [],
  41. },
  42. {
  43. name: 'Compute and Disk',
  44. key: 'compute-and-disk',
  45. url: `/project/${ref}/settings/compute-and-disk`,
  46. items: [],
  47. disabled: !isProjectActive,
  48. },
  49. {
  50. name: 'Infrastructure',
  51. key: 'infrastructure',
  52. url: `/project/${ref}/settings/infrastructure`,
  53. items: [],
  54. disabled: !isProjectActive,
  55. },
  56. {
  57. name: 'Integrations',
  58. key: 'integrations',
  59. url: `/project/${ref}/settings/integrations`,
  60. items: [],
  61. disabled: !isProjectActive,
  62. },
  63. ...(platformWebhooksEnabled
  64. ? [
  65. {
  66. name: 'Webhooks',
  67. key: 'webhooks',
  68. url: `/project/${ref}/settings/webhooks`,
  69. items: [],
  70. disabled: !isProjectActive,
  71. },
  72. ]
  73. : []),
  74. {
  75. name: 'API Keys',
  76. key: 'api-keys',
  77. url: `/project/${ref}/settings/api-keys`,
  78. items: [],
  79. disabled: !isProjectActive,
  80. },
  81. {
  82. name: 'JWT Keys',
  83. key: 'jwt',
  84. url: legacyJwtKeysEnabled
  85. ? `/project/${ref}/settings/jwt`
  86. : `/project/${ref}/settings/jwt/signing-keys`,
  87. items: [],
  88. disabled: !isProjectActive,
  89. },
  90. {
  91. name: `Log Drains`,
  92. key: `log-drains`,
  93. url: `/project/${ref}/settings/log-drains`,
  94. items: [],
  95. disabled: !isProjectActive,
  96. },
  97. {
  98. name: 'Add-ons',
  99. key: 'addons',
  100. url: `/project/${ref}/settings/addons`,
  101. items: [],
  102. },
  103. ...(showDashboardPreferences
  104. ? [
  105. {
  106. name: 'Dashboard',
  107. key: 'dashboard',
  108. url: `/project/${ref}/settings/dashboard`,
  109. items: [],
  110. },
  111. ]
  112. : []),
  113. ],
  114. },
  115. {
  116. title: 'Integrations',
  117. items: [
  118. {
  119. name: 'Data API',
  120. key: 'api',
  121. url: `/project/${ref}/integrations/data_api/overview`,
  122. items: [],
  123. rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
  124. disabled: !isProjectActive,
  125. },
  126. {
  127. name: 'Vault',
  128. key: 'vault',
  129. url: `/project/${ref}/integrations/vault/overview`,
  130. items: [],
  131. rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
  132. label: 'Beta',
  133. disabled: !isProjectActive,
  134. },
  135. ],
  136. },
  137. {
  138. title: 'Billing',
  139. items: [
  140. ...(billingEnabled
  141. ? [
  142. {
  143. name: 'Subscription',
  144. key: 'subscription',
  145. url: `/org/${organization?.slug}/billing`,
  146. items: [],
  147. rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
  148. },
  149. ]
  150. : []),
  151. {
  152. name: 'Usage',
  153. key: 'usage',
  154. url: `/org/${organization?.slug}/usage?projectRef=${ref}`,
  155. items: [],
  156. rightIcon: <ArrowUpRight strokeWidth={1} className="h-4 w-4" />,
  157. },
  158. ],
  159. },
  160. ]
  161. }