web3.news/app/components/SimplifiedSearchBar.tsx

95 lines
2.6 KiB
TypeScript

import React, { FormEvent, useState } from "react";
import { useLocation, useNavigate } from "@remix-run/react";
import {
Select,
SelectContent,
SelectTrigger,
SelectItem,
SelectValue,
} from "./ui/select";
import { SitesCombobox } from "./SitesCombobox";
import { FILTER_TIMES } from "@/utils";
type Props = {
value: string;
placeholder?: string;
className?: string;
filters?: {
sites: { value: string; label: string }[];
};
};
const SimplifiedSearchBar = ({
value: initialValue,
placeholder,
filters,
className,
}: Props) => {
let navigate = useNavigate();
let location = useLocation();
const [value, setValue] = useState<string>(initialValue);
const handleSearch = (event: FormEvent<HTMLFormElement>) => {
event.preventDefault();
const newSearchParams = new URLSearchParams(location.search);
if (value) {
newSearchParams.set("q", value);
} else {
newSearchParams.delete("q");
}
navigate(`${location.pathname}?${newSearchParams}`);
};
return (
<form
className={`flex items-center text-lg border-b border-primary pb-2 ${className}`}
onSubmit={handleSearch}
>
<div className="flex-1 flex flex-row max-w-full">
<span className="text-white mr-2">results: </span>
<fieldset
className={`${
value && value !== ""
? `after:content-['"'] before:content-['"'] relative after:absolute after:-right-1`
: "w-full"
} text-primary ${className}`}
>
<input
className={`flex-grow inline bg-transparent placeholder-gray-400 outline-none ring-none text-primary ${
value && value !== "" ? "" : "w-full"
}`}
placeholder={placeholder}
value={value}
onChange={(e) => setValue(e.target.value)}
size={value.length}
/>
</fieldset>
</div>
<div className="w-56 flex gap-2">
{/* Dropdown component should be here */}
<SitesCombobox />
{/* Dropdown component should be here */}
<Select defaultValue={"0"}>
<SelectTrigger className="hover:bg-muted w-auto">
<SelectValue placeholder="Time ago" />
</SelectTrigger>
<SelectContent>
{FILTER_TIMES.map((v) => (
<SelectItem
value={String(v.value)}
key={`FilteTimeSelectItem_${v.value}`}
>
{v.label}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
</form>
);
};
export default SimplifiedSearchBar;