import { Search, X } from "lucide-react"; import { useTranslation } from "react-i18next"; import { I18nKey } from "#/i18n/declaration"; import { cn } from "#/utils/utils"; import type { PluginStatusFilter } from "./build-plugins-view-model"; interface PluginsToolbarProps { search: string; onSearchChange: (value: string) => void; statusFilter: PluginStatusFilter; onStatusFilterChange: (filter: PluginStatusFilter) => void; } const STATUS_FILTERS: ReadonlyArray<{ value: PluginStatusFilter; labelKey: I18nKey; }> = [ { value: "all", labelKey: I18nKey.SETTINGS$PLUGINS_FILTER_ALL }, { value: "installed", labelKey: I18nKey.SETTINGS$PLUGINS_FILTER_INSTALLED }, { value: "available", labelKey: I18nKey.SETTINGS$PLUGINS_FILTER_AVAILABLE }, { value: "local", labelKey: I18nKey.SETTINGS$PLUGINS_FILTER_LOCAL }, ]; export function PluginsToolbar({ search, onSearchChange, statusFilter, onStatusFilterChange, }: PluginsToolbarProps) { const { t } = useTranslation("openhands"); return (
onSearchChange(e.target.value)} placeholder={t(I18nKey.SETTINGS$PLUGINS_SEARCH_PLACEHOLDER)} aria-label={t(I18nKey.SETTINGS$PLUGINS_SEARCH_PLACEHOLDER)} className={cn( "flex-1 min-w-0 bg-transparent border-0 outline-none", "px-3 py-2 text-sm placeholder:text-tertiary-alt", "[&::-webkit-search-cancel-button]:hidden", )} /> {search ? ( ) : null}
{STATUS_FILTERS.map((filter) => ( ))}
); }