import './AccountActions.style.scss'; import { Color } from '@signozhq/design-tokens'; import { Button, Select } from 'antd'; import { SelectProps } from 'antd/lib'; import { useAwsAccounts } from 'hooks/integrations/aws/useAwsAccounts'; import useUrlQuery from 'hooks/useUrlQuery'; import { Check, ChevronDown } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom-v5-compat'; import { CloudAccount } from '../../ServicesSection/types'; import AccountSettingsModal from './AccountSettingsModal'; import CloudAccountSetupModal from './CloudAccountSetupModal'; interface AccountOptionItemProps { label: React.ReactNode; isSelected: boolean; } function AccountOptionItem({ label, isSelected, }: AccountOptionItemProps): JSX.Element { return (
{label} {isSelected && (
)}
); } function renderOption( // eslint-disable-next-line @typescript-eslint/no-explicit-any option: any, activeAccountId: string | undefined, ): JSX.Element { return ( ); } const getAccountById = ( accounts: CloudAccount[], accountId: string, ): CloudAccount | null => accounts.find((account) => account.cloud_account_id === accountId) || null; function AccountActions(): JSX.Element { const urlQuery = useUrlQuery(); const navigate = useNavigate(); const { data: accounts } = useAwsAccounts(); const initialAccount = useMemo( () => accounts?.length ? getAccountById(accounts, urlQuery.get('accountId') || '') || accounts[0] : null, [accounts, urlQuery], ); const [activeAccount, setActiveAccount] = useState( initialAccount, ); // Update state when initial value changes useEffect(() => { if (initialAccount !== null) { setActiveAccount(initialAccount); urlQuery.set('accountId', initialAccount.cloud_account_id); navigate({ search: urlQuery.toString() }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [initialAccount]); const [isIntegrationModalOpen, setIsIntegrationModalOpen] = useState(false); const [isAccountSettingsModalOpen, setIsAccountSettingsModalOpen] = useState( false, ); const selectOptions: SelectProps['options'] = useMemo( () => accounts?.length ? accounts.map((account) => ({ value: account.cloud_account_id, label: account.cloud_account_id, })) : [], [accounts], ); return (
{accounts?.length ? (