diff --git a/public/locales/en-US/translation.json b/public/locales/en-US/translation.json index bd8b9d4..f67df95 100644 --- a/public/locales/en-US/translation.json +++ b/public/locales/en-US/translation.json @@ -295,7 +295,11 @@ } }, "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": { "title": "Reserved Alias Details", diff --git a/src/route-widgets/ReservedAliasesRoute/EmptyStateScreen.tsx b/src/route-widgets/ReservedAliasesRoute/EmptyStateScreen.tsx new file mode 100644 index 0000000..ee300e9 --- /dev/null +++ b/src/route-widgets/ReservedAliasesRoute/EmptyStateScreen.tsx @@ -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 ( + + + + + {t("routes.ReservedAliasesRoute.emptyState.title")} + + + + + + + + {t("routes.ReservedAliasesRoute.emptyState.description")} + + + + + ) +} diff --git a/src/routes/ReservedAliasesRoute.tsx b/src/routes/ReservedAliasesRoute.tsx index 493f141..4b6ca4a 100644 --- a/src/routes/ReservedAliasesRoute.tsx +++ b/src/routes/ReservedAliasesRoute.tsx @@ -18,7 +18,8 @@ import {useQuery} from "@tanstack/react-query" import {PaginationResult, ReservedAlias} from "~/server-types" 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 { const {t} = useTranslation() @@ -33,8 +34,10 @@ export default function ReservedAliasesRoute(): ReactElement { query: queryValue, }), { - onSuccess: () => { - setShowSearch(true) + onSuccess: ({items}) => { + if (items.length) { + setShowSearch(true) + } }, }, ) @@ -81,32 +84,42 @@ export default function ReservedAliasesRoute(): ReactElement { } > , AxiosError> query={query}> - {({items: aliases}) => ( - - {aliases.map(alias => ( - - - {alias.local} - @{alias.domain} - - } - secondary={t("routes.ReservedAliasesRoute.userAmount", { - count: alias.users.length, - })} - /> - - - - - ))} - - )} + {({items: aliases}) => { + if (aliases.length === 0) { + if (searchValue === "") { + return + } else { + return + } + } + + return ( + + {aliases.map(alias => ( + + + {alias.local} + @{alias.domain} + + } + secondary={t("routes.ReservedAliasesRoute.userAmount", { + count: alias.users.length, + })} + /> + + + + + ))} + + ) + }} )