import {ReactElement} from "react" import {useTranslation} from "react-i18next" import {useKeyPress} from "react-use" import {MdContentCopy} from "react-icons/md" import {useSnackbar} from "notistack" import {Link as RouterLink} from "react-router-dom" import copy from "copy-to-clipboard" import { Grid, List, ListItemButton, ListItemIcon, ListItemSecondaryAction, ListItemText, } from "@mui/material" import {AliasTypeIndicator} from "~/components" import {AliasList} from "~/server-types" import {useIsAnyInputFocused, useUIState} from "~/hooks" import {SUCCESS_SNACKBAR_SHOW_DURATION} from "~/constants/values" import CreateAliasButton from "~/route-widgets/AliasesRoute/CreateAliasButton" export interface AliasesDetailsProps { aliases: AliasList[] } const getAddress = (alias: AliasList): string => `${alias.local}@${alias.domain}` export default function AliasesDetails({aliases}: AliasesDetailsProps): ReactElement { const {t} = useTranslation() const {enqueueSnackbar} = useSnackbar() const [isPressingControl] = useKeyPress("Control") const isAnyInputFocused = useIsAnyInputFocused() const [aliasesUIState, setAliasesUIState] = useUIState(aliases) const isInCopyAddressMode = !isAnyInputFocused && isPressingControl return ( {aliasesUIState.map(alias => ( { if (isInCopyAddressMode) { event.preventDefault() event.stopPropagation() copy(getAddress(alias)) enqueueSnackbar( t( "relations.alias.mutations.success.addressCopiedToClipboard", ), { variant: "success", autoHideDuration: SUCCESS_SNACKBAR_SHOW_DURATION, }, ) } }} to={`/aliases/${btoa(getAddress(alias))}`} > {isInCopyAddressMode && ( )} ))} setAliasesUIState(currentAliases => [alias, ...currentAliases]) } /> ) }