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,
+ })}
+ />
+
+
+
+
+ ))}
+
+ )
+ }}
)