feat: Add EmptyStateScreen.tsx for reserved aliases

This commit is contained in:
Myzel394 2023-02-12 16:38:56 +01:00
parent 30ccdbce13
commit 652837838b
3 changed files with 84 additions and 30 deletions

View File

@ -295,7 +295,11 @@
} }
}, },
"userAmount_one": "Forwards to one user", "userAmount_one": "Forwards to one user",
"userAmount_other": "Forwards to {{count}} users" "userAmount_other": "Forwards to {{count}} users",
"emptyState": {
"title": "Create your first reserved alias",
"description": "Reserved aliases are aliases that will be forwarded to selected admin users. This is useful if you want to create aliases that are meant to be public, like contact@example.com or hello@example.com."
}
}, },
"ReservedAliasDetailRoute": { "ReservedAliasDetailRoute": {
"title": "Reserved Alias Details", "title": "Reserved Alias Details",

View File

@ -0,0 +1,37 @@
import {ReactElement} from "react"
import {useTranslation} from "react-i18next"
import {Container, Grid, Typography} from "@mui/material"
import {BsStarFill} from "react-icons/bs"
export default function EmptyStateScreen(): ReactElement {
const {t} = useTranslation()
return (
<Container maxWidth="xs">
<Grid
container
spacing={4}
direction="column"
alignItems="center"
maxWidth="80%"
alignSelf="center"
marginX="auto"
>
<Grid item>
<Typography variant="h6" component="h2">
{t("routes.ReservedAliasesRoute.emptyState.title")}
</Typography>
</Grid>
<Grid item>
<BsStarFill size={40} />
</Grid>
<Grid item>
<Typography variant="body1">
{t("routes.ReservedAliasesRoute.emptyState.description")}
</Typography>
</Grid>
</Grid>
</Container>
)
}

View File

@ -18,7 +18,8 @@ import {useQuery} from "@tanstack/react-query"
import {PaginationResult, ReservedAlias} from "~/server-types" import {PaginationResult, ReservedAlias} from "~/server-types"
import {getReservedAliases} from "~/apis" import {getReservedAliases} from "~/apis"
import {QueryResult, SimplePage} from "~/components" import {NoSearchResults, QueryResult, SimplePage} from "~/components"
import EmptyStateScreen from "~/route-widgets/ReservedAliasesRoute/EmptyStateScreen"
export default function ReservedAliasesRoute(): ReactElement { export default function ReservedAliasesRoute(): ReactElement {
const {t} = useTranslation() const {t} = useTranslation()
@ -33,8 +34,10 @@ export default function ReservedAliasesRoute(): ReactElement {
query: queryValue, query: queryValue,
}), }),
{ {
onSuccess: () => { onSuccess: ({items}) => {
if (items.length) {
setShowSearch(true) setShowSearch(true)
}
}, },
}, },
) )
@ -81,7 +84,16 @@ export default function ReservedAliasesRoute(): ReactElement {
} }
> >
<QueryResult<PaginationResult<ReservedAlias>, AxiosError> query={query}> <QueryResult<PaginationResult<ReservedAlias>, AxiosError> query={query}>
{({items: aliases}) => ( {({items: aliases}) => {
if (aliases.length === 0) {
if (searchValue === "") {
return <EmptyStateScreen />
} else {
return <NoSearchResults />
}
}
return (
<List> <List>
{aliases.map(alias => ( {aliases.map(alias => (
<ListItemButton <ListItemButton
@ -106,7 +118,8 @@ export default function ReservedAliasesRoute(): ReactElement {
</ListItemButton> </ListItemButton>
))} ))}
</List> </List>
)} )
}}
</QueryResult> </QueryResult>
</SimplePage> </SimplePage>
) )