236236 <textarea
237237 v-show =" !file || imageFile || videoFile"
238238 ref =" roomTextarea"
239- v-model =" message"
240239 :placeholder =" textMessages.TYPE_MESSAGE"
241240 class =" vac-textarea"
242241 :class =" {
@@ -338,9 +337,22 @@ import Message from '../Message/Message'
338337
339338import filteredUsers from ' ../../utils/filter-items'
340339import Recorder from ' ../../utils/recorder'
340+
341341const { detectMobile , iOSDevice } = require (' ../../utils/mobile-detection' )
342342const { isImageFile , isVideoFile } = require (' ../../utils/media-file' )
343343
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+
344356export default {
345357 name: ' Room' ,
346358 components: {
@@ -456,6 +468,9 @@ export default {
456468 },
457469
458470 watch: {
471+ message (val ) {
472+ this .$refs .roomTextarea .value = val
473+ },
459474 loadingMessages (val ) {
460475 if (val) {
461476 this .infiniteState = null
@@ -512,7 +527,7 @@ export default {
512527 this .newMessages = []
513528 const isMobile = detectMobile ()
514529
515- window . addEventListener (' keyup' , e => {
530+ this . $refs . roomTextarea . addEventListener (' keyup' , debounce (( e ) => {
516531 if (e .key === ' Enter' && ! e .shiftKey && ! this .fileDialog ) {
517532 if (isMobile) {
518533 this .message = this .message + ' \n '
@@ -524,10 +539,11 @@ export default {
524539
525540 this .updateFooterList (' @' )
526541 this .updateFooterList (' :' )
527- })
542+ }), 50 )
528543
529544 this .$refs [' roomTextarea' ].addEventListener (' click' , () => {
530545 if (isMobile) this .keepKeyboardOpen = true
546+
531547 this .updateFooterList (' @' )
532548 this .updateFooterList (' :' )
533549 })
@@ -898,11 +914,12 @@ export default {
898914 setTimeout (() => element .classList .remove (' vac-scroll-smooth' ))
899915 }, 50 )
900916 },
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 ),
906923 resizeTextarea () {
907924 const el = this .$refs [' roomTextarea' ]
908925
0 commit comments