236
236
<textarea
237
237
v-show =" !file || imageFile || videoFile"
238
238
ref =" roomTextarea"
239
- v-model =" message"
240
239
:placeholder =" textMessages.TYPE_MESSAGE"
241
240
class =" vac-textarea"
242
241
:class =" {
@@ -338,9 +337,22 @@ import Message from '../Message/Message'
338
337
339
338
import filteredUsers from ' ../../utils/filter-items'
340
339
import Recorder from ' ../../utils/recorder'
340
+
341
341
const { detectMobile , iOSDevice } = require (' ../../utils/mobile-detection' )
342
342
const { isImageFile , isVideoFile } = require (' ../../utils/media-file' )
343
343
344
+ const debounce = (func , delay ) => {
345
+ let inDebounce
346
+ return function () {
347
+ const context = this
348
+ const args = arguments
349
+ clearTimeout (inDebounce)
350
+ inDebounce = setTimeout (() =>
351
+ func .apply (context, args)
352
+ , delay)
353
+ }
354
+ }
355
+
344
356
export default {
345
357
name: ' Room' ,
346
358
components: {
@@ -456,6 +468,9 @@ export default {
456
468
},
457
469
458
470
watch: {
471
+ message (val ) {
472
+ this .$refs .roomTextarea .value = val
473
+ },
459
474
loadingMessages (val ) {
460
475
if (val) {
461
476
this .infiniteState = null
@@ -512,7 +527,7 @@ export default {
512
527
this .newMessages = []
513
528
const isMobile = detectMobile ()
514
529
515
- window . addEventListener (' keyup' , e => {
530
+ this . $refs . roomTextarea . addEventListener (' keyup' , debounce (( e ) => {
516
531
if (e .key === ' Enter' && ! e .shiftKey && ! this .fileDialog ) {
517
532
if (isMobile) {
518
533
this .message = this .message + ' \n '
@@ -524,10 +539,11 @@ export default {
524
539
525
540
this .updateFooterList (' @' )
526
541
this .updateFooterList (' :' )
527
- })
542
+ }), 50 )
528
543
529
544
this .$refs [' roomTextarea' ].addEventListener (' click' , () => {
530
545
if (isMobile) this .keepKeyboardOpen = true
546
+
531
547
this .updateFooterList (' @' )
532
548
this .updateFooterList (' :' )
533
549
})
@@ -898,11 +914,12 @@ export default {
898
914
setTimeout (() => element .classList .remove (' vac-scroll-smooth' ))
899
915
}, 50 )
900
916
},
901
- onChangeInput () {
902
- this .keepKeyboardOpen = true
903
- this .resizeTextarea ()
904
- this .$emit (' typing-message' , this .message )
905
- },
917
+ onChangeInput: debounce (function (e ) {
918
+ this .message = e .target .value
919
+ this .keepKeyboardOpen = true
920
+ this .resizeTextarea ()
921
+ this .$emit (' typing-message' , this .message )
922
+ }, 100 ),
906
923
resizeTextarea () {
907
924
const el = this .$refs [' roomTextarea' ]
908
925
0 commit comments