@ -1,36 +1,36 @@
/* globals, fileUpload, Livechat, Handlebars */
/* exported LivechatFileUpload */
/* globals fileUpload, Livechat, Handlebars, showError, sendFileUpload */
/* exported LivechatFileUpload, fileUpload, sendFileUpload */
import visitor from '../../imports/client/visitor' ;
import swal from 'sweetalert2' ;
const handleRequestError = response => {
const handleRequestError = ( response ) => {
if ( ! response . success ) {
let reason = t ( 'FileUpload_Error' ) ;
switch ( response . reason ) {
case 'error-type-not-allowed' :
reason = t ( 'FileUpload_MediaType_NotAccepted' ) ;
reason = t ( 'FileUpload_MediaType_NotAccepted' ) ;
break ;
case 'error-size-not-allowed' :
reason = t ( 'File_exceeds_allowed_size_of_bytes' , { size : response . sizeAllowed } ) ;
reason = t ( 'File_exceeds_allowed_size_of_bytes' , { size : response . sizeAllowed } ) ;
}
swal ( {
text : reason ,
type : 'error' ,
timer : 4000
timer : 4000 ,
} ) ;
}
}
} ;
function sendFileRequest ( file , roomId , token ) {
const url = ` ${ Meteor . absoluteUrl ( ) } api/v1/livechat/upload/ ${ roomId } ` ;
const form = new FormData ( ) ;
form . append ( 'file' , file )
form . append ( 'file' , file ) ;
const request = new XMLHttpRequest ( ) ;
request . open ( "POST" , url ) ;
request . open ( 'POST' , url ) ;
request . responseType = 'json' ;
request . setRequestHeader ( "X-Visitor-Token" , token ) ;
request . setRequestHeader ( 'X-Visitor-Token' , token ) ;
request . onload = ( ) => {
if ( request . status !== 200 ) {
@ -47,7 +47,7 @@ function sendFileRequest(file, roomId, token) {
function readAsDataURL ( file , callback ) {
const reader = new FileReader ( ) ;
reader . onload = ev => callback ( ev . target . result , file ) ;
reader . onload = ( ev ) => callback ( ev . target . result , file ) ;
return reader . readAsDataURL ( file ) ;
}
@ -60,7 +60,7 @@ function getUploadPreview(file, callback) {
callback ( file , null ) ;
} else if ( ( file . file . type . indexOf ( 'audio' ) > - 1 ) || ( file . file . type . indexOf ( 'video' ) > - 1 ) || ( file . file . type . indexOf ( 'image' ) > - 1 ) ) {
file . type = file . file . type . split ( '/' ) [ 0 ] ;
return readAsDataURL ( file . file , content => callback ( file , content ) ) ;
return readAsDataURL ( file . file , ( content ) => callback ( file , content ) ) ;
} else {
return callback ( file , null ) ;
}
@ -80,7 +80,7 @@ function formatBytes(bytes, decimals) {
'MB' ,
'GB' ,
'TB' ,
'PB'
'PB' ,
] ;
const i = Math . floor ( Math . log ( bytes ) / Math . log ( k ) ) ;
@ -106,67 +106,64 @@ function sendFileMessage(file, roomId) {
} ) ;
}
sendFileUpload = file => {
return getUploadPreview ( file , function ( file , preview ) {
let html = '' ;
if ( file . type === 'audio' ) {
html = ` <div class='upload-preview'><audio style="width: 100%;" controls="controls"><source src=" ${ preview } " type="audio/wav">Your browser does not support the audio element.</audio></div> ` ;
} else if ( file . type === 'video' ) {
html = ` <div class='upload-preview'><video style="width: 100%;" controls="controls"><source src=" ${ preview } " type="video/webm">Your browser does not support the video element.</video></div> ` ;
} else if ( file . type === 'image' ) {
html = ` <div class='upload-preview'><div class='upload-preview-file' style='background-image: url( ${ preview } )'></div></div> ` ;
} else {
const fileSize = formatBytes ( file . file . size ) ;
html = ` <div class='upload-preview'><div> ${ Handlebars . _escape ( file . name ) } - ${ fileSize } </div></div> ` ;
sendFileUpload = ( file ) => getUploadPreview ( file , function ( file , preview ) {
let html = '' ;
if ( file . type === 'audio' ) {
html = ` <div class='upload-preview'><audio style="width: 100%;" controls="controls"><source src=" ${ preview } " type="audio/wav">Your browser does not support the audio element.</audio></div> ` ;
} else if ( file . type === 'video' ) {
html = ` <div class='upload-preview'><video style="width: 100%;" controls="controls"><source src=" ${ preview } " type="video/webm">Your browser does not support the video element.</video></div> ` ;
} else if ( file . type === 'image' ) {
html = ` <div class='upload-preview'><div class='upload-preview-file' style='background-image: url( ${ preview } )'></div></div> ` ;
} else {
const fileSize = formatBytes ( file . file . size ) ;
html = ` <div class='upload-preview'><div> ${ Handlebars . _escape ( file . name ) } - ${ fileSize } </div></div> ` ;
}
swal ( {
title : t ( 'Upload_file_question' ) ,
html ,
showCancelButton : true ,
cancelButtonText : t ( 'No' ) ,
confirmButtonText : t ( 'Yes' ) ,
} ) . then ( ( result ) => {
if ( ! result . value ) {
return ;
}
swal ( {
title : t ( 'Upload_file_question' ) ,
html ,
showCancelButton : true ,
cancelButtonText : t ( 'No' ) ,
confirmButtonText : t ( 'Yes' )
} ) . then ( ( result ) => {
if ( ! result . value ) {
return ;
}
const roomId = visitor . getRoom ( true ) ;
const roomId = visitor . getRoom ( true ) ;
if ( visitor . getId ( ) ) {
return sendFileMessage ( file . file , roomId ) ;
}
if ( visitor . getId ( ) ) {
return sendFileMessage ( file . file , roomId ) ;
}
const guest = {
token : visitor . getToken ( ) ,
} ;
const guest = {
token : visitor . getToken ( )
} ;
if ( Livechat . department ) {
guest . department = Livechat . department ;
}
if ( Livechat . department ) {
guest . department = Livechat . department ;
Meteor . call ( 'livechat:registerGuest' , guest , ( error , result ) => {
if ( error ) {
return showError ( error . reason ) ;
}
Meteor . call ( 'livechat:registerGuest' , guest , ( error , result ) => {
if ( error ) {
return showError ( error . reason ) ;
}
visitor . setId ( result . userId ) ;
sendFileMessage ( file . file , roomId ) ;
} ) ;
visitor . setId ( result . userId ) ;
sendFileMessage ( file . file , roomId ) ;
} ) ;
} ) ;
}
} ) ;
fileUpload = file => {
fileUpload = ( file ) => {
if ( file . size === 0 ) {
swal ( {
title : t ( 'FileUpload_File_Empty' ) ,
text : reason ,
text : '' ,
type : 'error' ,
timer : 1000 ,
showConfirmButton : false
showConfirmButton : false ,
} ) ;
return ;