@@ -45,7 +45,9 @@ export interface InputProps<T> extends Code0Input, ValidationProps<T> {
4545 validationUsesSuggestions ?: boolean
4646 disableOnValue ?: ( value : T ) => boolean
4747 filterSuggestionsByLastToken ?: boolean
48+ onLastTokenChange ?: ( token : string | null ) => void
4849 enforceUniqueSuggestions ?: boolean
50+ suggestionsEmptyState ?: React . ReactNode
4951
5052 wrapperComponent ?: Code0Component < HTMLDivElement >
5153 right ?: React . ReactNode
@@ -86,6 +88,8 @@ const InputComponent = React.forwardRef<HTMLInputElement, InputProps<any>>(
8688 validationUsesSuggestions = false ,
8789 filterSuggestionsByLastToken = false ,
8890 enforceUniqueSuggestions = false ,
91+ onLastTokenChange,
92+ suggestionsEmptyState,
8993 ...rest
9094 } = props
9195
@@ -333,6 +337,14 @@ const InputComponent = React.forwardRef<HTMLInputElement, InputProps<any>>(
333337 }
334338 } , [ filterSuggestionsByLastToken , inputRef , normalizeTextValue , syntaxSegments , value ] )
335339
340+ useEffect ( ( ) => {
341+ setOpen ( true )
342+ if ( ! filterSuggestionsByLastToken ) return
343+ if ( ! onLastTokenChange ) return
344+
345+ onLastTokenChange ( trailingTextTokenData ?. token ?? null )
346+ } , [ filterSuggestionsByLastToken , onLastTokenChange , trailingTextTokenData ?. token ] )
347+
336348 const filteredSuggestions = React . useMemo ( ( ) => {
337349 if ( ! filterSuggestionsByLastToken ) return suggestions
338350 if ( ! suggestions ) return suggestions
@@ -883,30 +895,33 @@ const InputComponent = React.forwardRef<HTMLInputElement, InputProps<any>>(
883895 />
884896 </ MenuTrigger >
885897 < MenuPortal >
886- < InputSuggestionMenuContent inputRef = { inputRef } >
887- { suggestionsHeader }
888- < InputSuggestionMenuContentItems
889- /* @ts -ignore */
890- ref = { menuRef }
891- inputRef = { inputRef }
892- suggestions = { availableSuggestions }
893- onSuggestionSelect = { ( suggestion ) => {
894- if ( ! onSuggestionSelect ) {
895- applySuggestionValue ( suggestion )
896- } else {
897- onSuggestionSelect ?.( suggestion )
898- }
899- setOpen ( false )
900- if ( onSuggestionSelect ) {
901- focusInputCaretAtEnd ( )
902- }
903- } }
904- />
905- { suggestionsFooter }
906- </ InputSuggestionMenuContent >
907- </ MenuPortal >
908- </ Menu >
909- ) , [ applySuggestionValue , availableSuggestions , disabledOnValue , focusInputCaretAtEnd , handleBlur , handleFocus , handleKeyDown , handleKeyDownCapture , inputRef , onSuggestionSelect , open , rest , suggestionsFooter , suggestionsHeader , transformSyntaxWithAppliedParts ] )
898+ < InputSuggestionMenuContent inputRef = { inputRef } >
899+ { suggestionsHeader }
900+ { availableSuggestions ?. length === 0 && suggestionsEmptyState }
901+ { ! ! availableSuggestions ?. length && (
902+ < InputSuggestionMenuContentItems
903+ /* @ts -ignore */
904+ ref = { menuRef }
905+ inputRef = { inputRef }
906+ suggestions = { availableSuggestions }
907+ onSuggestionSelect = { ( suggestion ) => {
908+ if ( ! onSuggestionSelect ) {
909+ applySuggestionValue ( suggestion )
910+ } else {
911+ onSuggestionSelect ?.( suggestion )
912+ }
913+ setOpen ( false )
914+ if ( onSuggestionSelect ) {
915+ focusInputCaretAtEnd ( )
916+ }
917+ } }
918+ />
919+ ) }
920+ { suggestionsFooter }
921+ </ InputSuggestionMenuContent >
922+ </ MenuPortal >
923+ </ Menu >
924+ ) , [ applySuggestionValue , availableSuggestions , disabledOnValue , focusInputCaretAtEnd , handleBlur , handleFocus , handleKeyDown , handleKeyDownCapture , inputRef , onSuggestionSelect , open , rest , suggestionsEmptyState , suggestionsFooter , suggestionsHeader , transformSyntaxWithAppliedParts ] )
910925
911926 return (
912927 < >
0 commit comments