@@ -122,43 +122,47 @@ export const TextAreaComposer = ({
122122 onKeyDown ( event ) ;
123123 return ;
124124 }
125- // todo: submit message with commands (giphy, ban @mention, etc)
126- if ( textComposer . suggestions ) {
125+
126+ if ( event . key === 'Enter' ) {
127+ // allow next line only on Shift + Enter. Enter is reserved for submission.
128+ event . preventDefault ( ) ;
129+ }
130+
131+ if (
132+ textComposer . suggestions &&
133+ textComposer . suggestions . searchSource . items ?. length
134+ ) {
127135 if ( event . key === 'Escape' ) return textComposer . closeSuggestions ( ) ;
128136 const loadedItems = textComposer . suggestions . searchSource . items ;
129- if ( loadedItems ?. length ) {
130- if ( event . key === 'Enter' ) {
131- event . preventDefault ( ) ;
132- textComposer . handleSelect ( loadedItems [ focusedItemIndex ] ) ;
133- }
134- if ( event . key === 'ArrowUp' ) {
135- event . preventDefault ( ) ;
136- setFocusedItemIndex ( ( prev ) => {
137- let nextIndex = prev - 1 ;
138- if ( suggestions ?. searchSource . hasNext ) {
139- nextIndex = prev ;
140- } else if ( nextIndex < 0 ) {
141- nextIndex = loadedItems . length - 1 ;
142- }
143- return nextIndex ;
144- } ) ;
145- }
146- if ( event . key === 'ArrowDown' ) {
147- event . preventDefault ( ) ;
148- setFocusedItemIndex ( ( prev ) => {
149- let nextIndex = prev + 1 ;
150- if ( suggestions ?. searchSource . hasNext ) {
151- nextIndex = prev ;
152- } else if ( nextIndex >= loadedItems . length ) {
153- nextIndex = 0 ;
154- }
155-
156- return nextIndex ;
157- } ) ;
158- }
137+ if ( event . key === 'Enter' ) {
138+ textComposer . handleSelect ( loadedItems [ focusedItemIndex ] ) ;
139+ }
140+ if ( event . key === 'ArrowUp' ) {
141+ event . preventDefault ( ) ;
142+ setFocusedItemIndex ( ( prev ) => {
143+ let nextIndex = prev - 1 ;
144+ if ( suggestions ?. searchSource . hasNext ) {
145+ nextIndex = prev ;
146+ } else if ( nextIndex < 0 ) {
147+ nextIndex = loadedItems . length - 1 ;
148+ }
149+ return nextIndex ;
150+ } ) ;
151+ }
152+ if ( event . key === 'ArrowDown' ) {
153+ event . preventDefault ( ) ;
154+ setFocusedItemIndex ( ( prev ) => {
155+ let nextIndex = prev + 1 ;
156+ if ( suggestions ?. searchSource . hasNext ) {
157+ nextIndex = prev ;
158+ } else if ( nextIndex >= loadedItems . length ) {
159+ nextIndex = 0 ;
160+ }
161+
162+ return nextIndex ;
163+ } ) ;
159164 }
160165 } else if ( shouldSubmit ( event ) && textareaRef . current ) {
161- event . preventDefault ( ) ;
162166 handleSubmit ( ) ;
163167 textareaRef . current . selectionEnd = 0 ;
164168 }
0 commit comments