diff --git a/apps/dashboard/app/members/page.tsx b/apps/dashboard/app/members/page.tsx index dfd0bee..11e55ed 100644 --- a/apps/dashboard/app/members/page.tsx +++ b/apps/dashboard/app/members/page.tsx @@ -8,6 +8,7 @@ import StatusBadge from "@/components/StatusBadge"; import WalletAddressText from "@/components/WalletAddressText"; import UnsupportedBanner from "@/components/UnsupportedBanner"; import { ApiClientError, readApiResult } from "@/lib/api-client"; +import { tryNormaliseAddress } from "@/lib/address"; import { getClientApiMode } from "@/lib/client-env"; import { useSession } from "@/lib/hooks/useSession"; import { useOptimisticMutation } from "@/lib/hooks/useOptimisticMutation"; @@ -101,6 +102,7 @@ function MembersPageContent() { const [isInviteOpen, setIsInviteOpen] = useState(false); const [inviteLoading, setInviteLoading] = useState(false); const [form, setForm] = useState({ name: "", wallet: "" }); + const [walletError, setWalletError] = useState(null); const updateFilterQuery = useCallback( (updates: { search?: string; status?: MemberStatusFilter; role?: MemberRoleFilter; guild?: string; page?: number | null }) => { @@ -477,10 +479,33 @@ function MembersPageContent() {

Invite Member

setForm({ ...form, name: e.target.value })} className="w-full rounded-lg border border-slate-200 p-2" /> - setForm({ ...form, wallet: e.target.value })} className="w-full rounded-lg border border-slate-200 p-2" /> +
+ { + setForm({ ...form, wallet: e.target.value }); + if (walletError) setWalletError(null); + }} + aria-invalid={walletError ? true : undefined} + aria-describedby={walletError ? "invite-wallet-error" : undefined} + className={`w-full rounded-lg border p-2 ${walletError ? "border-red-400" : "border-slate-200"}`} + /> + {walletError && ( +

+ {walletError} +

+ )} +
-