import { Button, Menu, MenuButton, MenuButtonProps, MenuItem, MenuList, Stack, Text, } from '@chakra-ui/react' import { ChevronLeftIcon, PlusIcon } from 'assets/icons' import React, { useEffect, useMemo } from 'react' import { useUser } from 'contexts/UserContext' import { useRouter } from 'next/router' import { CredentialsType } from 'models' type Props = Omit & { type: CredentialsType currentCredentialsId?: string onCredentialsSelect: (credentialId: string) => void onCreateNewClick: () => void defaultCredentialLabel?: string } export const CredentialsDropdown = ({ type, currentCredentialsId, onCredentialsSelect, onCreateNewClick, defaultCredentialLabel, ...props }: Props) => { const router = useRouter() const { credentials } = useUser() const defaultCredentialsLabel = defaultCredentialLabel ?? `Select an account` const credentialsList = useMemo(() => { return credentials.filter((credential) => credential.type === type) }, [type, credentials]) const currentCredential = useMemo( () => credentials.find((c) => c.id === currentCredentialsId), [currentCredentialsId, credentials] ) const handleMenuItemClick = (credentialId: string) => () => { onCredentialsSelect(credentialId) } useEffect(() => { if (!router.isReady) return if (router.query.credentialsId) { handleMenuItemClick(router.query.credentialsId.toString())() clearQueryParams() } // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.isReady]) const clearQueryParams = () => { const hasQueryParams = router.asPath.includes('?') if (hasQueryParams) router.push(router.asPath.split('?')[0], undefined, { shallow: true }) } return ( } colorScheme="gray" justifyContent="space-between" textAlign="left" {...props} > {currentCredential ? currentCredential.name : defaultCredentialsLabel} {defaultCredentialLabel && ( {defaultCredentialLabel} )} {credentialsList.map((credentials) => ( {credentials.name} ))} } onClick={onCreateNewClick} > Connect new ) }