added copy to clipboard on AliasesDetails.tsx

This commit is contained in:
Myzel394 2022-11-01 18:53:38 +01:00
parent f0c0578719
commit 8616d4085a

View File

@ -1,14 +1,19 @@
import {ReactElement} from "react" import {ReactElement, useState} from "react"
import {useTranslation} from "react-i18next"
import {useKeyPress} from "react-use"
import {MdContentCopy} from "react-icons/md"
import copy from "copy-to-clipboard"
import { import {
Grid, Grid,
List, List,
ListItemButton, ListItemButton,
ListItemIcon, ListItemIcon,
ListItemSecondaryAction,
ListItemText, ListItemText,
} from "@mui/material" } from "@mui/material"
import {AliasTypeIndicator} from "~/components" import {AliasTypeIndicator, SuccessSnack} from "~/components"
import {AliasList} from "~/server-types" import {AliasList} from "~/server-types"
import {useUIState} from "~/hooks" import {useUIState} from "~/hooks"
import CreateAliasButton from "~/route-widgets/AliasesRoute/CreateAliasButton" import CreateAliasButton from "~/route-widgets/AliasesRoute/CreateAliasButton"
@ -17,13 +22,14 @@ export interface AliasesDetailsProps {
aliases: AliasList[] aliases: AliasList[]
} }
const getAddress = (alias: AliasList): string => const getAddress = (alias: AliasList): string => `${alias.local}@${alias.domain}`
`${alias.local}@${alias.domain}`
export default function AliasesDetails({aliases}: AliasesDetailsProps): ReactElement {
const {t} = useTranslation()
const [isInCopyAddressMode] = useKeyPress("Control")
export default function AliasesDetails({
aliases,
}: AliasesDetailsProps): ReactElement {
const [aliasesUIState, setAliasesUIState] = useUIState<AliasList[]>(aliases) const [aliasesUIState, setAliasesUIState] = useUIState<AliasList[]>(aliases)
const [hasCopiedToClipboard, setHasCopiedToClipboard] = useState<boolean>(false)
return ( return (
<> <>
@ -33,12 +39,25 @@ export default function AliasesDetails({
{aliasesUIState.map(alias => ( {aliasesUIState.map(alias => (
<ListItemButton <ListItemButton
key={alias.id} key={alias.id}
onClick={event => {
if (isInCopyAddressMode) {
event.preventDefault()
event.stopPropagation()
copy(getAddress(alias))
setHasCopiedToClipboard(true)
}
}}
href={`/aliases/${btoa(getAddress(alias))}`} href={`/aliases/${btoa(getAddress(alias))}`}
> >
<ListItemIcon> <ListItemIcon>
<AliasTypeIndicator type={alias.type} /> <AliasTypeIndicator type={alias.type} />
</ListItemIcon> </ListItemIcon>
<ListItemText primary={getAddress(alias)} /> <ListItemText primary={getAddress(alias)} />
{isInCopyAddressMode && (
<ListItemSecondaryAction>
<MdContentCopy />
</ListItemSecondaryAction>
)}
</ListItemButton> </ListItemButton>
))} ))}
</List> </List>
@ -46,14 +65,18 @@ export default function AliasesDetails({
<Grid item> <Grid item>
<CreateAliasButton <CreateAliasButton
onCreated={alias => onCreated={alias =>
setAliasesUIState(currentAliases => [ setAliasesUIState(currentAliases => [alias, ...currentAliases])
alias,
...currentAliases,
])
} }
/> />
</Grid> </Grid>
</Grid> </Grid>
<SuccessSnack
onClose={() => setHasCopiedToClipboard(false)}
message={
hasCopiedToClipboard &&
t("relations.alias.mutations.success.addressCopiedToClipboard")
}
/>
</> </>
) )
} }