import './ServicesTabs.style.scss'; import { Color } from '@signozhq/design-tokens'; import type { SelectProps, TabsProps } from 'antd'; import { Select, Tabs } from 'antd'; import { getAwsServices } from 'api/integrations/aws'; import { REACT_QUERY_KEY } from 'constants/reactQueryKeys'; import useUrlQuery from 'hooks/useUrlQuery'; import { ChevronDown } from 'lucide-react'; import { useMemo, useState } from 'react'; import { useQuery } from 'react-query'; import ServiceDetails from './ServiceDetails'; import ServicesList from './ServicesList'; export enum ServiceFilterType { ALL_SERVICES = 'all_services', ENABLED = 'enabled', AVAILABLE = 'available', } interface ServicesFilterProps { cloudAccountId: string; onFilterChange: (value: ServiceFilterType) => void; } function ServicesFilter({ cloudAccountId, onFilterChange, }: ServicesFilterProps): JSX.Element | null { const { data: services, isLoading } = useQuery( [REACT_QUERY_KEY.AWS_SERVICES, cloudAccountId], () => getAwsServices(cloudAccountId), ); const { enabledCount, availableCount } = useMemo(() => { if (!services) return { enabledCount: 0, availableCount: 0 }; return services.reduce( (acc, service) => { const isEnabled = service?.config?.logs?.enabled || service?.config?.metrics?.enabled; return { enabledCount: acc.enabledCount + (isEnabled ? 1 : 0), availableCount: acc.availableCount + (isEnabled ? 0 : 1), }; }, { enabledCount: 0, availableCount: 0 }, ); }, [services]); const selectOptions: SelectProps['options'] = useMemo( () => [ { value: 'all_services', label: `All Services (${services?.length || 0})` }, { value: 'enabled', label: `Enabled (${enabledCount})` }, { value: 'available', label: `Available (${availableCount})` }, ], [services, enabledCount, availableCount], ); if (isLoading) return null; if (!services?.length) return null; return (