Add nonzero balance filter to users page, link from dashboard card

This commit is contained in:
2026-05-08 14:24:31 +05:00
parent 2dfc42821c
commit 5547b427bb
3 changed files with 46 additions and 10 deletions
+28 -5
View File
@@ -13,15 +13,24 @@ const inputStyle: React.CSSProperties = {
fontFamily: "inherit",
};
export function UsersSearch({ initialSearch, initialRole }: { initialSearch: string; initialRole: string }) {
export function UsersSearch({
initialSearch,
initialRole,
initialBalance,
}: {
initialSearch: string;
initialRole: string;
initialBalance: string;
}) {
const router = useRouter();
const pathname = usePathname();
const [, startTransition] = useTransition();
function update(search: string, role: string) {
function update(search: string, role: string, balance: string) {
const params = new URLSearchParams();
if (search) params.set("search", search);
if (role) params.set("role", role);
if (balance) params.set("balance", balance);
startTransition(() => router.push(`${pathname}?${params.toString()}`));
}
@@ -36,7 +45,7 @@ export function UsersSearch({ initialSearch, initialRole }: { initialSearch: str
onFocus={(e) => (e.currentTarget.style.borderColor = "var(--foreground)")}
onBlur={(e) => {
e.currentTarget.style.borderColor = "var(--border)";
update(e.currentTarget.value.trim(), initialRole);
update(e.currentTarget.value.trim(), initialRole, initialBalance);
}}
onKeyDown={(e) => { if (e.key === "Enter") e.currentTarget.blur(); }}
/>
@@ -44,7 +53,7 @@ export function UsersSearch({ initialSearch, initialRole }: { initialSearch: str
<select
defaultValue={initialRole}
onChange={(e) => update(initialSearch, e.target.value)}
onChange={(e) => update(initialSearch, e.target.value, initialBalance)}
style={{ ...inputStyle, appearance: "none", cursor: "pointer" }}
onFocus={(e) => (e.currentTarget.style.borderColor = "var(--foreground)")}
onBlur={(e) => (e.currentTarget.style.borderColor = "var(--border)")}
@@ -55,7 +64,21 @@ export function UsersSearch({ initialSearch, initialRole }: { initialSearch: str
<option value="admin">Администраторы</option>
</select>
{(initialSearch || initialRole) && (
<button
type="button"
onClick={() => update(initialSearch, initialRole, initialBalance === "nonzero" ? "" : "nonzero")}
className="text-xs px-3"
style={{
border: "2px solid var(--border)",
background: initialBalance === "nonzero" ? "var(--foreground)" : "transparent",
color: initialBalance === "nonzero" ? "var(--background)" : "var(--muted-foreground)",
cursor: "pointer",
}}
>
С балансом
</button>
{(initialSearch || initialRole || initialBalance) && (
<button
type="button"
onClick={() => startTransition(() => router.push(pathname))}