import { ArrowUpRight } from 'lucide-react' import type { ProductMenuGroup } from 'components/ui/ProductMenu/ProductMenu.types' import type { Project } from 'data/projects/project-detail-query' import { IS_PLATFORM } from 'lib/constants' export const generateDatabaseMenu = ( project?: Project, flags?: { pgNetExtensionExists: boolean pitrEnabled: boolean columnLevelPrivileges: boolean showPgReplicate: boolean enablePgReplicate: boolean showRoles: boolean showWrappers: boolean } ): ProductMenuGroup[] => { const ref = project?.ref ?? 'default' const { pgNetExtensionExists, pitrEnabled, columnLevelPrivileges, showPgReplicate, enablePgReplicate, showRoles, showWrappers, } = flags || {} return [ { title: 'Database Management', items: [ { name: 'Schema Visualizer', key: 'schemas', url: `/project/${ref}/database/schemas`, items: [], }, { name: 'Tables', key: 'tables', url: `/project/${ref}/database/tables`, items: [] }, { name: 'Functions', key: 'functions', url: `/project/${ref}/database/functions`, items: [], }, { name: 'Triggers', key: 'triggers', url: `/project/${ref}/database/triggers`, items: [], }, { name: 'Enumerated Types', key: 'types', url: `/project/${ref}/database/types`, items: [], }, { name: 'Extensions', key: 'extensions', url: `/project/${ref}/database/extensions`, items: [], }, { name: 'Indexes', key: 'indexes', url: `/project/${ref}/database/indexes`, items: [], }, { name: 'Publications', key: 'publications', url: `/project/${ref}/database/publications`, items: [], }, ], }, { title: 'Configuration', items: [ ...(showRoles ? [{ name: 'Roles', key: 'roles', url: `/project/${ref}/database/roles`, items: [] }] : []), ...(columnLevelPrivileges ? [ { name: 'Column Privileges', key: 'column-privileges', url: `/project/${ref}/database/column-privileges`, items: [], }, ] : []), { name: 'Policies', key: 'policies', url: `/project/${ref}/auth/policies`, rightIcon: , items: [], }, { name: 'Settings', key: 'settings', url: `/project/${ref}/database/settings`, items: [] }, ], }, { title: 'Platform', items: [ ...(showPgReplicate ? [ { name: 'Replication', key: 'replication', url: `/project/${ref}/database/replication`, label: enablePgReplicate ? 'New' : undefined, items: [], }, ] : []), ...(IS_PLATFORM ? [ { name: 'Backups', key: 'backups', url: pitrEnabled ? `/project/${ref}/database/backups/pitr` : `/project/${ref}/database/backups/scheduled`, items: [], }, ] : []), { name: 'Migrations', key: 'migrations', url: `/project/${ref}/database/migrations`, items: [], }, ...(showWrappers ? [ { name: 'Wrappers', key: 'wrappers', url: `/project/${ref}/integrations?category=wrapper`, rightIcon: , items: [], }, ] : []), ...(!!pgNetExtensionExists ? [ { name: 'Webhooks', key: 'hooks', url: `/project/${ref}/integrations/webhooks/overview`, rightIcon: , items: [], }, ] : []), ], }, { title: 'Tools', items: [ { name: 'Security Advisor', key: 'security-advisor', url: `/project/${ref}/advisors/security`, rightIcon: , items: [], }, { name: 'Performance Advisor', key: 'performance-advisor', url: `/project/${ref}/advisors/performance`, rightIcon: , items: [], }, { name: 'Query Performance', key: 'query-performance', url: `/project/${ref}/observability/query-performance`, rightIcon: , items: [], }, ], }, ] }