diff --git a/joi/src/core/Input/index.tsx b/joi/src/core/Input/index.tsx index d82099e9c..99b7fe8ab 100644 --- a/joi/src/core/Input/index.tsx +++ b/joi/src/core/Input/index.tsx @@ -2,17 +2,30 @@ import React, { ReactNode, forwardRef } from 'react' import { twMerge } from 'tailwind-merge' import './styles.scss' +import { Cross2Icon } from '@radix-ui/react-icons' export interface Props extends React.InputHTMLAttributes { textAlign?: 'left' | 'right' prefixIcon?: ReactNode suffixIcon?: ReactNode onCLick?: () => void + clearable?: boolean + onClear?: () => void } const Input = forwardRef( ( - { className, type, textAlign, prefixIcon, suffixIcon, onClick, ...props }, + { + className, + type, + textAlign, + prefixIcon, + suffixIcon, + onClick, + onClear, + clearable, + ...props + }, ref ) => { return ( @@ -27,6 +40,11 @@ const Input = forwardRef( {suffixIcon} )} + {clearable && ( +
+ +
+ )} { [debounced] ) + const onClear = useCallback(() => { + setSearchText('') + debounced() + }, [debounced]) + const onKeyDown = useCallback( (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) { @@ -80,6 +85,9 @@ const ModelSearch = ({ onSearchLocal }: Props) => { placeholder="Search or paste Hugging Face URL" onChange={onSearchChanged} onKeyDown={onKeyDown} + value={searchText} + clearable={searchText.length > 0} + onClear={onClear} /> ) } diff --git a/web/screens/Settings/CoreExtensions/index.tsx b/web/screens/Settings/CoreExtensions/index.tsx index b3b988c66..65bc74ba8 100644 --- a/web/screens/Settings/CoreExtensions/index.tsx +++ b/web/screens/Settings/CoreExtensions/index.tsx @@ -138,7 +138,10 @@ const ExtensionCatalog = () => { } placeholder="Search" + value={searchText} onChange={(e) => setSearchText(e.target.value)} + clearable={searchText.length > 0} + onClear={() => setSearchText('')} />