mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-30 02:23:47 +00:00
Update AdminUsers.tsx
This commit is contained in:
@@ -978,6 +978,7 @@ export default function AdminUsers() {
|
|||||||
const [stats, setStats] = useState<UsersStatsResponse | null>(null);
|
const [stats, setStats] = useState<UsersStatsResponse | null>(null);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [search, setSearch] = useState('');
|
const [search, setSearch] = useState('');
|
||||||
|
const [emailSearch, setEmailSearch] = useState('');
|
||||||
const [statusFilter, setStatusFilter] = useState<string>('');
|
const [statusFilter, setStatusFilter] = useState<string>('');
|
||||||
const [sortBy, setSortBy] = useState<string>('created_at');
|
const [sortBy, setSortBy] = useState<string>('created_at');
|
||||||
const [offset, setOffset] = useState(0);
|
const [offset, setOffset] = useState(0);
|
||||||
@@ -991,6 +992,7 @@ export default function AdminUsers() {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
const params: Record<string, unknown> = { offset, limit, sort_by: sortBy };
|
const params: Record<string, unknown> = { offset, limit, sort_by: sortBy };
|
||||||
if (search) params.search = search;
|
if (search) params.search = search;
|
||||||
|
if (emailSearch) params.email = emailSearch;
|
||||||
if (statusFilter) params.status = statusFilter;
|
if (statusFilter) params.status = statusFilter;
|
||||||
|
|
||||||
const data = await adminUsersApi.getUsers(
|
const data = await adminUsersApi.getUsers(
|
||||||
@@ -1003,7 +1005,7 @@ export default function AdminUsers() {
|
|||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
}, [offset, search, statusFilter, sortBy]);
|
}, [offset, search, emailSearch, statusFilter, sortBy]);
|
||||||
|
|
||||||
const loadStats = useCallback(async () => {
|
const loadStats = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
@@ -1086,7 +1088,9 @@ export default function AdminUsers() {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Filters */}
|
{/* Filters */}
|
||||||
<div className="mb-4 flex flex-col gap-3 sm:flex-row">
|
<div className="mb-4 flex flex-col gap-3">
|
||||||
|
{/* Search fields row */}
|
||||||
|
<div className="flex flex-col gap-3 sm:flex-row">
|
||||||
<form onSubmit={handleSearch} className="flex-1">
|
<form onSubmit={handleSearch} className="flex-1">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<input
|
<input
|
||||||
@@ -1101,6 +1105,23 @@ export default function AdminUsers() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
<form onSubmit={handleSearch} className="flex-1">
|
||||||
|
<div className="relative">
|
||||||
|
<input
|
||||||
|
type="email"
|
||||||
|
value={emailSearch}
|
||||||
|
onChange={(e) => setEmailSearch(e.target.value)}
|
||||||
|
placeholder={t('admin.users.searchEmail')}
|
||||||
|
className="w-full rounded-xl border border-dark-700 bg-dark-800 py-2 pl-10 pr-4 text-dark-100 placeholder-dark-500 focus:border-dark-600 focus:outline-none"
|
||||||
|
/>
|
||||||
|
<div className="absolute left-3 top-1/2 -translate-y-1/2 text-dark-500">
|
||||||
|
<SearchIcon />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{/* Filters row */}
|
||||||
|
<div className="flex flex-col gap-3 sm:flex-row">
|
||||||
<select
|
<select
|
||||||
value={statusFilter}
|
value={statusFilter}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
@@ -1128,6 +1149,7 @@ export default function AdminUsers() {
|
|||||||
<option value="total_spent">{t('admin.users.filters.bySpent')}</option>
|
<option value="total_spent">{t('admin.users.filters.bySpent')}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Users list */}
|
{/* Users list */}
|
||||||
<div className="mb-4 space-y-2">
|
<div className="mb-4 space-y-2">
|
||||||
|
|||||||
Reference in New Issue
Block a user