@@ -315,9 +315,9 @@ export default {
315315 if (! message .timestamp ) return
316316
317317 let content = message .content
318- if (message .file ) {
319- content = ` ${ message .file . name } . ${ message . file . extension ||
320- message . file .type } `
318+ if (message .files ? . length ) {
319+ const file = message .files [ 0 ]
320+ content = ` ${ file . name } . ${ file . extension || file .type } `
321321 }
322322
323323 return {
@@ -458,25 +458,15 @@ export default {
458458 return formattedMessage
459459 },
460460
461- async sendMessage ({ content, roomId, file , replyMessage }) {
461+ async sendMessage ({ content, roomId, files , replyMessage }) {
462462 const message = {
463463 sender_id: this .currentUserId ,
464464 content,
465465 timestamp: new Date ()
466466 }
467467
468- if (file) {
469- message .file = {
470- name: file .name ,
471- size: file .size ,
472- type: file .type ,
473- extension: file .extension || file .type ,
474- url: file .localUrl
475- }
476- if (file .audio ) {
477- message .file .audio = true
478- message .file .duration = file .duration
479- }
468+ if (files) {
469+ message .files = this .formattedFiles (files)
480470 }
481471
482472 if (replyMessage) {
@@ -486,20 +476,118 @@ export default {
486476 sender_id: replyMessage .senderId
487477 }
488478
489- if (replyMessage .file ) {
490- message .replyMessage .file = replyMessage .file
479+ if (replyMessage .files ) {
480+ message .replyMessage .files = replyMessage .files
491481 }
492482 }
493483
494484 const { id } = await messagesRef (roomId).add (message)
495485
496- if (file) this .uploadFile ({ file, messageId: id, roomId })
486+ if (files) {
487+ files .forEach (file => {
488+ this .uploadFile ({ file, messageId: id, roomId })
489+ })
490+ }
497491
498492 roomsRef .doc (roomId).update ({ lastUpdated: new Date () })
499493 },
500494
501- openFile ({ message }) {
502- window .open (message .file .url , ' _blank' )
495+ async editMessage ({ messageId, newContent, roomId, files }) {
496+ const newMessage = { edited: new Date () }
497+ newMessage .content = newContent
498+
499+ if (files) {
500+ newMessage .files = this .formattedFiles (files)
501+ } else {
502+ newMessage .files = deleteDbField
503+ }
504+
505+ await messagesRef (roomId)
506+ .doc (messageId)
507+ .update (newMessage)
508+
509+ if (files) {
510+ files .forEach (file => {
511+ if (file? .blob ) this .uploadFile ({ file, messageId, roomId })
512+ })
513+ }
514+ },
515+
516+ async deleteMessage ({ message, roomId }) {
517+ await messagesRef (roomId)
518+ .doc (message ._id )
519+ .update ({ deleted: new Date () })
520+
521+ const { files } = message
522+
523+ if (files) {
524+ files .forEach (file => {
525+ const deleteFileRef = filesRef
526+ .child (this .currentUserId )
527+ .child (message ._id )
528+ .child (` ${ file .name } .${ file .extension || file .type } ` )
529+
530+ deleteFileRef .delete ()
531+ })
532+ }
533+ },
534+
535+ async uploadFile ({ file, messageId, roomId }) {
536+ let type = file .extension || file .type
537+ if (type === ' svg' || type === ' pdf' ) {
538+ type = file .type
539+ }
540+
541+ const uploadFileRef = filesRef
542+ .child (this .currentUserId )
543+ .child (messageId)
544+ .child (` ${ file .name } .${ type} ` )
545+
546+ await uploadFileRef .put (file .blob , { contentType: type })
547+ const url = await uploadFileRef .getDownloadURL ()
548+
549+ const messageDoc = await messagesRef (roomId)
550+ .doc (messageId)
551+ .get ()
552+
553+ const files = messageDoc .data ().files
554+
555+ files .forEach (f => {
556+ if (f .url === file .localUrl ) {
557+ f .url = url
558+ }
559+ })
560+
561+ await messagesRef (roomId)
562+ .doc (messageId)
563+ .update ({ files })
564+ },
565+
566+ formattedFiles (files ) {
567+ const formattedFiles = []
568+
569+ files .forEach (file => {
570+ const messageFile = {
571+ name: file .name ,
572+ size: file .size ,
573+ type: file .type ,
574+ extension: file .extension || file .type ,
575+ url: file .localUrl
576+ }
577+
578+ if (file .audio ) {
579+ messageFile .audio = true
580+ messageFile .duration = file .duration
581+ }
582+
583+ formattedFiles .push (messageFile)
584+ })
585+
586+ return formattedFiles
587+ },
588+
589+ openFile ({ file }) {
590+ window .open (file .file .url , ' _blank' )
503591 },
504592
505593 async openUserTag ({ user }) {
@@ -554,71 +642,6 @@ export default {
554642 })
555643 },
556644
557- async editMessage ({ messageId, newContent, roomId, file }) {
558- const newMessage = { edited: new Date () }
559- newMessage .content = newContent
560-
561- if (file) {
562- newMessage .file = {
563- name: file .name ,
564- size: file .size ,
565- type: file .type ,
566- extension: file .extension || file .type ,
567- url: file .url || file .localUrl
568- }
569- if (file .audio ) {
570- newMessage .file .audio = true
571- newMessage .file .duration = file .duration
572- }
573- } else {
574- newMessage .file = deleteDbField
575- }
576-
577- await messagesRef (roomId)
578- .doc (messageId)
579- .update (newMessage)
580-
581- if (file? .blob ) this .uploadFile ({ file, messageId, roomId })
582- },
583-
584- async deleteMessage ({ message, roomId }) {
585- await messagesRef (roomId)
586- .doc (message ._id )
587- .update ({ deleted: new Date () })
588-
589- const { file } = message
590-
591- if (file) {
592- const deleteFileRef = filesRef
593- .child (this .currentUserId )
594- .child (message ._id )
595- .child (` ${ file .name } .${ file .extension || file .type } ` )
596-
597- await deleteFileRef .delete ()
598- }
599- },
600-
601- async uploadFile ({ file, messageId, roomId }) {
602- let type = file .extension || file .type
603- if (type === ' svg' || type === ' pdf' ) {
604- type = file .type
605- }
606-
607- const uploadFileRef = filesRef
608- .child (this .currentUserId )
609- .child (messageId)
610- .child (` ${ file .name } .${ type} ` )
611-
612- await uploadFileRef .put (file .blob , { contentType: type })
613- const url = await uploadFileRef .getDownloadURL ()
614-
615- await messagesRef (roomId)
616- .doc (messageId)
617- .update ({
618- ' file.url' : url
619- })
620- },
621-
622645 menuActionHandler ({ action, roomId }) {
623646 switch (action .name ) {
624647 case ' inviteUser' :
0 commit comments