i701 75ad431160 Enhance payment processing and device management features
- Introduced wallet payment option in verifyPayment function to allow users to pay using their wallet balance.
- Added new BlockDeviceDialog component for managing device blocking and unblocking actions.
- Updated DeviceCard component to display device status and integrate blocking functionality.
- Refactored DevicesTable to utilize DeviceCard for better UI representation of devices.
- Implemented Wallet component to manage wallet balance and top-up functionality.
- Enhanced API routes and Prisma schema to support wallet transactions and device blocking reasons.
- Improved overall user experience with responsive design adjustments and new UI elements.

These changes improve user control over payments and device management, enhancing the overall functionality of the application.
2024-12-25 17:21:04 +05:00

47 lines
1.2 KiB
TypeScript

"use client";
import { Input } from "@/components/ui/input";
import { cn } from "@/lib/utils";
import { usePathname, useRouter, useSearchParams } from "next/navigation";
import { useRef, useTransition } from "react";
export default function Search({ disabled }: { disabled?: boolean }) {
const inputRef = useRef<HTMLInputElement>(null);
const { replace } = useRouter();
const pathname = usePathname();
const [isPending, startTransition] = useTransition();
const searchParams = useSearchParams();
const searchQuery = searchParams.get("query");
function handleSearch(term: string) {
const params = new URLSearchParams(searchParams.toString());
if (term) {
params.set("query", term);
params.set("page", "1");
} else {
params.delete("query");
}
startTransition(() => {
replace(`${pathname}?${params.toString()}`);
});
}
return (
<Input
ref={inputRef}
placeholder="Search..."
type="search"
className={cn("w-fit", isPending && "animate-pulse")}
name="search"
id="search"
defaultValue={searchQuery ? searchQuery : ""}
disabled={disabled}
spellCheck={false}
onChange={(e) => handleSearch(e.target.value)}
/>
);
}