diff --git a/src/app/admin/users/page.tsx b/src/app/admin/users/page.tsx
index d937151..fd7fd8a 100644
--- a/src/app/admin/users/page.tsx
+++ b/src/app/admin/users/page.tsx
@@ -8,11 +8,11 @@ import { UsersSearch } from "@/components/admin/users-search";
const PAGE_SIZE = 20;
interface Props {
- searchParams: Promise<{ search?: string; role?: string; page?: string; balance?: string }>;
+ searchParams: Promise<{ search?: string; role?: string; page?: string; balance?: string; emailVerified?: string }>;
}
export default async function UsersPage({ searchParams }: Props) {
- const { search = "", role = "", page = "1", balance = "" } = await searchParams;
+ const { search = "", role = "", page = "1", balance = "", emailVerified = "" } = await searchParams;
const currentPage = Math.max(1, parseInt(page) || 1);
const skip = (currentPage - 1) * PAGE_SIZE;
@@ -37,6 +37,8 @@ export default async function UsersPage({ searchParams }: Props) {
}
: {}),
...(role ? { role } : {}),
+ ...(emailVerified === "true" ? { emailVerified: true } : {}),
+ ...(emailVerified === "false" ? { emailVerified: false } : {}),
...(balanceUserIds !== null ? { id: { in: balanceUserIds } } : {}),
};
@@ -78,6 +80,7 @@ export default async function UsersPage({ searchParams }: Props) {
const params = new URLSearchParams();
if (search) params.set("search", search);
if (role) params.set("role", role);
+ if (emailVerified) params.set("emailVerified", emailVerified);
if (balance) params.set("balance", balance);
params.set("page", String(p));
return `/admin/users?${params.toString()}`;
@@ -101,7 +104,7 @@ export default async function UsersPage({ searchParams }: Props) {
{/* Filters */}
-
+
@@ -132,7 +135,7 @@ export default async function UsersPage({ searchParams }: Props) {
{currentPage < totalPages && (
→
)}
- стр. {currentPage} из {totalPages}
+ Страница {currentPage} из {totalPages} · Всего: {total}
)}
diff --git a/src/components/admin/users-search.tsx b/src/components/admin/users-search.tsx
index d1be4e8..82cdae1 100644
--- a/src/components/admin/users-search.tsx
+++ b/src/components/admin/users-search.tsx
@@ -16,20 +16,23 @@ const inputStyle: React.CSSProperties = {
export function UsersSearch({
initialSearch,
initialRole,
+ initialEmailVerified,
initialBalance,
}: {
initialSearch: string;
initialRole: string;
+ initialEmailVerified: string;
initialBalance: string;
}) {
const router = useRouter();
const pathname = usePathname();
const [, startTransition] = useTransition();
- function update(search: string, role: string, balance: string) {
+ function update(search: string, role: string, emailVerified: string, balance: string) {
const params = new URLSearchParams();
if (search) params.set("search", search);
if (role) params.set("role", role);
+ if (emailVerified) params.set("emailVerified", emailVerified);
if (balance) params.set("balance", balance);
startTransition(() => router.push(`${pathname}?${params.toString()}`));
}
@@ -45,7 +48,7 @@ export function UsersSearch({
onFocus={(e) => (e.currentTarget.style.borderColor = "var(--foreground)")}
onBlur={(e) => {
e.currentTarget.style.borderColor = "var(--border)";
- update(e.currentTarget.value.trim(), initialRole, initialBalance);
+ update(e.currentTarget.value.trim(), initialRole, initialEmailVerified, initialBalance);
}}
onKeyDown={(e) => { if (e.key === "Enter") e.currentTarget.blur(); }}
/>
@@ -53,7 +56,7 @@ export function UsersSearch({
+
+
- {(initialSearch || initialRole || initialBalance) && (
+ {(initialSearch || initialRole || initialEmailVerified || initialBalance) && (