import { useParams } from 'common' import type { CommandOptions } from 'ui-patterns/CommandMenu' import { useRegisterCommands } from 'ui-patterns/CommandMenu' import { COMMAND_MENU_SECTIONS } from '@/components/interfaces/App/CommandMenu/CommandMenu.utils' import { orderCommandSectionsByPriority } from '@/components/interfaces/App/CommandMenu/ordering' import { IntegrationDefinition, INTEGRATIONS, } from '@/components/interfaces/Integrations/Landing/Integrations.constants' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' export function useIntegrationsGotoCommands(options?: CommandOptions) { let { ref } = useParams() ref ||= '_' const { integrationsWrappers } = useIsFeatureEnabled(['integrations:wrappers']) const allIntegrations = integrationsWrappers ? INTEGRATIONS : INTEGRATIONS.filter((x) => !x.id.endsWith('_wrapper')) const getName = (integration: IntegrationDefinition) => { switch (integration.id) { case 'cron': return 'View and manage your Cron Jobs' case 'graphiql': return 'Query database using GraphQL' case 'vault': return 'View and manage your keys and secrets via Vault' default: return `View and manage your ${integration.name}${integration.type === 'wrapper' ? 's' : ''}` } } useRegisterCommands( COMMAND_MENU_SECTIONS.NAVIGATE, allIntegrations.map((x) => { return { id: `nav-integrations-${x.id}`, name: x.name, value: `Integrations: ${x.name}`, route: `/project/${ref}/integrations/${x.id}/overview`, defaultHidden: true, } }), { ...options, deps: [ref] } ) useRegisterCommands( COMMAND_MENU_SECTIONS.INTEGRATIONS, allIntegrations.map((x) => { return { id: `manage-${x.id}`, name: getName(x), route: `/project/${ref}/integrations/${x.id}/overview`, icon: () => (
{x.icon()}
), } }), { ...options, deps: [ref], orderSection: orderCommandSectionsByPriority, sectionMeta: { priority: 3 }, } ) }