improvements

This commit is contained in:
Myzel394 2022-10-29 18:22:47 +02:00
parent 1998b430a0
commit 12ac8f9a0b
2 changed files with 99 additions and 38 deletions

View File

@ -1,13 +1,16 @@
import {ReactElement} from "react" import {ReactElement, useState} from "react"
import {useParams} from "react-router-dom" import {useParams} from "react-router-dom"
import {AxiosError} from "axios" import {AxiosError} from "axios"
import {useQuery} from "@tanstack/react-query" import {useMutation, useQuery} from "@tanstack/react-query"
import {Grid, Typography} from "@mui/material" import {Grid, Switch, Typography} from "@mui/material"
import {getAlias} from "~/apis" import {UpdateAliasData, getAlias, updateAlias} from "~/apis"
import {Alias} from "~/server-types" import {Alias} from "~/server-types"
import {ErrorSnack, SuccessSnack} from "~/components"
import {parseFastAPIError} from "~/utils"
import AliasPreferencesForm from "~/route-widgets/AliasDetailRoute/AliasPreferencesForm" import AliasPreferencesForm from "~/route-widgets/AliasDetailRoute/AliasPreferencesForm"
import AliasTypeIndicator from "~/components/AliasTypeIndicator"
import QueryResult from "~/components/QueryResult" import QueryResult from "~/components/QueryResult"
import SimplePage from "~/components/SimplePage" import SimplePage from "~/components/SimplePage"
@ -15,21 +18,74 @@ export default function AliasDetailRoute(): ReactElement {
const params = useParams() const params = useParams()
const address = atob(params.addressInBase64 as string) const address = atob(params.addressInBase64 as string)
const [successMessage, setSuccessMessage] = useState<string>("")
const [errorMessage, setErrorMessage] = useState<string>("")
const [isActive, setIsActive] = useState<boolean>(true)
const query = useQuery<Alias, AxiosError>( const query = useQuery<Alias, AxiosError>(
["get_alias", params.addressInBase64], ["get_alias", params.addressInBase64],
() => getAlias(address), () => getAlias(address),
{
onSuccess: alias => setIsActive(alias.isActive),
},
)
const {mutateAsync} = useMutation<Alias, AxiosError, UpdateAliasData>(
values => updateAlias(query.data!.id, values),
{
onSuccess: () => query.refetch(),
onError: error => {
setErrorMessage(parseFastAPIError(error).detail as string)
},
},
) )
return ( return (
<>
<SimplePage title="Alias Details"> <SimplePage title="Alias Details">
<QueryResult<Alias> query={query}> <QueryResult<Alias> query={query}>
{alias => ( {alias => (
<Grid container spacing={4}> <Grid container spacing={4}>
<Grid item>
<Grid
container
spacing={1}
direction="row"
alignItems="center"
>
<Grid item>
<AliasTypeIndicator type={alias.type} />
</Grid>
<Grid item> <Grid item>
<Typography variant="subtitle1"> <Typography variant="subtitle1">
{address} {address}
</Typography> </Typography>
</Grid> </Grid>
<Grid item>
<Switch
checked={isActive}
onChange={async () => {
setIsActive(!isActive)
try {
await mutateAsync({
isActive,
})
if (isActive) {
setSuccessMessage(
"Alias activated successfully!",
)
} else {
setSuccessMessage(
"Alias deactivated successfully!",
)
}
} catch {}
}}
/>
</Grid>
</Grid>
</Grid>
<Grid item> <Grid item>
<Grid container spacing={4}> <Grid container spacing={4}>
<Grid item> <Grid item>
@ -39,13 +95,14 @@ export default function AliasDetailRoute(): ReactElement {
</Grid> </Grid>
<Grid item> <Grid item>
<Typography variant="body1"> <Typography variant="body1">
These settings apply to this alias only. These settings apply to this alias
You can either set a value manually or only. You can either set a value
refer to your defaults settings. Note manually or refer to your defaults
that this does change in behavior. When settings. Note that this does change
you set a value to refer to your default in behavior. When you set a value to
setting, the alias will always use the refer to your default setting, the
latest value. So when you change your alias will always use the latest
value. So when you change your
default setting, the alias will default setting, the alias will
automatically use the new value. automatically use the new value.
</Typography> </Typography>
@ -59,5 +116,8 @@ export default function AliasDetailRoute(): ReactElement {
)} )}
</QueryResult> </QueryResult>
</SimplePage> </SimplePage>
<SuccessSnack message={successMessage} />
<ErrorSnack message={errorMessage} />
</>
) )
} }

View File

@ -83,6 +83,7 @@ export interface Alias {
local: string local: string
isActive: boolean isActive: boolean
encryptedNotes: string encryptedNotes: string
type: AliasType
prefRemoveTrackers: boolean | null prefRemoveTrackers: boolean | null
prefCreateMailReport: boolean | null prefCreateMailReport: boolean | null