mirror of
https://github.com/Myzel394/kleckrelay-website.git
synced 2025-06-21 00:30:31 +02:00
added copy to clipboard on AliasesDetails.tsx
This commit is contained in:
parent
f0c0578719
commit
8616d4085a
@ -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")
|
||||||
|
}
|
||||||
|
/>
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user