Improve user search and optimize Next.js config

User search in the admin users page now queries the backend instead of filtering on the client, and resets pagination on search. Next.js config adds production compression, removes console logs in production (except error/warn), disables the poweredByHeader, and introduces custom webpack code splitting for better bundle optimization. Updated tsconfig target to ES2020.
This commit is contained in:
g
2025-12-31 06:46:06 +00:00
parent 5f1e294091
commit 18ac2224ca
4 changed files with 77 additions and 21 deletions

View File

@@ -55,12 +55,19 @@ export default function AdminUsersPage() {
useEffect(() => {
fetchUsers();
}, [page]);
}, [page, searchQuery]);
const fetchUsers = async () => {
try {
setLoading(true);
const data = await fetchClient<PaginationResponse>(`/admin/users?page=${page}&limit=25`);
const params = new URLSearchParams({
page: page.toString(),
limit: '25'
});
if (searchQuery.trim()) {
params.append('search', searchQuery.trim());
}
const data = await fetchClient<PaginationResponse>(`/admin/users?${params.toString()}`);
setUsers(data.users);
setPagination(data.pagination);
} catch (error: any) {
@@ -75,15 +82,6 @@ export default function AdminUsersPage() {
}
};
const filteredUsers = users.filter((user) => {
if (!searchQuery) return true;
const query = searchQuery.toLowerCase();
return (
user.telegramUserId.toLowerCase().includes(query) ||
user.telegramUsername.toLowerCase().includes(query)
);
});
const usersWithOrders = users.filter(u => u.totalOrders > 0);
const returningCustomers = users.filter(u => u.totalOrders > 1);
const blockedUsers = users.filter(u => u.isBlocked);
@@ -208,7 +206,10 @@ export default function AdminUsersPage() {
placeholder="Search users..."
className="pl-8 w-64"
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
onChange={(e) => {
setSearchQuery(e.target.value);
setPage(1);
}}
/>
</div>
</div>
@@ -219,7 +220,7 @@ export default function AdminUsersPage() {
<div className="flex items-center justify-center py-12">
<Loader2 className="h-8 w-8 animate-spin text-muted-foreground" />
</div>
) : filteredUsers.length === 0 ? (
) : users.length === 0 ? (
<div className="text-center py-8 text-muted-foreground">
{searchQuery ? "No users found matching your search" : "No users found"}
</div>
@@ -238,7 +239,7 @@ export default function AdminUsersPage() {
</TableRow>
</TableHeader>
<TableBody>
{filteredUsers.map((user) => (
{users.map((user) => (
<TableRow key={user.telegramUserId}>
<TableCell>
<div className="font-mono text-sm">{user.telegramUserId}</div>