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) && (