// @ts-nocheck import { PermissionAction } from '@supabase/shared-types/out/constants' import { IS_PLATFORM, useParams } from 'common' import { PlayCircle, StopCircle } from 'lucide-react' import { Dispatch, SetStateAction, useCallback } from 'react' import { Button } from 'ui' import { ChooseChannelPopover } from './ChooseChannelPopover' import { RealtimeFilterPopover } from './RealtimeFilterPopover' import { RealtimeTokensPopover } from './RealtimeTokensPopover' import { RealtimeConfig } from './useRealtimeMessages' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { ShortcutTooltip } from '@/components/ui/ShortcutTooltip' import { getTemporaryAPIKey } from '@/data/api-keys/temp-api-keys-query' import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' import { useShortcut } from '@/state/shortcuts/useShortcut' interface HeaderProps { config: RealtimeConfig onChangeConfig: Dispatch> channelPopoverOpen: boolean onChannelPopoverChange: (open: boolean) => void filterPopoverOpen: boolean onFilterPopoverChange: (open: boolean) => void } export const Header = ({ config, onChangeConfig, channelPopoverOpen, onChannelPopoverChange, filterPopoverOpen, onFilterPopoverChange, }: HeaderProps) => { const { mutate: sendEvent } = useSendEventMutation() const { ref } = useParams() const { data: org } = useSelectedOrganizationQuery() const { can: canReadAPIKeys } = useAsyncCheckPermissions( PermissionAction.READ, 'service_api_keys' ) const canToggleListening = canReadAPIKeys && config.channelName.length > 0 const handleToggleListening = useCallback(async () => { const willStartListening = !config.enabled // [Joshen] Refresh if starting to listen + using temp API key, since it has a low refresh rate if (willStartListening && (config.token.startsWith('sb_temp') || !IS_PLATFORM)) { const data = await getTemporaryAPIKey({ projectRef: config.projectRef, expiry: 3600 }) const token = data.api_key onChangeConfig({ ...config, token, enabled: !config.enabled }) } else { onChangeConfig({ ...config, enabled: !config.enabled }) } if (willStartListening) { sendEvent({ action: 'realtime_inspector_listen_channel_clicked', groups: { project: ref ?? 'Unknown', organization: org?.slug ?? 'Unknown', }, }) } }, [config, onChangeConfig, sendEvent, ref, org]) useShortcut(SHORTCUT_IDS.INSPECTOR_TOGGLE_LISTENING, handleToggleListening, { enabled: canToggleListening, }) const listeningButton = ( ) return (
{canToggleListening ? ( {listeningButton} ) : ( : } onClick={handleToggleListening} tooltip={{ content: { side: 'bottom', text: !canReadAPIKeys ? 'You need additional permissions to use the realtime inspector' : config.channelName.length === 0 ? 'You need to join a channel first' : undefined, }, }} > {config.enabled ? `Stop listening` : `Start listening`} )}
) }