diff --git a/src/App.tsx b/src/App.tsx
index bf9fb78..52b8cd1 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -58,6 +58,7 @@ const router = createBrowserRouter([
element: ,
children: [
{
+ loader: getServerSettings,
path: "/aliases",
element: ,
},
diff --git a/src/constants/values.ts b/src/constants/values.ts
index 83df337..c78bd5c 100644
--- a/src/constants/values.ts
+++ b/src/constants/values.ts
@@ -1 +1,2 @@
export const MASTER_PASSWORD_LENGTH = 4096
+export const LOCAL_REGEX = /^[a-zA-Z0-9!#$%&‘*+–/=?^_`.{|}~-]{1,64}$/g
diff --git a/src/route-widgets/AliasRoute/AliasListItem.tsx b/src/route-widgets/AliasRoute/AliasListItem.tsx
deleted file mode 100644
index aa93279..0000000
--- a/src/route-widgets/AliasRoute/AliasListItem.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import {ReactElement} from "react"
-import {MdOutlineMoreVert} from "react-icons/md"
-
-import {
- IconButton,
- ListItemButton,
- ListItemSecondaryAction,
- ListItemText,
-} from "@mui/material"
-
-import {AliasList} from "~/server-types"
-
-export interface AliasListItemProps {
- alias: AliasList
-}
-
-export default function AliasListItem({
- alias,
-}: AliasListItemProps): ReactElement {
- const address = `${alias.local}@${alias.domain}`
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/route-widgets/AliasesRoute/AliasListItem.tsx b/src/route-widgets/AliasesRoute/AliasListItem.tsx
new file mode 100644
index 0000000..3910e5c
--- /dev/null
+++ b/src/route-widgets/AliasesRoute/AliasListItem.tsx
@@ -0,0 +1,28 @@
+import {ReactElement} from "react"
+import {FaHashtag, FaRandom} from "react-icons/fa"
+
+import {ListItemButton, ListItemIcon, ListItemText} from "@mui/material"
+
+import {AliasList, AliasType} from "~/server-types"
+
+export interface AliasListItemProps {
+ alias: AliasList
+}
+
+const ALIAS_TYPE_ICON_MAP: Record = {
+ [AliasType.RANDOM]: ,
+ [AliasType.CUSTOM]: ,
+}
+
+export default function AliasListItem({
+ alias,
+}: AliasListItemProps): ReactElement {
+ const address = `${alias.local}@${alias.domain}`
+
+ return (
+
+ {ALIAS_TYPE_ICON_MAP[alias.type]}
+
+
+ )
+}
diff --git a/src/route-widgets/AliasRoute/CreateRandomAliasButton.tsx b/src/route-widgets/AliasesRoute/CreateAliasButton.tsx
similarity index 66%
rename from src/route-widgets/AliasRoute/CreateRandomAliasButton.tsx
rename to src/route-widgets/AliasesRoute/CreateAliasButton.tsx
index 131b33d..73f26fc 100644
--- a/src/route-widgets/AliasRoute/CreateRandomAliasButton.tsx
+++ b/src/route-widgets/AliasesRoute/CreateAliasButton.tsx
@@ -15,20 +15,25 @@ import {
} from "@mui/material"
import {useMutation} from "@tanstack/react-query"
-import {CreateAliasData, createAlias} from "~/apis"
+import {createAlias} from "~/apis"
import {Alias, AliasType} from "~/server-types"
-export interface CreateRandomAliasButtonProps {
- onCreated: (alias: Alias) => void
+export interface CreateAliasButtonProps {
+ onRandomCreated: (alias: Alias) => void
+ onCustomCreated: () => void
}
-export default function CreateRandomAliasButton({
- onCreated,
-}: CreateRandomAliasButtonProps): ReactElement {
- const {mutate, isLoading} = useMutation(
- createAlias,
+export default function CreateAliasButton({
+ onRandomCreated,
+ onCustomCreated,
+}: CreateAliasButtonProps): ReactElement {
+ const {mutate, isLoading} = useMutation(
+ () =>
+ createAlias({
+ type: AliasType.RANDOM,
+ }),
{
- onSuccess: onCreated,
+ onSuccess: onRandomCreated,
},
)
@@ -41,11 +46,7 @@ export default function CreateRandomAliasButton({
}
- onClick={() =>
- mutate({
- type: AliasType.RANDOM,
- })
- }
+ onClick={() => mutate()}
>
Create random alias
@@ -62,7 +63,12 @@ export default function CreateRandomAliasButton({
onClose={() => setAnchorElement(null)}
>
-