���ѧۧݧ�ӧ�� �ާ֧ߧ֧էا֧� - ���֧էѧܧ�ڧ��ӧѧ�� - /home/alphpwcp/public_html/us/alphachat/design/defaulttheme/js/admin/dist/499.9065302c98ba2caa9fd2.js.map
���ѧ٧ѧ�
{"version":3,"file":"499.9065302c98ba2caa9fd2.js","mappings":"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","sources":["webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatQuote.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatAttachement.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailReplyRecipient.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailSendStatus.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatReply.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatImage.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatAttachment.js","webpack://LHCReactAPPAdmin/./src/components/parts_mail/MailChatMessage.js","webpack://LHCReactAPPAdmin/./src/components/MailChat.js"],"sourcesContent":["import React, { useState} from \"react\";\n\nconst MailChatQuote = ({children}) => {\n\n const [expandBody, setExpandBody] = useState(false);\n\n return <React.Fragment>\n <div className=\"pb-2\"><button onClick={() => setExpandBody(!expandBody)} className=\"btn btn-sm btn-outline-secondary\">...</button></div>\n {expandBody && children}\n </React.Fragment>\n\n}\n\nexport default React.memo(MailChatQuote);","import React, { PureComponent } from 'react';\nimport { withTranslation } from 'react-i18next';\n\n/**\n * https://github.com/LukasMarx/react-file-upload\n * */\nclass MailChatAttatchement extends PureComponent {\n\n state = {\n hightlight: false,\n files: [],\n uploading: false,\n uploadProgress: {},\n successfullUploaded: false,\n progress: ''\n };\n\n constructor(props) {\n super(props);\n\n this.fileInputRef = React.createRef();\n this.dropAreaRef = React.createRef();\n\n // UI Actions\n this.openFileDialog = this.openFileDialog.bind(this);\n this.onFilesAddedUI = this.onFilesAddedUI.bind(this);\n this.onDragOver = this.onDragOver.bind(this);\n this.onDragLeave = this.onDragLeave.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onPaste = this.onPaste.bind(this);\n\n // Backend actions\n this.onFilesAdded = this.onFilesAdded.bind(this);\n this.uploadFiles = this.uploadFiles.bind(this);\n this.sendRequest = this.sendRequest.bind(this);\n this.chooseFromUploaded = this.chooseFromUploaded.bind(this);\n this.fileUploaded = this.fileUploaded.bind(this);\n }\n\n onFilesAdded(files) {\n const { t } = this.props;\n\n const ruleTest = new RegExp(\"(\\.|\\/)(\" + this.props.moptions['fop_op'] + \")$\",\"i\");\n\n let uploadErrors = [];\n files.forEach(file => {\n\n if (!(ruleTest.test(file.type) || ruleTest.test(file.name))) {\n uploadErrors.push(file.name + ': ' + t('file.incorrect_type'));\n }\n\n if (file.size > this.props.moptions['fop_size']) {\n uploadErrors.push(file.name + ': '+ t('file.to_big_file'));\n }\n });\n\n if (uploadErrors.length > 0) {\n alert(uploadErrors.join(\"\\n\"));\n } else {\n this.setState({\n 'files': files\n })\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n if (this.state.files.length > 0 && this.state.uploading == false) {\n this.uploadFiles();\n }\n }\n\n async uploadFiles() {\n this.setState({ uploadProgress: {}, uploading: true });\n const promises = [];\n this.state.files.forEach(file => {\n promises.push(this.sendRequest(file));\n });\n try {\n await Promise.all(promises);\n this.setState({ successfullUploaded: true, uploading: false, files : []});\n } catch (e) {\n // Not Production ready! Do some error handling here instead...\n this.setState({ successfullUploaded: true, uploading: false, files : [] });\n }\n }\n\n fileUploaded(file) {\n this.props.fileAttached(file);\n }\n\n sendRequest(file) {\n const { t } = this.props;\n\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest();\n\n req.upload.addEventListener(\"progress\", event => {\n if (event.lengthComputable) {\n const copy = { ...this.state.uploadProgress };\n copy[file.name] = {\n state: \"pending\",\n percentage: (event.loaded / event.total) * 100\n };\n this.setState({ progress: t('file.uploading') + ' ' + Math.round((event.loaded / event.total) * 100) + '%' });\n }\n });\n\n req.upload.addEventListener(\"load\", event => {\n const copy = { ...this.state.uploadProgress };\n copy[file.name] = { state: \"done\", percentage: 100 };\n this.setState({ progress: '' });\n resolve(req.response);\n });\n\n var _inst = this;\n\n req.onreadystatechange = function() {\n if (req.readyState === 4) {\n _inst.fileUploaded(JSON.parse(req.response));\n }\n }\n\n req.upload.addEventListener(\"error\", event => {\n const copy = { ...this.state.uploadProgress };\n copy[file.name] = { state: \"error\", percentage: 0 };\n this.setState({ progress: copy });\n reject(req.response);\n });\n\n const formData = new FormData();\n formData.append(\"files\", file, file.name);\n\n req.open(\"POST\", WWW_DIR_JAVASCRIPT + 'mailconv/uploadfile/(csrf)/' + confLH.csrf_token);\n req.send(formData);\n });\n }\n\n openFileDialog() {\n if (this.state.uploading) return;\n this.fileInputRef.current.click();\n }\n\n onFilesAddedUI(evt) {\n const files = evt.target.files;\n const array = this.fileListToArray(files);\n this.onFilesAdded(array);\n }\n\n onDragOver(event) {\n event.preventDefault();\n if (this.state.uploading) return;\n this.setState({hightlight: true})\n }\n\n componentDidMount() {\n if (this.dropAreaRef.current) {\n this.dropAreaRef.current.ondragover = this.onDragOver;\n this.dropAreaRef.current.ondragleave = this.onDragLeave;\n this.dropAreaRef.current.ondrop = this.onDrop;\n }\n }\n\n componentWillUnmount() {\n if (this.dropAreaRef.current) {\n this.dropAreaRef.current.ondragover = null;\n this.dropAreaRef.current.ondragleave = null;\n this.dropAreaRef.current.ondrop = null;\n }\n\n window.attatchReplyCurrent = null;\n }\n\n onPaste(e) {\n var items = e && e.clipboardData &&\n e.clipboardData.items,\n data = {files: []};\n\n if (items && items.length) {\n const array = [];\n for (var i = 0; i < items.length; i++) {\n var file = items[i].getAsFile && items[i].getAsFile();\n if (file){\n array.push(file);\n }\n }\n\n if (array.length > 0) {\n this.onFilesAdded(array);\n }\n }\n }\n\n onDragLeave(event) {\n this.setState({hightlight: false})\n }\n\n onDrop(event) {\n event.preventDefault();\n if (this.state.uploading) return;\n const files = event.dataTransfer.files;\n const array = this.fileListToArray(files);\n this.onFilesAdded(array);\n this.setState({hightlight: false})\n }\n\n fileListToArray(list) {\n const array = [];\n for (var i = 0; i < list.length; i++) {\n array.push(list.item(i));\n }\n return array;\n }\n\n chooseFromUploaded() {\n\n const { t } = this.props;\n \n lhc.revealModal({\n 'title' : t('file.choose_uploaded'),\n 'iframe':true,\n 'height':500,\n 'url':WWW_DIR_JAVASCRIPT +'mailconv/attatchfile/(attachment)/1'\n });\n\n var _inst = this;\n\n window.attatchReplyCurrent = function(file) {\n _inst.props.fileAttached(file);\n }\n }\n\n render() {\n\n const { t } = this.props;\n\n return (\n <React.Fragment>\n <button className=\"btn btn-sm btn-outline-secondary\" onClick={this.chooseFromUploaded} ><i className=\"material-icons\">list</i> {t('file.choose_uploaded')}</button>\n <button ref={this.dropAreaRef} onClick={this.openFileDialog} className={\"btn btn-sm \" + (this.state.hightlight == true ? 'btn-outline-primary' : 'btn-outline-secondary')}><i className=\"material-icons\">attach_file</i> {this.state.progress || t('file.drop_here')}</button>\n <input onChange={this.onFilesAddedUI} ref={this.fileInputRef} id=\"fileupload\" type=\"file\" name=\"files[]\" multiple className=\"d-none\" />\n </React.Fragment>\n );\n }\n}\n\nexport default withTranslation('mail_chat')(MailChatAttatchement);","import React, { useEffect, useState, useReducer } from \"react\";\n\nimport {useTranslation} from 'react-i18next';\n\nconst MailReplyRecipient = props => {\n\n const [recipients, dispatch] = useReducer((recipients, { type, value }) => {\n switch (type) {\n case \"add\":\n return [...recipients, value];\n\n case \"add_recipient\":\n recipients = { ... recipients};\n recipients[value].push({\"name\" : \"\", \"email\" : \"\"});\n return recipients;\n\n case \"remove_recipient\":\n recipients = { ... recipients};\n recipients[value.recipient] = recipients[value.recipient].filter((_, index) => index !== value.index);\n return recipients;\n\n case \"set\":\n return value;\n\n case 'set_attribute':\n recipients = { ... recipients};\n recipients[value.value.type][value.value.index][value.value.field] = value.value.value;\n return recipients;\n break;\n\n case \"cleanup\":\n return [];\n case \"remove\":\n return recipients.filter((_, index) => index !== value);\n default:\n return recipients;\n }\n }, []);\n\n const setReciepints = (type, value) => {\n dispatch({'type' : type, \"value\" : value});\n props.setRecipients(recipients);\n }\n\n useEffect(() => {\n dispatch({\"type\" : \"set\", \"value\" : props.recipients});\n props.setRecipients(props.recipients);\n },[props.recipients]);\n\n const { t, i18n } = useTranslation('mail_chat');\n \n return <div className=\"row\">\n\n {!props.readOnly && <div className=\"col-12 text-secondary fw-bold fs13 pb-1\">{t('r.recipients')} <i className=\"material-icons settings text-muted\" onClick={(e) => setReciepints(\"add_recipient\",\"reply\")} style={{fontSize: \"20px\"}}>add</i> Cc <i className=\"material-icons settings text-muted\" onClick={(e) => setReciepints(\"add_recipient\",\"cc\")} style={{fontSize: \"20px\"}}>add</i> Bcc <i onClick={(e) => setReciepints(\"add_recipient\",\"bcc\")} className=\"material-icons settings text-muted\" style={{fontSize: \"20px\"}}>add</i></div>}\n\n <div className=\"col-6\">\n {recipients.reply && recipients.reply.map((mail, index) => (\n <div className=\"row pb-1\">\n <div className=\"col-1 text-secondary fs13 pt-1\">{t('r.to')}:</div>\n <div className=\"col-5\">\n <div className=\"input-group input-group-sm\">\n <span className=\"input-group-text\" ><i className=\"material-icons me-0\">mail_outline</i></span>\n <input disabled={props.readOnly} type=\"text\" className=\"form-control form-control-sm\" placeholder=\"E-mail\" onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"reply\", index: index, \"field\" : \"email\"}})} value={mail.email} placeholder={t('r.email')} aria-describedby=\"validationTooltipUsernamePrepend\" />\n </div>\n </div>\n <div className=\"col-5\"><input type=\"text\" disabled={props.readOnly} placeholder={t('r.name')} onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"reply\", index: index, \"field\" : \"name\"}})} value={mail.name} className=\"form-control form-control-sm\" /></div>\n {!props.readOnly && index > 0 && <div className=\"col-1\"><i className=\"material-icons settings text-muted\" onClick={(e) => setReciepints(\"remove_recipient\",{\"recipient\":\"reply\", \"index\" : index})}>remove</i></div>}\n </div>\n ))}\n </div>\n\n <div className=\"col-6\">\n {recipients.cc && recipients.cc.map((mail, index) => (\n <div className=\"row pb-1\">\n <div className=\"col-1 text-secondary fs13 pt-1\">Cc:</div>\n <div className=\"col-5\">\n <div className=\"input-group input-group-sm\">\n <span className=\"input-group-text\" ><i className=\"material-icons me-0\">mail_outline</i></span>\n <input type=\"text\" disabled={props.readOnly} className=\"form-control form-control-sm\" placeholder=\"E-mail\" onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"cc\", index: index, \"field\" : \"email\"}})} value={mail.email} placeholder={t('r.email')} aria-describedby=\"validationTooltipUsernamePrepend\" />\n </div>\n </div>\n <div className=\"col-5\"><input disabled={props.readOnly} type=\"text\" placeholder={t('r.name')} onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"cc\", index: index, \"field\" : \"name\"}})} value={mail.name} className=\"form-control form-control-sm\" /></div>\n {!props.readOnly && <div className=\"col-1\"><i className=\"material-icons settings text-muted\" onClick={(e) => setReciepints(\"remove_recipient\",{\"recipient\":\"cc\", \"index\" : index})}>remove</i></div>}\n </div>\n ))}\n </div>\n\n <div className=\"col-6\">\n {recipients.bcc && recipients.bcc.map((mail, index) => (\n <div className=\"row pb-1\">\n <div className=\"col-1 text-secondary fs13 pt-1\">Bcc:</div>\n <div className=\"col-5\">\n <div className=\"input-group input-group-sm\">\n <span className=\"input-group-text\" ><i className=\"material-icons me-0\">mail_outline</i></span>\n <input type=\"text\" disabled={props.readOnly} className=\"form-control form-control-sm\" placeholder=\"E-mail\" onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"bcc\", index: index, \"field\" : \"email\"}})} value={mail.email} placeholder={t('r.email')} aria-describedby=\"validationTooltipUsernamePrepend\" />\n </div>\n </div>\n <div className=\"col-5\"><input type=\"text\" disabled={props.readOnly} placeholder={t('r.name')} onChange={(e) => setReciepints(\"set_attribute\",{value : {value: e.target.value, type: \"bcc\", index: index, \"field\" : \"name\"}})} value={mail.name} className=\"form-control form-control-sm\" /></div>\n {!props.readOnly && <div className=\"col-1\"><i className=\"material-icons settings text-muted\" onClick={(e) => setReciepints(\"remove_recipient\",{\"recipient\":\"bcc\", \"index\" : index})}>remove</i></div>}\n </div>\n ))}\n </div>\n\n\n </div>\n}\n\nexport default React.memo(MailReplyRecipient);","import React, { useEffect, useState, useReducer, useRef } from \"react\";\n\nconst MailSendStatus = props => {\n\n const [expandBody, setExpandBody] = useState(false);\n\n return <React.Fragment>\n {props.status.send && <div className=\"alert alert-success p-1 ps-2\" role=\"alert\">Success!</div>}\n {!props.status.send && <div className=\"alert alert-danger p-1 ps-2\" role=\"alert\">\n <ul className=\"mb-0\">\n {props.status.errors.general && <li>{props.status.errors.general}</li>}\n {props.status.errors.reply && <li>{props.status.errors.reply}</li>}\n {props.status.errors.content && <li>{props.status.errors.content}</li>}\n </ul>\n {props.status.errors.raw_error &&\n <div>\n <h5>An unknown error happened while sending an email. Please reload a window!</h5>\n <div><button onClick={() => {document.location.reload()}} className=\"btn btn-danger btn-sm\">Reload this window</button></div>\n <p>Please copy error text and send to your manager!</p>\n <textarea className=\"form-control form-control-sm\" rows=\"5\">{props.status.errors.raw_error}</textarea>\n </div>\n }\n </div>}\n \n </React.Fragment>\n\n}\n\nexport default React.memo(MailSendStatus);","import React, { useEffect, useState, useReducer, useRef } from \"react\";\nimport { Editor } from '@tinymce/tinymce-react';\nimport axios from \"axios\";\nimport MailChatAttachement from \"./MailChatAttachement\";\nimport MailReplyRecipient from \"./MailReplyRecipient\";\nimport MailSendStatus from \"./MailSendStatus\";\nimport {useTranslation} from 'react-i18next';\n\nconst MailChatReply = props => {\n\n const [replyMode, setReplyMode] = useState(false);\n const [forwardMode, setForwardMode] = useState(false);\n const [replyContent, setReplyContent] = useState(null);\n const [replyIntro, setReplyIntro] = useState(null);\n const [replySignature, setReplySignature] = useState(null);\n const [loadedReplyData, setLoadedReplyData] = useState(false);\n const [recipients, setRecipients] = useState([]);\n const [recipientsModified, setModifiedRecipients] = useState([]);\n const [replySendStatus, setReplySendStatus] = useState([]);\n const [sendInProgress, setSendInProgress] = useState(false);\n const [underReplySignature, setUnderReplySignature] = useState(false);\n const [isOwner, setIsOwner] = useState(true);\n const [isSelfReply, setIsSelfReply] = useState(true);\n\n const [attachedFiles, dispatch] = useReducer((attachedFiles, { type, value }) => {\n switch (type) {\n case \"add\":\n return [...attachedFiles, value];\n case \"cleanup\":\n return [];\n case \"remove\":\n return attachedFiles.filter((_, index) => index !== value);\n default:\n return attachedFiles;\n }\n }, []);\n\n const currentAttatchedFiles = useRef();\n currentAttatchedFiles.current = attachedFiles;\n\n let replyContentDirect = null;\n\n const handleEditorChange = (content, editor) => {\n replyContentDirect = content;\n }\n\n const sendReply = (status) => {\n let replyPayload = {\n 'recipients' : recipientsModified,\n 'content' : tinyMCE.get(\"reply-to-mce-\"+props.message.id).getContent(),\n 'attatchements' : attachedFiles,\n 'status': status,\n 'mode' : (replyMode == true ? 'reply' : 'forward')\n };\n\n setSendInProgress(true);\n\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apisendreply/\" + props.message.id, replyPayload).then(result => {\n\n // We always expect an object\n if (typeof result.data !== 'object') {\n setSendInProgress(false);\n setReplySendStatus({\n 'send' : false,\n 'send_tried': true,\n 'errors': {\n 'raw_error': result.data\n }\n });\n return;\n }\n\n setReplySendStatus(result.data);\n setSendInProgress(false);\n\n if (result.data.send == true) {\n props.fetchMessages();\n props.setConversationStatus(result.data.conv_status);\n }\n\n }).catch(error => {\n setSendInProgress(false);\n // Error 😨\n if (error.response) {\n /*\n * The request was made and the server responded with a\n * status code that falls out of the range of 2xx\n */\n if (error.response.status === 400) {\n setReplySendStatus(error.response.data);\n } else {\n setReplySendStatus({\n 'send' : false,\n 'send_tried': true,\n 'errors': {\n 'raw_error': error.response.data\n }\n });\n }\n\n } else if (error.request) {\n /*\n * The request was made but no response was received, `error.request`\n * is an instance of XMLHttpRequest in the browser and an instance\n * of http.ClientRequest in Node.js\n */\n console.log(error.request);\n } else {\n // Something happened in setting up the request and triggered an Error\n console.log('Error', error.message);\n }\n\n console.log(error.config);\n\n });\n }\n\n const removeAttatchedFile = (file, index) => {\n dispatch({ type: \"remove\", value: index });\n if (file.new === true) {\n axios.get(WWW_DIR_JAVASCRIPT + \"file/delete/\" + file.id + '/(csfr)/' + confLH.csrf_token + '?react=1');\n }\n }\n\n useEffect(() => {\n return () => {\n currentAttatchedFiles.current.map((file, index) => {\n if (file.new === true) {\n axios.get(WWW_DIR_JAVASCRIPT + \"file/delete/\" + file.id + '/(csfr)/' + confLH.csrf_token + '?react=1');\n }\n })\n }\n },[]);\n\n useEffect(() => {\n if ((replyMode == true || forwardMode == true) && loadedReplyData == false) {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/getreplydata/\" + props.message.id + '/' + (replyMode == true ? 'reply' : 'forward')).then(result => {\n setLoadedReplyData(true);\n setReplyIntro(result.data.intro);\n setReplySignature(result.data.signature);\n setRecipients(result.data.recipients);\n setUnderReplySignature(result.data.signature_under);\n setIsSelfReply(result.data.is_self_reply);\n\n if (result.data.user_id > 0) {\n props.verifyOwner(result.data.user_id);\n setIsOwner(result.data.is_owner);\n }\n });\n } else if (replyMode == false && forwardMode == false && loadedReplyData == true) {\n setLoadedReplyData(false);\n if (currentAttatchedFiles.current.length > 0) {\n currentAttatchedFiles.current.map((file, index) => {\n if (file.new === true) {\n axios.get(WWW_DIR_JAVASCRIPT + \"file/delete/\" + file.id + '/(csfr)/' + confLH.csrf_token + '?react=1');\n }\n });\n dispatch({ type: \"cleanup\"})\n }\n }\n },[replyMode,forwardMode]);\n\n if (props.replyMode == true && replyMode == false) {\n if (forwardMode == true) {\n setLoadedReplyData(false);\n setForwardMode(false);\n }\n setReplyMode(true);\n }\n\n if (props.forwardMode == true && forwardMode == false) {\n if (replyMode == true) {\n setLoadedReplyData(false);\n setReplyMode(false);\n }\n setForwardMode(true);\n }\n\n const { t, i18n } = useTranslation('mail_chat');\n\n return <React.Fragment>\n <div className=\"col-12 mt-2 pt-3 pb-2\">\n\n {!isOwner && <div className=\"alert alert-warning\" role=\"alert\"><span className=\"material-icons\">warning</span>\n {t('msg.not_an_owner')}\n </div>}\n\n {replyMode && isSelfReply && <div className=\"alert alert-warning\" role=\"alert\"><span className=\"material-icons\">warning</span>\n {t('msg.self_reply')}\n </div>}\n\n {!replyMode && !forwardMode && !props.fetchingMessages && <div className=\"btn-group\" role=\"group\" aria-label=\"Mail actions\">\n <button type=\"button\" className=\"btn btn-sm btn-outline-secondary\" onClick={() => {setForwardMode(false);setReplyMode(true);}}><i className=\"material-icons\">reply</i>{t('msg.reply')}</button>\n <button disabled={props.message.response_type == 1} type=\"button\" className=\"btn btn-sm btn-outline-secondary\" onClick={() => props.noReplyRequired()}><i className=\"material-icons\">done</i>{t('msg.nrr')}</button>\n {!props.moptions.hide_recipients && <button type=\"button\" className=\"btn btn-sm btn-outline-secondary\" onClick={() => {setReplyMode(false);setForwardMode(true)}}><i className=\"material-icons\">forward</i>{t('msg.forward')}</button>}\n </div>}\n\n {!props.fetchingMessages && (replyMode || forwardMode) && loadedReplyData && <div className=\"shadow p-2\">\n\n {replySendStatus.send_tried && <MailSendStatus status={replySendStatus} />}\n\n <MailReplyRecipient readOnly={props.moptions.hide_recipients} setRecipients={(recipients) => setModifiedRecipients(recipients)} mode={replyMode == true ? 'reply' : 'forward'} message={props.message} recipients={recipients} />\n\n <Editor\n tinymceScriptSrc={props.moptions.tiny_mce_path}\n initialValue={\"<p></p>\" + replyIntro + (props.message.body_front ? (\"<blockquote>\" + (props.moptions.skip_images == true ? props.message.body_front.replace(/\\<img([^>]*)\\ssrc=('|\")([^>]*)\\2\\s([^>]*)\\/\\>/gi, props.moptions.image_skipped_text ) : props.message.body_front) + \"</blockquote>\") : \"\") + (underReplySignature == false ? replySignature : \"\")}\n onInit={() => {\n tinyMCE.get(\"reply-to-mce-\"+props.message.id).focus();\n }}\n id={\"reply-to-mce-\"+props.message.id}\n init={{\n cache_suffix: \"?v=\"+props.moptions.cache_version_plugin,\n height: 320,\n automatic_uploads: props.moptions.files_enabled,\n file_picker_types: 'image',\n images_upload_url: WWW_DIR_JAVASCRIPT + 'mailconv/uploadimage/(csrf)/' + confLH.csrf_token,\n templates: WWW_DIR_JAVASCRIPT + 'mailconv/apiresponsetemplates/'+props.message.id,\n paste_data_images: props.moptions.files_enabled,\n relative_urls : false,\n browser_spellcheck: true,\n paste_as_text: true,\n contextmenu: false,\n menubar: false,\n plugins: props.moptions.mce_plugins,\n toolbar_mode: 'wrap',\n toolbar: props.moptions.mce_toolbar\n }}\n />\n\n {replyMode && <div className=\"float-end\">\n <a className=\"action-image\" onClick={() => {setReplyMode(false); props.cancelReply()}}><i className=\"material-icons\">delete</i></a>\n </div>}\n\n {forwardMode && <div className=\"float-end\">\n <a className=\"action-image\" onClick={() => {setForwardMode(false); props.cancelForward()}}><i className=\"material-icons\">delete</i></a>\n </div>}\n\n <div className=\"btn-group mt-2\" role=\"group\" aria-label=\"Mail actions\">\n <button type=\"button\" disabled={sendInProgress} className=\"btn btn-sm btn-primary\" onClick={() => sendReply(2)}><i className=\"material-icons\">send</i>{sendInProgress == true ? t('msg.sending') : t('msg.send_and_close')}</button>\n {props.moptions.send_as_new && <button type=\"button\" disabled={sendInProgress} className=\"btn btn-sm btn-outline-secondary\" onClick={() => sendReply(0)}><i className=\"material-icons text-warning\">send</i>{sendInProgress == true ? t('msg.sending') : t('msg.send_as_pending')}</button>}\n <button type=\"button\" disabled={sendInProgress} className=\"btn btn-sm btn-outline-secondary\" onClick={() => sendReply(1)}><i className=\"material-icons text-success\">send</i>{sendInProgress == true ? t('msg.sending') : t('msg.send_as_active')}</button>\n </div>\n\n {props.moptions.files_enabled && <div className=\"btn-group d-block mt-2\" role=\"group\" aria-label=\"Mail actions\">\n <MailChatAttachement moptions={props.moptions} fileAttached={(file) => dispatch({ type: \"add\", value: file})} message={props.message}></MailChatAttachement>\n </div>}\n\n {attachedFiles && attachedFiles.length > 0 &&\n <div className=\"pt-2\">{attachedFiles.map((file, index) => (\n <button title={t('msg.click_to_remove')} onClick={() => removeAttatchedFile(file, index)} className=\"btn btn-sm btn-outline-info me-1 mb-1\" title={file.id}>{file.name}</button>\n ))}</div>}\n\n </div>}\n\n </div>\n </React.Fragment>\n\n}\n\nexport default React.memo(MailChatReply);","import React, { useState, useEffect, useRef } from 'react';\r\nimport {useTranslation} from 'react-i18next';\r\n\r\nconst MailChatImage = ({ \r\n src, \r\n alt, \r\n title, \r\n className, \r\n style, \r\n download_policy = 0,\r\n width,\r\n height,\r\n ...props \r\n}) => {\r\n const [imageError, setImageError] = useState(false);\r\n const [imageLoading, setImageLoading] = useState(true);\r\n const [canShowImage, setCanShowImage] = useState(false);\r\n const [imageSrc, setImageSrc] = useState('');\r\n const [verificationMessage, setVerificationMessage] = useState('');\r\n const [verificationAttempts, setVerificationAttempts] = useState(0);\r\n const [countdownSeconds, setCountdownSeconds] = useState(0);\r\n const [protectionType, setProtectionType] = useState('');\r\n const [protectionHtml, setProtectionHtml] = useState('');\r\n const [isProtected, setIsProtected] = useState(false);\r\n const [imageRevealed, setImageRevealed] = useState(false);\r\n const [imageTitle, setImageTitle] = useState('');\r\n const [buttonTitle, setButtonTitle] = useState('');\r\n const [extractedFileId, setExtractedFileId] = useState(null);\r\n const [extractedConvId, setExtractedConvId] = useState(null);\r\n\r\n const { t, i18n } = useTranslation('mail_chat');\r\n\r\n const countdownInterval = useRef(null);\r\n const maxVerificationAttempts = 4;\r\n\r\n // Extract file_id and conversation_id from URL structure like mailconv/inlinedownload/<file_id>/<conversation_id>\r\n const extractIdsFromUrl = (url) => {\r\n if (!url) return { fileId: null, convId: null };\r\n \r\n // Match pattern: any_domain/any_path/mailconv/inlinedownload/file_id/conversation_id\r\n const match = url.match(/\\/mailconv\\/inlinedownload\\/(\\d+)\\/(\\d+)/);\r\n if (match) {\r\n return {\r\n fileId: parseInt(match[1], 10),\r\n convId: parseInt(match[2], 10)\r\n };\r\n }\r\n \r\n return { fileId: null, convId: null };\r\n };\r\n\r\n useEffect(() => {\r\n if (src) {\r\n // Extract file_id and conversation_id from src URL\r\n const { fileId, convId } = extractIdsFromUrl(src);\r\n\r\n if (fileId && convId) {\r\n setExtractedFileId(fileId);\r\n setExtractedConvId(convId);\r\n setImageTitle(title || '');\r\n\r\n // Check download policy (convert to number for comparison)\r\n const policyValue = parseInt(download_policy, 10);\r\n if (policyValue === 0) {\r\n // No verification needed - show image immediately\r\n setCanShowImage(true);\r\n setImageSrc(window.WWW_DIR_JAVASCRIPT + 'mailconv/inlinedownload/' + fileId + '/' + convId);\r\n } else if (policyValue === 1) {\r\n // Image needs verification - start verification process\r\n setCanShowImage(false);\r\n startVerificationProcess(fileId, convId);\r\n } else if (policyValue === 2) {\r\n // No permission to view - check if image is sensitive first\r\n setCanShowImage(false);\r\n checkImageSensitivity(fileId, convId);\r\n }\r\n } else {\r\n // Fallback to regular src if no pattern match\r\n setCanShowImage(true);\r\n setImageSrc(src);\r\n }\r\n }\r\n\r\n return () => {\r\n clearCountdown();\r\n };\r\n }, [download_policy, src, title]);\r\n\r\n const clearCountdown = () => {\r\n if (countdownInterval.current) {\r\n clearInterval(countdownInterval.current);\r\n countdownInterval.current = null;\r\n }\r\n setCountdownSeconds(0);\r\n };\r\n\r\n const revealImage = () => {\r\n if (isProtected && !imageRevealed) {\r\n setImageRevealed(true);\r\n setImageSrc(window.WWW_DIR_JAVASCRIPT + 'mailconv/inlinedownload/' + extractedFileId + '/' + extractedConvId);\r\n }\r\n };\r\n\r\n const handleImageClick = () => {\r\n if (isProtected && !imageRevealed) {\r\n revealImage();\r\n }\r\n };\r\n\r\n const startVerificationProcess = (fileId, convId) => {\r\n setVerificationAttempts(0);\r\n setVerificationMessage(t('image.verifying_access'));\r\n\r\n requestVerification(fileId, convId);\r\n };\r\n\r\n const requestVerification = (fileId, convId, currentAttempts = null) => {\r\n const attempts = currentAttempts !== null ? currentAttempts : verificationAttempts;\r\n \r\n if (attempts >= maxVerificationAttempts) {\r\n setVerificationMessage(t('image.verification_failed'));\r\n return;\r\n }\r\n\r\n const newAttempts = attempts + 1;\r\n setVerificationAttempts(newAttempts);\r\n \r\n // Build verification URL using conversation ID\r\n const verifyUrl = window.WWW_DIR_JAVASCRIPT + 'mailconv/verifyaccess/' + fileId + '/' + convId;\r\n \r\n // Make verification request\r\n fetch(verifyUrl, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n const policyValue = parseInt(download_policy, 10);\r\n \r\n if (data.verified === true) {\r\n // Check if file has error message\r\n if (data.error_msg) {\r\n setVerificationMessage(data.error_msg);\r\n clearCountdown();\r\n } else {\r\n if (policyValue === 2 && (data.protection_image || data.protection_html)) {\r\n // Policy 2 with sensitive image - show access denied\r\n setVerificationMessage(t('image.access_denied'));\r\n clearCountdown();\r\n } else {\r\n // Verification successful - check protection status\r\n setCanShowImage(true);\r\n setVerificationMessage('');\r\n clearCountdown();\r\n \r\n if (data.protection_image) {\r\n setProtectionType(data.protection_image);\r\n setIsProtected(true);\r\n setImageRevealed(false);\r\n setImageSrc(data.protection_image);\r\n setButtonTitle(data.btn_title);\r\n } else if (data.protection_html) {\r\n setProtectionHtml(data.protection_html);\r\n setIsProtected(true);\r\n setImageRevealed(false);\r\n setImageSrc(''); // No image source for HTML protection\r\n } else {\r\n setImageSrc(window.WWW_DIR_JAVASCRIPT + 'mailconv/inlinedownload/' + fileId + '/' + convId);\r\n }\r\n }\r\n }\r\n } else {\r\n // Verification not ready yet - schedule next attempt\r\n if (newAttempts < maxVerificationAttempts) {\r\n scheduleNextVerification(newAttempts, fileId, convId);\r\n } else {\r\n setVerificationMessage(t('image.verification_failed'));\r\n }\r\n }\r\n })\r\n .catch(error => {\r\n console.error('Verification request failed:', error);\r\n if (newAttempts < maxVerificationAttempts) {\r\n scheduleNextVerification(newAttempts, fileId, convId);\r\n } else {\r\n setVerificationMessage(t('image.verification_failed'));\r\n }\r\n });\r\n };\r\n\r\n const scheduleNextVerification = (attempts, fileId, convId) => {\r\n const delaySeconds = 4;\r\n setCountdownSeconds(delaySeconds);\r\n \r\n setVerificationMessage(`${t('image.verifying_access')} (${attempts}/${maxVerificationAttempts})`);\r\n \r\n // Start countdown\r\n countdownInterval.current = setInterval(() => {\r\n setCountdownSeconds(prev => {\r\n if (prev <= 1) {\r\n clearInterval(countdownInterval.current);\r\n requestVerification(fileId, convId, attempts);\r\n return 0;\r\n }\r\n return prev - 1;\r\n });\r\n }, 1000);\r\n };\r\n\r\n const checkImageSensitivity = (fileId, convId) => {\r\n setVerificationMessage(t('image.checking_access'));\r\n requestVerification(fileId, convId);\r\n };\r\n\r\n const handleImageLoad = () => {\r\n setImageLoading(false);\r\n };\r\n\r\n const handleImageError = () => {\r\n setImageError(true);\r\n setImageLoading(false);\r\n };\r\n\r\n \r\n\r\n // Show verification message if image is being verified\r\n if (!canShowImage && verificationMessage && extractedFileId) {\r\n return (\r\n <div className=\"mail-image-verification text-muted p-2 fs14 border rounded d-inline-block bg-light\">\r\n <i className=\"material-icons text-warning\">info</i>\r\n <span className=\"ms-1\">{verificationMessage}</span>\r\n {countdownSeconds > 0 && (\r\n <span className=\"text-secondary ms-1\">\r\n ({t('image.next_attempt_in')} {countdownSeconds} {t('image.seconds')})\r\n </span>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n if (imageError) {\r\n return (\r\n <div className=\"mail-image-error d-inline-block border rounded p-2 text-muted\">\r\n <i className=\"material-icons\">broken_image</i>\r\n <span className=\"ms-1\">{t('image.image_not_available')}</span>\r\n {alt && <div className=\"small\">{alt}</div>}\r\n </div>\r\n );\r\n }\r\n\r\n // Render protected image content\r\n if (canShowImage && (imageSrc || protectionHtml)) { \r\n if (isProtected && !imageRevealed) {\r\n if (protectionHtml) {\r\n return (\r\n <div\r\n id={`mail-img-reveal-holder-${extractedFileId}`}\r\n className=\"mail-image-protected-html action-image protected-html\"\r\n onClick={handleImageClick}\r\n tabIndex=\"0\"\r\n role=\"button\"\r\n aria-label={t('image.click_to_reveal')}\r\n style={{ cursor: 'pointer' }}\r\n dangerouslySetInnerHTML={{ __html: protectionHtml }}\r\n />\r\n );\r\n } else {\r\n return (\r\n <div\r\n id={`mail-img-reveal-holder-${extractedFileId}`}\r\n className=\"mail-image-protected action-image protected-image clickable-reveal position-relative d-inline-block\"\r\n onClick={handleImageClick}\r\n tabIndex=\"0\"\r\n role=\"button\"\r\n aria-label-title={buttonTitle}\r\n aria-label={t('image.click_to_reveal')}\r\n style={{ cursor: 'pointer' }}\r\n >\r\n <img \r\n id={`mail-img-file-${extractedFileId}`}\r\n src={imageSrc} \r\n alt={imageTitle} \r\n title={imageTitle}\r\n className={`action-image img-fluid ${className || ''}`}\r\n width={width}\r\n height={height}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n />\r\n </div>\r\n );\r\n }\r\n } else {\r\n return (\r\n <React.Fragment>\r\n {imageLoading && (\r\n <div className=\"mail-image-loading position-absolute d-flex align-items-center justify-content-center w-100 h-100\">\r\n <div className=\"spinner-border spinner-border-sm text-muted\" role=\"status\">\r\n <span className=\"visually-hidden\">{t('image.loading')}</span>\r\n </div>\r\n </div>\r\n )}\r\n \r\n <img\r\n id={`mail-img-file-${extractedFileId}`}\r\n src={imageSrc}\r\n alt={imageTitle || alt || ''}\r\n title={imageTitle || title || alt || ''}\r\n className={` ${className || ''}`}\r\n style={{\r\n maxWidth: '100%',\r\n height: 'auto',\r\n ...style\r\n }}\r\n width={width}\r\n height={height}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n {...props}\r\n />\r\n </React.Fragment> \r\n );\r\n }\r\n }\r\n\r\n/*<img\r\n src={src}\r\n alt={alt || ''}\r\n title={title || alt || ''}\r\n className={`mail-image ${className || ''}`}\r\n style={{\r\n maxWidth: '100%',\r\n height: 'auto',\r\n ...style\r\n }}\r\n onLoad={handleImageLoad}\r\n onError={handleImageError}\r\n {...props}\r\n />*/\r\n\r\n // Fallback to regular image rendering\r\n return (\r\n <div className=\"mail-image-container d-inline-block position-relative\">\r\n {imageLoading && (\r\n <div className=\"mail-image-loading position-absolute d-flex align-items-center justify-content-center w-100 h-100\">\r\n <div className=\"spinner-border spinner-border-sm text-muted\" role=\"status\">\r\n <span className=\"visually-hidden\">{t('image.loading')}</span>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default React.memo(MailChatImage);\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport {useTranslation} from 'react-i18next';\r\n\r\nconst MailChatAttachment = ({ \r\n id,\r\n name,\r\n description,\r\n download_url,\r\n is_image = false,\r\n download_policy = 0,\r\n ...props \r\n}) => {\r\n const [verificationStatus, setVerificationStatus] = useState('idle'); // idle, verifying, verified, failed, denied\r\n const [verificationMessage, setVerificationMessage] = useState('');\r\n const [verificationAttempts, setVerificationAttempts] = useState(0);\r\n const [countdownSeconds, setCountdownSeconds] = useState(0);\r\n const [extractedFileId, setExtractedFileId] = useState(null);\r\n const [extractedConvId, setExtractedConvId] = useState(null);\r\n const [canDownload, setCanDownload] = useState(false);\r\n const [finalDownloadUrl, setFinalDownloadUrl] = useState('');\r\n const [isSensitiveImage, setIsSensitiveImage] = useState(false);\r\n const [buttonTitle, setButtonTitle] = useState('');\r\n\r\n const { t, i18n } = useTranslation('mail_chat');\r\n\r\n const countdownInterval = useRef(null);\r\n const maxVerificationAttempts = 4;\r\n\r\n // Extract file_id and conversation_id from URL structure like mailconv/inlinedownload/<file_id>/<conversation_id>\r\n const extractIdsFromUrl = (url) => {\r\n if (!url) return { fileId: null, convId: null };\r\n \r\n // Match pattern: any_domain/any_path/mailconv/inlinedownload/file_id/conversation_id\r\n const match = url.match(/\\/mailconv\\/inlinedownload\\/(\\d+)\\/(\\d+)/);\r\n if (match) {\r\n return {\r\n fileId: parseInt(match[1], 10),\r\n convId: parseInt(match[2], 10)\r\n };\r\n }\r\n \r\n return { fileId: null, convId: null };\r\n };\r\n\r\n useEffect(() => {\r\n if (download_url) {\r\n // Extract file_id and conversation_id from download_url\r\n const { fileId, convId } = extractIdsFromUrl(download_url);\r\n\r\n if (fileId && convId) {\r\n setExtractedFileId(fileId);\r\n setExtractedConvId(convId);\r\n\r\n // Check download policy (convert to number for comparison)\r\n const policyValue = parseInt(download_policy, 10);\r\n if (policyValue === 0 || !is_image) {\r\n // No verification needed - allow download immediately\r\n setCanDownload(true);\r\n setFinalDownloadUrl(download_url);\r\n setVerificationStatus('verified');\r\n } else {\r\n // Verification needed for policy 1 or 2\r\n setCanDownload(false);\r\n setVerificationStatus('idle');\r\n }\r\n } else {\r\n // Fallback to regular download_url if no pattern match\r\n setCanDownload(true);\r\n setFinalDownloadUrl(download_url);\r\n setVerificationStatus('verified');\r\n }\r\n }\r\n\r\n return () => {\r\n clearCountdown();\r\n };\r\n }, [download_policy, download_url]);\r\n\r\n const clearCountdown = () => {\r\n if (countdownInterval.current) {\r\n clearInterval(countdownInterval.current);\r\n countdownInterval.current = null;\r\n }\r\n setCountdownSeconds(0);\r\n };\r\n\r\n const handleButtonClick = (e) => {\r\n e.preventDefault();\r\n \r\n // If it's not an image or verification is not needed, proceed with download\r\n if (!is_image || verificationStatus === 'verified') {\r\n if (canDownload && finalDownloadUrl) {\r\n window.open(finalDownloadUrl, '_blank');\r\n }\r\n return;\r\n }\r\n\r\n // For images that need verification, start the verification process\r\n if (verificationStatus === 'idle' || verificationStatus === 'failed') {\r\n startVerificationProcess(extractedFileId, extractedConvId);\r\n }\r\n };\r\n\r\n const startVerificationProcess = (fileId, convId) => {\r\n setVerificationAttempts(0);\r\n setVerificationStatus('verifying');\r\n setVerificationMessage(t('image.verifying_access'));\r\n\r\n requestVerification(fileId, convId);\r\n };\r\n\r\n const requestVerification = (fileId, convId, currentAttempts = null) => {\r\n const attempts = currentAttempts !== null ? currentAttempts : verificationAttempts;\r\n \r\n if (attempts >= maxVerificationAttempts) {\r\n setVerificationStatus('failed');\r\n setVerificationMessage(t('image.verification_failed'));\r\n return;\r\n }\r\n\r\n const newAttempts = attempts + 1;\r\n setVerificationAttempts(newAttempts);\r\n \r\n // Build verification URL using conversation ID\r\n const verifyUrl = window.WWW_DIR_JAVASCRIPT + 'mailconv/verifyaccess/' + fileId + '/' + convId;\r\n \r\n // Make verification request\r\n fetch(verifyUrl, {\r\n method: 'GET',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n const policyValue = parseInt(download_policy, 10);\r\n \r\n if (data.verified === true) {\r\n // Check if file has error message\r\n if (data.error_msg) {\r\n setVerificationStatus('failed');\r\n setVerificationMessage(data.error_msg);\r\n clearCountdown();\r\n } else {\r\n if (policyValue === 2 && (data.protection_image || data.protection_html)) {\r\n // Policy 2 with sensitive image - show access denied\r\n setVerificationStatus('denied');\r\n setVerificationMessage(t('image.access_denied'));\r\n clearCountdown();\r\n } else {\r\n // Verification successful - allow download\r\n setVerificationStatus('verified');\r\n setCanDownload(true);\r\n setFinalDownloadUrl(window.WWW_DIR_JAVASCRIPT + 'mailconv/inlinedownload/' + fileId + '/' + convId);\r\n setVerificationMessage('');\r\n clearCountdown();\r\n \r\n // Check if it's a sensitive image\r\n if (data.protection_image || data.protection_html) {\r\n setIsSensitiveImage(true);\r\n setButtonTitle(data.btn_title || '');\r\n } else {\r\n setIsSensitiveImage(false);\r\n setButtonTitle('');\r\n }\r\n }\r\n }\r\n } else {\r\n // Verification not ready yet - schedule next attempt\r\n if (newAttempts < maxVerificationAttempts) {\r\n scheduleNextVerification(newAttempts, fileId, convId);\r\n } else {\r\n setVerificationStatus('failed');\r\n setVerificationMessage(t('image.verification_failed'));\r\n }\r\n }\r\n })\r\n .catch(error => {\r\n console.error('Verification request failed:', error);\r\n if (newAttempts < maxVerificationAttempts) {\r\n scheduleNextVerification(newAttempts, fileId, convId);\r\n } else {\r\n setVerificationStatus('failed');\r\n setVerificationMessage(t('image.verification_failed'));\r\n }\r\n });\r\n };\r\n\r\n const scheduleNextVerification = (attempts, fileId, convId) => {\r\n const delaySeconds = 4;\r\n setCountdownSeconds(delaySeconds);\r\n \r\n setVerificationMessage(`${t('image.verifying_access')} (${attempts}/${maxVerificationAttempts})`);\r\n \r\n // Start countdown\r\n countdownInterval.current = setInterval(() => {\r\n setCountdownSeconds(prev => {\r\n if (prev <= 1) {\r\n clearInterval(countdownInterval.current);\r\n requestVerification(fileId, convId, attempts);\r\n return 0;\r\n }\r\n return prev - 1;\r\n });\r\n }, 1000);\r\n };\r\n\r\n const getButtonIcon = () => {\r\n if (!is_image) {\r\n return 'attach_file';\r\n }\r\n\r\n switch (verificationStatus) {\r\n case 'verifying':\r\n return 'hourglass_empty';\r\n case 'verified':\r\n return 'verified';\r\n case 'failed':\r\n return 'warning';\r\n case 'denied':\r\n return 'block';\r\n default:\r\n return 'image';\r\n }\r\n };\r\n\r\n const getButtonClass = () => {\r\n let baseClass = 'btn btn-sm me-1';\r\n \r\n if (!is_image || verificationStatus === 'verified') {\r\n return baseClass + ' btn-outline-info';\r\n }\r\n\r\n switch (verificationStatus) {\r\n case 'verifying':\r\n return baseClass + ' btn-warning';\r\n case 'failed':\r\n return baseClass + ' btn-danger';\r\n case 'denied':\r\n return baseClass + ' btn-danger';\r\n default:\r\n return baseClass + ' btn-outline-info';\r\n }\r\n };\r\n\r\n const getButtonTitle = () => {\r\n if (!is_image) {\r\n return description || name;\r\n }\r\n\r\n switch (verificationStatus) {\r\n case 'verifying':\r\n return verificationMessage + (countdownSeconds > 0 ? ` (${countdownSeconds}s)` : '');\r\n case 'verified':\r\n return description || name;\r\n case 'failed':\r\n return verificationMessage;\r\n case 'denied':\r\n return verificationMessage;\r\n default:\r\n return description || name;\r\n }\r\n };\r\n\r\n const getButtonText = () => {\r\n if (verificationStatus === 'verifying' && countdownSeconds > 0) {\r\n return `${name} (${countdownSeconds}s)`;\r\n }\r\n if (is_image && verificationStatus === 'verified') {\r\n if (isSensitiveImage && buttonTitle) {\r\n return `${name} - 🔒 ${buttonTitle}`;\r\n } else {\r\n return `${name} - ✔️ ${t('image.click_to_download')}`;\r\n }\r\n }\r\n\r\n if (is_image && verificationStatus === 'failed') {\r\n return `${name} - ⚠️ ${verificationMessage}`;\r\n }\r\n\r\n\r\n return name;\r\n };\r\n\r\n const isDisabled = () => {\r\n return (is_image && verificationStatus === 'verifying') || \r\n (is_image && verificationStatus === 'denied') ||\r\n (is_image && verificationStatus === 'failed');\r\n };\r\n\r\n return (\r\n <button\r\n className={getButtonClass()}\r\n onClick={handleButtonClick}\r\n title={getButtonTitle()}\r\n disabled={isDisabled()}\r\n {...props}\r\n >\r\n <i className=\"material-icons me-1 fs14\" >\r\n {getButtonIcon()}\r\n </i>\r\n {getButtonText()}\r\n </button>\r\n );\r\n};\r\n\r\nexport default React.memo(MailChatAttachment);\r\n","import parse, { domToReact } from 'html-react-parser';\nimport React, { useState } from \"react\";\nimport MailChatQuote from \"./MailChatQuote\";\nimport MailChatReply from \"./MailChatReply\";\nimport MailChatImage from \"./MailChatImage\";\nimport MailChatAttachment from \"./MailChatAttachment\";\nimport {useTranslation} from 'react-i18next';\nimport axios from \"axios\";\n\nconst MailChatMessage = ({message, index, totalMessages, noReplyRequired, mode, addLabel, moptions, fetchMessages, fetchingMessages, verifyOwner, setConversationStatus, updateMessages, loadMessageBody, keyword}) => {\n\n const [expandingBody, setExpandingBody] = useState(false);\n const [expandHeader, setExpandHeader] = useState(false);\n const [expandBody, setExpandBody] = useState(false);\n const [plainBody, setPlainBody] = useState(!!message.undelivered);\n const [replyMode, setReplyMode] = useState(false);\n const [forwardMode, setForwardMode] = useState(false);\n const [expandDeliveryInformation, setExpandDeliveryInformation] = useState(false);\n\n const formatStringToCamelCase = str => {\n const splitted = str.split(\"-\");\n if (splitted.length === 1) return splitted[0];\n return (\n splitted[0] +\n splitted\n .slice(1)\n .map(word => word[0].toUpperCase() + word.slice(1))\n .join(\"\")\n );\n };\n\n const getStyleObjectFromString = str => {\n const style = {};\n str.split(\";\").forEach(el => {\n const [property, value] = el.split(\":\");\n if (!property) return;\n\n const formattedProperty = formatStringToCamelCase(property.trim());\n style[formattedProperty] = value.trim();\n });\n\n return style;\n };\n\n const processRestAPIError = (err) => {\n if (!!err.isAxiosError && !err.response) {\n alert(t('system.error'));\n } else {\n if (err.response.data.error) {\n alert(err.response.data.error);\n } else {\n alert(JSON.stringify(err.response.data));\n }\n }\n }\n\n const unMerge = message => {\n if (confirm(t('status.are_you_sure'))) {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apiunmerge/\" + message.id + \"/\" + message.conversation_id).then(result => {\n updateMessages();\n }).catch((error) => processRestAPIError(error));\n }\n }\n\n if (fetchingMessages == true && (replyMode == true || forwardMode == true)) {\n setReplyMode(false);\n setForwardMode(false);\n }\n\n const loadAndExpand = expandAction => {\n setExpandBody(expandAction);\n if (expandAction == true && typeof message.body_front === 'undefined' && typeof message.alt_body === 'undefined') {\n setExpandingBody(true);\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/loadmessagebody/\" + message.id + \"/\" + message.conversation_id, {keyword: keyword}).then(result => {\n loadMessageBody(result.data);\n setExpandingBody(false);\n }).catch((error) => {\n\n });\n }\n }\n\n if (index + 1 == totalMessages && expandBody === false && expandingBody === false || (expandingBody === false && expandBody === true && typeof message.body_front === 'undefined' && typeof message.alt_body === 'undefined')) {\n loadAndExpand(true);\n }\n\n const { t, i18n } = useTranslation('mail_chat');\n\n return <div className={\"row pb-2 mb-2 border-secondary\" + (mode !== 'preview' ? ' border-top pt-2' : ' border-bottom')}>\n <div className=\"col-7 action-image\" onClick={() => loadAndExpand(!expandBody)}>\n <span title={\"Expand message \" + message.id} ><i className=\"material-icons\">{expandBody ? 'expand_less' : 'expand_more'}</i></span>\n <b>{message.from_name}</b>\n <small> <{message.from_address}> </small>\n {message.opened_at && <span className=\"material-icons text-success\" title={message.opened_at_front}>visibility</span>}\n <span className={\"material-icons \" + (message.is_external ? 'chat-pending' : 'chat-active')} title={message.is_external ? t('msg.external_email') : t('msg.internal_email')} >{message.is_external ? 'location_away' : 'location_home'}</span>\n <small className={!message.status || message.status == 1 ? 'chat-pending' : (message.cls_time ? 'chat-closed' : 'chat-active')}>\n <i className=\"material-icons\">mail_outline</i>\n {!message.status || message.status == 1 ? t('msg.pnd_rsp') : t('msg.rsp')}\n </small>\n {message.conversation_id_old && <small className=\"text-muted\" title={t('msg.merged_message')} ><span className=\"material-icons me-0\">merge_type</span>{message.conversation_id_old}</small>}\n </div>\n <div className=\"col-5 text-end text-muted\">\n <small className=\"pe-1\">\n {message.subjects && message.subjects.map((label, index) => (\n <span className=\"badge me-1\" style={{'background-color': label.color ? '#'+label.color : '#0dcaf0'}}>{label.name}</span>\n ))}\n {mode !== 'preview' && moptions.can_write && <React.Fragment><i title={t('msg.ar_label')} onClick={() => addLabel(message)} className=\"material-icons action-image text-muted\">label</i> |</React.Fragment>}\n </small>\n <small className=\"pe-2\">{message.opened_at && <span className=\"material-icons\" title={t('msg.opened_at_message') + message.opened_at_front}>visibility</span>}{message.udate_front} | {message.udate_ago} {t('msg.ago')}.</small>\n {mode !== 'preview' && moptions.can_write && <i onClick={(e) => {e.stopPropagation();setForwardMode(false);setReplyMode(true)}} className=\"material-icons settings text-muted\">reply</i>}\n\n <i onClick={(e) => {e.stopPropagation(); setExpandHeader(!expandHeader)}} className=\"material-icons settings text-muted\">{expandHeader ? 'expand_less' : 'expand_more'}</i>\n\n {mode !== 'preview' && <div className=\"dropdown float-end\">\n <i className=\"material-icons settings text-muted\" id={\"message-id-\"+message.id} data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">more_vert</i>\n <div className=\"dropdown-menu\" aria-labelledby={\"message-id-\"+message.id}>\n {moptions.can_write && <a className=\"dropdown-item\" href=\"#\" onClick={(e) => {e.stopPropagation();setForwardMode(false);setReplyMode(true)}}><i className=\"material-icons text-muted\" >reply</i>{t('msg.reply')}</a>}\n {moptions.can_write && moptions.can_forward && <a className=\"dropdown-item\" href=\"#\" onClick={(e) => {e.stopPropagation();setReplyMode(false);setForwardMode(true)}}><i className=\"material-icons text-muted\">forward</i>{t('msg.forward')}</a>}\n {message.conversation_id_old && <a className=\"dropdown-item\" href=\"#\" onClick={(e) => {e.stopPropagation();unMerge(message);}} ><i className=\"material-icons\">alt_route</i>{t('msg.unmerge')}</a>}\n <a className=\"dropdown-item\" target=\"_blank\" href={WWW_DIR_JAVASCRIPT + \"mailconv/mailprint/\" + message.id + \"/\" + message.conversation_id} ><i className=\"material-icons text-muted\">print</i>{t('mail.print')}</a>\n {moptions.can_download && <a className=\"dropdown-item\" href={WWW_DIR_JAVASCRIPT + \"mailconv/apimaildownload/\" + message.id + \"/\" + message.conversation_id} ><i className=\"material-icons text-muted\">cloud_download</i>{t('msg.download')}</a>}\n {moptions.mail_links && moptions.mail_links.map((link, index) => <a className=\"dropdown-item\" target=\"_blank\" href={link.link.replace('{msg_id}',message.id)}>{link.icon && <i className=\"material-icons text-muted\">{link.icon}</i>}{link.title}</a>)}\n {moptions.can_write && <a className=\"dropdown-item\" href=\"#\" onClick={() => noReplyRequired(message)}><i className=\"material-icons text-muted\">done</i>{t('msg.no_reply')}</a>}\n {message.alt_body && <a className=\"dropdown-item\" href=\"#\" onClick={(e) => setPlainBody(!plainBody)}><i className=\"material-icons text-muted\">visibility</i>{t('msg.plain_html')}</a>}\n </div>\n </div>}\n </div>\n\n {expandHeader && <div className=\"col-12\">\n\n <div className=\"card\">\n <div className=\"card-body\">\n <h6 className=\"card-subtitle mb-2 text-muted\">{t('msg.info')}</h6>\n\n <div className=\"row\">\n <div className=\"col-12 fs13\">\n <strong>{t('mail.subject')}:</strong> <span className=\"text-muted\">{message.subject}</span>\n </div>\n <div className=\"col-6\">\n <ul className=\"fs13 mb-0 list-unstyled\">\n <li>\n <span className=\"text-muted\">{t('msg.from')}:</span> <b>{message.from_name}</b> <{message.from_address}>\n </li>\n <li>\n <span className=\"text-muted\">{t('msg.to')}:</span> {message.to_data_front}\n </li>\n {message.cc_data_front && <li>\n <span className=\"text-muted\">cc:</span> {message.cc_data_front}\n </li>}\n <li>\n <span className=\"text-muted\">id:</span> {message.message_id}\n </li>\n {message.bcc_data_front && <li>\n <span className=\"text-muted\">bcc:</span> {message.bcc_data_front}\n </li>}\n <li>\n <span className=\"text-muted\">{t('msg.reply_to')}:</span> {message.reply_to_data_front}\n </li>\n <li>\n <span className=\"text-muted\">{t('msg.mailed_by')}:</span> {message.from_host}\n </li>\n </ul>\n </div>\n <div className=\"col-6\">\n <ul className=\"fs13 mb-0 list-unstyled\">\n {message.accept_time_front && <li>{t('mail.accepted_at')}: {message.accept_time_front}</li>}\n {message.plain_user_name && <li data-id={message.user_id} >{t('mail.accepted_by')}: <b>{message.plain_user_name}</b></li>}\n {message.wait_time && <li>{t('mail.accept_wait_time')}: {message.wait_time_pending}</li>}\n {message.lr_time && message.response_time && <li>{t('mail.response_wait_time')}: {message.wait_time_response}, {t('mail.exc_pending_time')}</li>}\n <li data-id={message.response_type}>{t('mail.rsp_type')}: {message.response_type == 1 ? t('msg.nrr') : (message.response_type == 2 ? t('msg.orm') : (message.response_type == 3 ? t('msg.rbe') : t('msg.unr')))}</li>\n {message.interaction_time && <li>{t('mail.interaction_time')}: {message.interaction_time_duration}</li>}\n {message.cls_time && <li>{t('mail.closed_at')}: {message.cls_time_front}</li>}\n {message.conv_duration_front && <li>{t('mail.response_wait_time')}: {message.conv_duration_front}</li>}\n <li>{t('mail.message_id')}: {message.id}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>}\n\n {expandBody && message.undelivered && <div className=\"col-12 alert alert-warning mt-2\">\n This message was undelivered. <a href={WWW_DIR_JAVASCRIPT + \"mailconv/downloadrfc822/\" + message.id + \"/\" + message.conversation_id}>Download sent message.</a>\n\n <div className=\"text-danger border-bottom my-2 py-2 fs13\">\n <ul className=\"m-0 ps-3\">\n {message.delivery_status_keyed.Diagnostic_Code && <li>{message.delivery_status_keyed.Diagnostic_Code}</li>}\n {message.delivery_status_keyed.taken && <li>{message.delivery_status_keyed.taken}</li>}\n </ul>\n </div>\n\n {message.delivery_status_keyed && <button onClick={(e) => setExpandDeliveryInformation(!expandDeliveryInformation)} className=\"btn fs12 btn-link\">Show technical information.</button>}\n\n {expandDeliveryInformation && message.delivery_status_keyed && <div>\n\n <pre>{JSON.stringify(message.delivery_status_keyed, null, 2)}</pre>\n </div>}\n </div>}\n\n {expandBody && plainBody && message.alt_body && <div className=\"col-12 mail-message-body pt-2 pb-2\">\n <pre className=\"fs12\">{message.alt_body}</pre>\n </div>}\n\n {expandBody && message.body_front && !plainBody && <div className=\"col-12 mail-message-body pt-2 pb-2\">\n {parse(message.body_front, {\n replace: domNode => {\n if (domNode.attribs) {\n\n var cloneAttr = Object.assign({}, domNode.attribs);\n\n if (domNode.attribs.class) {\n domNode.attribs.className = domNode.attribs.class;\n delete domNode.attribs.class;\n }\n\n if (domNode.name && domNode.name === 'img') {\n if (domNode.attribs.style) {\n domNode.attribs.style = getStyleObjectFromString(domNode.attribs.style);\n }\n \n return <MailChatImage \n download_policy={moptions.download_policy}\n src={domNode.attribs.src}\n alt={domNode.attribs.alt}\n title={domNode.attribs.title}\n className={domNode.attribs.className}\n style={domNode.attribs.style}\n {...domNode.attribs}\n />;\n }\n\n if (domNode.name && domNode.name === 'blockquote') {\n if (domNode.attribs.style) {\n domNode.attribs.style = getStyleObjectFromString(domNode.attribs.style);\n }\n\n return <blockquote {...domNode.attribs}><MailChatQuote>{domToReact(domNode.children)}</MailChatQuote></blockquote>\n }\n }\n }\n })}\n </div>}\n\n {expandBody && message.attachments && message.attachments.length > 0 &&\n <div className=\"pb-2 col-12\">\n {message.attachments.map((file) => (\n \n <MailChatAttachment\n key={file.id}\n id={file.id}\n name={file.name}\n description={file.description}\n download_url={file.download_url}\n is_image={file.is_image}\n download_policy={moptions.download_policy}\n />\n\n ))}</div>\n }\n\n\n {mode !== 'preview' && moptions.can_write && !fetchingMessages && ((index + 1 == totalMessages) || replyMode || forwardMode) && <MailChatReply setConversationStatus={setConversationStatus} verifyOwner={verifyOwner} fetchingMessages={fetchingMessages} fetchMessages={(e) => fetchMessages()} moptions={moptions} forwardMode={forwardMode} cancelForward={(e) => setForwardMode(false)} cancelReply={(e) => setReplyMode(false)} replyMode={replyMode} lastMessage={index + 1 == totalMessages} message={message} noReplyRequired={() => noReplyRequired(message)} />}\n\n </div>\n}\n\nexport default React.memo(MailChatMessage);","import React, { useEffect, useState, useReducer, useRef } from \"react\";\nimport axios from \"axios\";\nimport {useTranslation} from 'react-i18next';\nimport MailChatMessage from \"./parts_mail/MailChatMessage\";\n\naxios.defaults.headers.common['X-CSRFToken'] = confLH.csrf_token;\n\nfunction reducer(state, action) {\n switch (action.type) {\n case 'increment':\n return {count: state.count + 1};\n case 'decrement':\n return {count: state.count - 1};\n case 'update': {\n return { ...state, ...action.value }\n }\n case 'update_conversation': {\n state.conv = { ...state.conv, ...action.value };\n return { ... state};\n }\n case 'update_subjects': {\n var foundIndex = state.messages.findIndex(x => x.id == action.message_id);\n state.messages[foundIndex].subjects = action.subjects;\n state = { ... state};\n return state;\n }\n case 'update_message': {\n var foundIndex = state.messages.findIndex(x => x.id == action.message.id);\n state.messages[foundIndex] = action.message;\n\n if (action.conv) {\n state.conv = action.conv;\n }\n\n if (action.fetching_messages) {\n state.fetching_messages = action.fetching_messages;\n }\n\n state = { ... state};\n\n return state;\n }\n\n case 'update_watching_ops': {\n var foundIndex = state.op_watching.findIndex(x => x.user_id == action.watcher.user_id);\n if (action.watcher.status === true) {\n if (foundIndex === -1) {\n if (confLH.user_id != action.watcher.user_id) {\n action.watcher.ts = Math.floor(Date.now() / 1000);\n state.op_watching.push(action.watcher);\n }\n } else {\n state.op_watching[foundIndex].ts = Math.floor(Date.now() / 1000);\n }\n } else if (action.watcher.status === false && foundIndex !== -1) {\n state.op_watching.splice(foundIndex,1);\n }\n\n state.op_watching.forEach((element,index) => {\n if (element.ts < Math.floor(Date.now() / 1000) - 15) {\n state.op_watching.splice(index,1);\n }\n });\n\n return { ...state};\n }\n\n case 'update_history': {\n state = { ...state, ...action.value };\n if (action.history.msg != '') {\n state.messages.unshift(action.history);\n }\n return state;\n }\n case 'init':\n return {count: state.count - 1};\n default:\n throw new Error('Unknown action!');\n }\n}\n\nconst MailChat = props => {\n\n const messageElement = useRef(null);\n const messagesElement = useRef(null);\n const tabsContainer = useRef(null);\n\n const [state, dispatch] = useReducer(reducer, {\n messages: [],\n operators: [],\n op_watching: [],\n conv: null,\n loaded: false,\n saving_remarks: false,\n close_mode: false,\n old_message_id: 0,\n last_message: '',\n remarks: '',\n last_message_id: 0,\n lmsop: 0,\n lgsync: 0,\n fetching_messages: false,\n expand_messages: false\n });\n\n const rememberChat = (chatId) => {\n if (localStorage) {\n try {\n var achat_id_array = [];\n var achat_id = localStorage.getItem('machat_id');\n\n if (achat_id !== null && achat_id !== '') {\n achat_id_array = achat_id.split(',');\n }\n\n if (achat_id_array.indexOf(chatId) === -1){\n achat_id_array.push(chatId);\n localStorage.setItem('machat_id',achat_id_array.join(','));\n }\n\n } catch(e) {\n\n }\n }\n }\n\n const processRestAPIError = (err) => {\n if (!!err.isAxiosError && !err.response) {\n alert(t('system.error'));\n } else {\n if (err.response.data.error) {\n alert(err.response.data.error);\n } else {\n alert(JSON.stringify(err.response.data));\n }\n }\n }\n\n const changeStatus = (e) => {\n if (confirm(t('status.are_you_sure'))) {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apichangestatus/\" + state.conv.id + '/' + e.target.value).then(result => {\n dispatch({\n type: 'update',\n value: {\n 'conv': result.data.conv,\n }\n });\n }).catch((error) => processRestAPIError(error));\n }\n }\n\n const deleteConversation = () => {\n if (confirm('Are you sure?')) {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apideleteconversation/\" + state.conv.id).then(result => {\n // If we are in the tab close tab also\n if (document.getElementById('chat-tab-link-mc'+state.conv.id)) {\n lhinst.removeDialogTabMail('mc'+state.conv.id,$('#tabs'),true);\n } else {\n document.location = WWW_DIR_JAVASCRIPT + \"mailconv/conversations\";\n }\n }).catch((error) => {\n\n });\n }\n }\n\n const closeConversation = () => {\n let hasUnrespondedMessages = false;\n state.messages.forEach((message) => {\n if (message.status != 2) {\n hasUnrespondedMessages = true;\n }\n });\n\n if (hasUnrespondedMessages == false || confirm(t('status.unresponded_messages'))) {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apicloseconversation/\" + state.conv.id).then(result => {\n dispatch({\n type: 'update',\n value: {\n 'conv': result.data.conv,\n 'messages' : result.data.messages\n }\n });\n\n // If we are in the tab close tab also\n if (document.getElementById('chat-tab-link-mc'+state.conv.id)) {\n lhinst.removeDialogTabMail('mc'+state.conv.id,$('#tabs'),true);\n }\n\n }).catch((error) => {\n\n });\n }\n }\n\n const noReplyRequired = (message) => {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/apinoreplyrequired/\" + message.id + \"/\" + message.conversation_id).then(result => {\n dispatch({\n type: 'update_message',\n message: result.data.message,\n conv: result.data.conv\n });\n }).catch((error) => {\n\n });\n }\n\n const loadMessageBody = (message, data) => {\n dispatch({\n type: 'update_message',\n message: data.message,\n conv: data.conv\n });\n }\n\n const addLabel = (message) => {\n lhc.revealModal({'url':WWW_DIR_JAVASCRIPT + \"mailconv/apilabelmessage/\" + message.id + \"/\" + message.conversation_id,hidecallback : () => {\n updateLabels(message);\n }});\n }\n\n const updateLabels = (message) => {\n axios.get(WWW_DIR_JAVASCRIPT + \"mailconv/apigetlabels/\" + message.id + \"/\" + message.conversation_id).then(result => {\n dispatch({\n type: 'update_subjects',\n message_id: message.id,\n subjects: result.data\n });\n }).catch((error) => {\n\n });\n }\n\n const verifyOwner = (userId) => {\n if (userId != state.conv.user_id) {\n loadMainData();\n }\n }\n\n const loadMainData = () => {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/loadmainconv/\" + props.chatId + '/(mode)/' + (props.mode != '' ? props.mode : 'normal'),{keyword: props.keyword}).then(result => {\n dispatch({\n type: 'update',\n value: {\n 'conv': result.data.conv,\n 'customer_remarks': result.data.customer_remarks,\n 'messages' : result.data.messages,\n 'moptions' : result.data.moptions,\n 'loaded' : true,\n 'fetching_messages' : false,\n }\n });\n\n if (props.disableRemember === false && props.mode !== 'preview') {\n rememberChat(props.chatId);\n }\n\n if (props.mode !== 'preview' && result.data.conv.pending_sync) {\n fetchMessages();\n }\n\n }).catch((error) => {\n lhinst.removeDialogTabMail('mc'+ props.chatId,$('#tabs'),true);\n });\n }\n\n const fetchMessages = (message) => {\n // Reset previous state\n dispatch({\n type: 'update',\n value: {\n 'fetching_messages': true\n }\n });\n\n fetchUntillUpdate(Math.floor(Date.now() / 1000));\n }\n\n const fetchUntillUpdate = (ts) => {\n axios.get(WWW_DIR_JAVASCRIPT + \"mailconv/apifetchmails/\" + props.chatId + '/' + ts).then(result => {\n if (result.data.updated == true) {\n loadMainData();\n } else {\n // Todo handle cleanup\n setTimeout(() => fetchUntillUpdate(ts),3000);\n }\n });\n }\n\n const showModal = (params) => {\n lhc.revealModal({'url':WWW_DIR_JAVASCRIPT + params.url});\n }\n\n useEffect(() => {\n if (state.conv !== null) {\n const timeout = setTimeout(() => {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/saveremarks/\" + props.chatId, {data: state.remarks}).then(result => {\n dispatch({\n type: 'update',\n value: {\n 'saving_remarks': false\n }\n });\n });\n }, 500);\n return () => clearTimeout(timeout);\n }\n },[state.remarks]);\n\n useEffect(() => {\n if (state.conv !== null) {\n const timeout = setTimeout(() => {\n axios.post(WWW_DIR_JAVASCRIPT + \"mailconv/saveremarks/\" + props.chatId + '/(type)/customer', {data: state.customer_remarks}).then(result => {\n dispatch({\n type: 'update',\n value: {\n 'saving_customer_remarks': false\n }\n });\n });\n }, 500);\n return () => clearTimeout(timeout);\n }\n },[state.customer_remarks]);\n\n const saveRemarks = (params) => {\n dispatch({\n type: 'update',\n value: {\n 'saving_remarks': true,\n 'remarks': params\n }\n });\n }\n\n const saveCustomerRemarks = (params) => {\n dispatch({\n type: 'update',\n value: {\n 'saving_customer_remarks': true,\n 'customer_remarks': params\n }\n });\n }\n\n const forgetChat = (chatId) => {\n if (localStorage) {\n try {\n var achat_id_array = [];\n var achat_id = localStorage.getItem('machat_id');\n\n if (achat_id !== null && achat_id !== '') {\n achat_id_array = achat_id.split(',');\n }\n\n if (achat_id_array.indexOf(chatId) !== -1) {\n achat_id_array.splice(achat_id_array.indexOf(chatId),1);\n }\n\n localStorage.setItem('machat_id',achat_id_array.join(','));\n } catch(e) {\n\n }\n }\n }\n\n const addOpWatching = (watcher) => {\n dispatch({\n type: 'update_watching_ops',\n watcher: watcher\n });\n }\n\n const setConversationStatus = (status) => {\n dispatch({\n type: 'update_conversation',\n value: {\n 'status' : status\n }\n });\n }\n\n useEffect(() => {\n loadMainData();\n\n function mailChatModified(chatId) {\n if (props.chatId == chatId) {\n loadMainData();\n }\n }\n\n function mailLabelsModified(chatId, messageId) {\n if (props.chatId == chatId) {\n updateLabels({\"id\": messageId});\n }\n }\n\n function mailOpWatching(mail) {\n if (props.chatId == mail.id) {\n addOpWatching(mail);\n }\n }\n\n ee.addListener('mailChatModified', mailChatModified);\n ee.addListener('mailLabelsModified', mailLabelsModified);\n ee.addListener('mailMerged', mailChatModified);\n ee.addListener('mail.op_watching', mailOpWatching);\n\n return function cleanup() {\n ee.removeListener('mailChatModified', mailChatModified);\n ee.removeListener('mailLabelsModified', mailLabelsModified);\n ee.removeListener('mail.op_watching', mailOpWatching);\n ee.emitEvent('mailChatContentUnLoaded', [props.chatId]);\n forgetChat(props.chatId)\n };\n },[]);\n\n useEffect(() => {\n if (state.loaded == true) {\n var container = tabsContainer.current;\n ee.emitEvent('mailChatContentLoaded', [props.chatId]);\n }\n },[state.loaded]);\n\n const { t, i18n } = useTranslation('mail_chat');\n\n if (state.loaded == false) {\n return <span>...</span>\n }\n\n return (\n <React.Fragment>\n <div className=\"row\">\n <div className={\"chat-main-left-column \" + (props.mode == 'preview' ? 'col-12' : 'col-7')}>\n\n {props.mode !== 'preview' && <h1 className=\"pb-2\">\n <i className=\"material-icons\">{state.conv.start_type == 1 ? 'call_made' : 'call_received'}</i>{state.conv.undelivered && <i title=\"Undelivered e-mail\" className=\"text-danger material-icons\">sms_failed</i>}{state.conv.subject}\n </h1>}\n\n <div>\n {state.messages.map((message, index) => {\n if (state.expand_messages == true || // Render all if requested\n state.messages.length < 5 || // Render all if less than 5\n index == 0 || // Render first\n state.messages.length == (index + 1) || // Render last one\n state.messages.length - 2 == index) { // Render before last one\n return <React.Fragment key={'msg-mail-hold-' + props.chatId + '_' + index + '_' + message.id}>{state.expand_messages == false && state.messages.length >= 5 && state.messages.length - 2 == index && <div className=\"previous-mails-row\" onClick={() => dispatch({type: 'update',value: {'expand_messages': true}})} ><span className=\"previous-number\" title={t('mail.previous_messages')}>{state.messages.length - 3}</span></div>}<MailChatMessage setConversationStatus={(e) => setConversationStatus(e)}\n verifyOwner={(e) => verifyOwner(e)} moptions={state.moptions}\n fetchMessages={(e) => fetchMessages(message)}\n fetchingMessages={state.fetching_messages} mode={props.mode}\n key={'msg_mail_' + props.chatId + '_' + index + '_' + message.id}\n totalMessages={state.messages.length} index={index} message={message}\n noReplyRequired={(e) => noReplyRequired(message)}\n addLabel={(e) => addLabel(message)}\n updateMessages={(e) => loadMainData()}\n keyword={props.keyword}\n loadMessageBody={(data) => loadMessageBody(message, data)}/></React.Fragment>;\n }\n })}\n\n {state.fetching_messages && <div className=\"alert alert-success p-1 ps-2\" role=\"alert\">{t('mail.send_fetching')}</div>}\n </div>\n </div>\n <div className={\"chat-main-right-column \" + (props.mode == 'preview' ? 'd-none' : 'col-5')}>\n <div role=\"tabpanel\">\n <ul className=\"nav nav-pills\" role=\"tablist\" ref={tabsContainer}>\n <li role=\"presentation\" className=\"nav-item\"><a className=\"nav-link active\" href={\"#mail-chat-info-\"+props.chatId} aria-controls={\"#mail-chat-info-\"+props.chatId} title={t('mail.information')} role=\"tab\" data-bs-toggle=\"tab\"><i className=\"material-icons me-0\">info_outline</i></a></li>\n <li role=\"presentation\" className=\"nav-item\"><a className=\"nav-link\" href={\"#mail-chat-remarks-\"+props.chatId} aria-controls={\"#mail-chat-remarks-\"+props.chatId} role=\"tab\" data-bs-toggle=\"tab\" title={t('mail.remarks')}><i className=\"material-icons me-0\">mode_edit</i></a></li>\n </ul>\n <div className=\"tab-content\">\n <div role=\"tabpanel\" className=\"tab-pane\" id={\"mail-chat-remarks-\"+props.chatId}>\n\n <div className={\"pb-1 text-success\" + (state.saving_customer_remarks ? ' text-warning' : '')}><span className=\"material-icons\">mode_edit</span> Customer remarks</div>\n <div>\n <textarea disabled={!state.moptions.can_write} placeholder=\"Enter your remarks here.\" onKeyUp={(e) => saveCustomerRemarks(e.target.value)} className=\"form-control mh150\" defaultValue={state.customer_remarks}></textarea>\n </div>\n\n <div className={\"pb-1 text-success\" + (state.saving_remarks ? ' text-warning' : '')}><span className=\"material-icons\">mode_edit</span> Conversation remarks</div>\n <div>\n {state.conv && <textarea disabled={!state.moptions.can_write} placeholder=\"Enter your remarks here.\" onKeyUp={(e) => saveRemarks(e.target.value)} className=\"form-control mh150\" defaultValue={state.conv.remarks}></textarea>}\n </div>\n\n </div>\n <div role=\"tabpanel\" className=\"tab-pane active\" id={\"mail-chat-info-\"+props.chatId}>\n\n {state.moptions.can_close && <div className=\"pb-2\">\n\n {state.close_mode == false && <a className=\"btn btn-outline-secondary btn-sm\" onClick={() => dispatch({type: 'update',value: {'close_mode': true}})}><i className=\"material-icons\">close</i>{t('mail.close')}</a>}\n\n {state.close_mode == true && <p className=\"fs14 mb-2\">{t('mail.sure_close')}</p>}\n\n {state.close_mode == true && <div className=\"btn-group\">\n <button type=\"button\" className=\"btn btn-danger btn-sm\" onClick={() => closeConversation()}>{t('mail.yes')}</button>\n <button type=\"button\" className=\"btn btn-success btn-sm\" onClick={() => dispatch({type: 'update',value: {'close_mode': false}})}>{t('mail.no')}</button>\n </div>}\n\n </div>}\n\n <div id={\"mail-external-details-\"+props.chatId}></div>\n\n {state.conv && <table className=\"table table-sm\">\n <tbody>\n <tr>\n <td colSpan=\"2\">\n\n <div className=\"row\">\n <div className=\"col-6\">\n <span className=\"action-image\" onClick={() => showModal({url: \"mailconv/mailhistory/\" + props.chatId})}><i className=\"material-icons\">history</i>{t('mail.interactions_history')}</span>\n </div>\n {state.moptions.can_write && <div className=\"col-6\">\n <span className=\"action-image\" onClick={() => showModal({url: \"mailconv/transfermail/\" + props.chatId})}><i className=\"material-icons\">supervisor_account</i>{t('mail.transfer_chat')}</span>\n </div>}\n {state.moptions.can_write && <div className=\"col-6\">\n <span className=\"action-image\" onClick={() => showModal({url: \"mailconv/merge/\" + props.chatId})}><i className=\"material-icons\">merge_type</i>{t('mail.merge_chat')}</span>\n </div>}\n <div className=\"col-6\">\n <a className=\"text-dark\" target=\"_blank\" href={WWW_DIR_JAVASCRIPT + \"mailconv/mailprintcovnersation/\" + props.chatId} ><i className=\"material-icons\">print</i>{t('mail.print')}</a>\n </div>\n {state.moptions.can_write && state.conv.can_delete && <div className=\"col-6\">\n <span className=\"action-image me-0\" onClick={(e) => deleteConversation()}><i className=\"material-icons\">delete</i>{t('mail.delete')}</span>\n </div>}\n </div>\n </td>\n </tr>\n <tr>\n <td>{t('mail.sender')}</td>\n <td>\n {state.conv.lang && state.moptions.lang_dir && <img src={state.moptions.lang_dir + '/' + state.conv.lang + '.png'}/>} {state.conv.from_name} <{state.conv.from_address}> <span className={\"action-image\" + (state.moptions.is_blocked ? \" text-danger fw-bold\" : \"\")} onClick={() => showModal({url: \"mailconv/blocksender/\" + props.chatId})}><span className=\"material-icons\">block</span>{state.moptions.is_blocked ? t('mail.is_blocked') : t('mail.block')}</span>\n </td>\n </tr>\n {(state.conv.phone || state.conv.phone_front) && <tr>\n <td>{t('mail.phone')}</td>\n <td>\n {state.conv.phone && <a href={\"tel:\"+state.conv.phone}><span className=\"material-icons\">dialpad</span>{state.conv.phone_front}</a>}\n {!state.conv.phone && <React.Fragment><span className=\"material-icons\">dialpad</span>{state.conv.phone_front}</React.Fragment>}\n </td>\n </tr>}\n <tr>\n <td colSpan=\"2\">\n\n {!state.conv.status && <span><i className=\"material-icons chat-pending\">mail_outline</i>{t('status.pending')}</span>}\n\n {(!state.conv.status || state.conv.status == 1) && state.conv.opened_at && <span><span className=\"ms-2 material-icons text-success\" title={t('status.opened_at')}>visibility</span>{state.conv.opened_at_front}</span>}\n\n {(state.conv.status == 2 || state.conv.status == 1) && <div className=\"input-group input-group-sm\">\n <span className=\"input-group-text\">\n {!state.conv.status && <i className=\"material-icons chat-pending me-0\">mail_outline</i>}\n {state.conv.status == 1 && <i className=\"material-icons chat-active me-0\">mail_outline</i>}\n {state.conv.status == 2 && <i className=\"material-icons chat-closed me-0\">mail_outline</i>}\n </span>\n <select disabled={state.moptions.is_archive} className=\"form-control form-control-sm\" value={state.conv.status} onChange={(e) => changeStatus(e)}>\n <option value=\"\">{t('status.pending')}</option>\n <option value=\"1\">{t('status.active')}</option>\n {state.conv.status == 2 && <option value=\"2\">{t('status.closed')}</option>}\n </select>\n {state.conv.opened_at && <span className=\"input-group-text\"><span className=\"ms-2 material-icons text-success\" title={t('status.opened_at')}>visibility</span>{state.conv.opened_at_front}</span>}\n </div>}\n\n\n </td>\n </tr>\n <tr>\n <td>{t('mail.department')}</td>\n <td>\n <span title={state.conv.dep_id}><span className=\"material-icons\">home</span>{state.conv.department_name}</span> <span className={state.moptions.can_change_mailbox ? \"action-image\" : \"\"} onClick={() => state.moptions.can_change_mailbox && showModal({url: \"mailconv/changemailbox/\" + props.chatId})} title={state.conv.mailbox_id}>\n <span className=\"material-icons\">email</span>\n {state.conv.mailbox_front.name} ({state.conv.mailbox_front.mail})\n </span>\n </td>\n </tr>\n\n\n\n <tr>\n <td>{t('mail.received')}</td>\n <td>{state.conv.udate_front}</td>\n </tr>\n <tr>\n <td>ID</td>\n <td>\n <button data-success={t('mail.copied')}\n className=\"btn ps-0 btn-xs btn-link py-0\"\n data-copy={window.location.origin + WWW_DIR_JAVASCRIPT + \"front/default/(mid)/\" + state.conv.id + \"/#!#chat-id-mc\"+state.conv.id}\n onClick={(e) => {lhinst.copyContent($(e.target))}} type=\"button\"><i className=\"material-icons\">link</i>{t('mail.copy_link')}\n </button>\n {state.conv.id}\n {state.conv.follow_up_id && <a target=\"_blank\" href={WWW_DIR_JAVASCRIPT + \"mailconv/view/\" + state.conv.follow_up_id}><span className=\"material-icons\">launch</span>{t('mail.follow_up')} {state.conv.follow_up_id}</a>}\n </td>\n </tr>\n {state.conv.accept_time && <tr>\n <td>{t('mail.last_accepted_at')}</td>\n <td>{state.conv.accept_time_front}{state.conv.wait_time_pending && <React.Fragment> | {t('mail.wait_time')} {state.conv.wait_time_pending}</React.Fragment>}</td>\n </tr>}\n {state.conv.response_time && <tr>\n <td>{t('mail.last_responded_at')}</td>\n <td>{state.conv.lr_time_front}{state.conv.wait_time_response && <React.Fragment> | {t('mail.wait_time')} {state.conv.wait_time_response}</React.Fragment>}</td>\n </tr>}\n {state.conv.cls_time && <tr>\n <td>{t('mail.closed_at')}</td>\n <td>{state.conv.cls_time_front}</td>\n </tr>}\n {state.conv.conv_duration && <tr>\n <td>{t('mail.conv_duration')}</td>\n <td>{state.conv.conv_duration_front}</td>\n </tr>}\n {state.conv.interaction_time && <tr>\n <td>{t('mail.last_interaction_time')}</td>\n <td>{state.conv.interaction_time_duration}</td>\n </tr>}\n {state.conv.priority && <tr>\n <td>{t('mail.priority')}</td>\n <td>{state.conv.priority}</td>\n </tr>}\n <tr>\n <td title={state.conv.user_id}>{t('mail.chat_owner')}</td>\n <td>{state.conv.plain_user_name}\n {state.op_watching.map((op_watching, index) => {\n return <span title={t('mail.op_watching')} className=\"ms-1 mail-watcher\"><span className=\"material-icons text-success\">visibility</span>{op_watching.name_official}</span>\n })}\n </td>\n </tr>\n </tbody>\n </table>}\n\n <div id={\"mail-external-below-\"+props.chatId}></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </React.Fragment>\n );\n}\n\nexport default MailChat"],"names":["MailChatQuote","_ref","children","_useState","useState","_useState2","_slicedToArray","expandBody","setExpandBody","React","className","onClick","MailChatAttatchement","_PureComponent","props","_this","_classCallCheck","_defineProperty","hightlight","files","uploading","uploadProgress","successfullUploaded","progress","fileInputRef","dropAreaRef","openFileDialog","bind","onFilesAddedUI","onDragOver","onDragLeave","onDrop","onPaste","onFilesAdded","uploadFiles","sendRequest","chooseFromUploaded","fileUploaded","_inherits","_createClass","key","value","_this2","t","this","ruleTest","RegExp","moptions","uploadErrors","forEach","file","test","type","name","push","size","length","alert","join","setState","prevProps","prevState","state","_uploadFiles","_asyncToGenerator","_regeneratorRuntime","_callee","promises","_this3","_context","prev","next","Promise","all","stop","apply","arguments","fileAttached","_this4","resolve","reject","req","XMLHttpRequest","upload","addEventListener","event","lengthComputable","_objectSpread","percentage","loaded","total","Math","round","response","_inst","onreadystatechange","readyState","JSON","parse","copy","formData","FormData","append","open","WWW_DIR_JAVASCRIPT","confLH","csrf_token","send","current","click","evt","target","array","fileListToArray","preventDefault","ondragover","ondragleave","ondrop","window","attatchReplyCurrent","e","items","clipboardData","i","getAsFile","dataTransfer","list","item","lhc","revealModal","ref","onChange","id","multiple","PureComponent","withTranslation","MailReplyRecipient","_useReducer","useReducer","recipients","concat","_toConsumableArray","recipient","filter","_","index","field","_useReducer2","dispatch","setReciepints","setRecipients","useEffect","_useTranslation","useTranslation","i18n","readOnly","style","fontSize","reply","map","mail","disabled","placeholder","email","cc","bcc","MailSendStatus","status","role","errors","general","content","raw_error","document","location","reload","rows","MailChatReply","replyMode","setReplyMode","_useState3","_useState4","forwardMode","setForwardMode","_useState5","_useState6","_useState7","_useState8","replyIntro","setReplyIntro","_useState9","_useState0","replySignature","setReplySignature","_useState1","_useState10","loadedReplyData","setLoadedReplyData","_useState11","_useState12","_useState13","_useState14","recipientsModified","setModifiedRecipients","_useState15","_useState16","replySendStatus","setReplySendStatus","_useState17","_useState18","sendInProgress","setSendInProgress","_useState19","_useState20","underReplySignature","setUnderReplySignature","_useState21","_useState22","isOwner","setIsOwner","_useState23","_useState24","isSelfReply","setIsSelfReply","attachedFiles","currentAttatchedFiles","useRef","sendReply","replyPayload","tinyMCE","get","message","getContent","axios","post","then","result","_typeof","data","fetchMessages","setConversationStatus","conv_status","error","request","console","log","config","intro","signature","signature_under","is_self_reply","user_id","verifyOwner","is_owner","fetchingMessages","response_type","noReplyRequired","hide_recipients","send_tried","mode","Editor","tinymceScriptSrc","tiny_mce_path","initialValue","body_front","skip_images","replace","image_skipped_text","onInit","focus","init","cache_suffix","cache_version_plugin","height","automatic_uploads","files_enabled","file_picker_types","images_upload_url","templates","paste_data_images","relative_urls","browser_spellcheck","paste_as_text","contextmenu","menubar","plugins","mce_plugins","toolbar_mode","toolbar","mce_toolbar","cancelReply","cancelForward","send_as_new","MailChatAttachement","title","removeAttatchedFile","MailChatImage","src","alt","_ref$download_policy","download_policy","width","_objectWithoutProperties","_excluded","imageError","setImageError","imageLoading","setImageLoading","canShowImage","setCanShowImage","imageSrc","setImageSrc","verificationMessage","setVerificationMessage","verificationAttempts","setVerificationAttempts","countdownSeconds","setCountdownSeconds","setProtectionType","protectionHtml","setProtectionHtml","isProtected","setIsProtected","imageRevealed","setImageRevealed","imageTitle","setImageTitle","buttonTitle","setButtonTitle","_useState25","_useState26","extractedFileId","setExtractedFileId","_useState27","_useState28","extractedConvId","setExtractedConvId","countdownInterval","_extractIdsFromUrl","url","fileId","convId","match","parseInt","extractIdsFromUrl","policyValue","startVerificationProcess","checkImageSensitivity","clearCountdown","clearInterval","handleImageClick","requestVerification","currentAttempts","undefined","attempts","newAttempts","verifyUrl","fetch","method","headers","json","verified","error_msg","protection_image","protection_html","btn_title","scheduleNextVerification","setInterval","handleImageLoad","handleImageError","tabIndex","cursor","dangerouslySetInnerHTML","__html","onLoad","onError","_extends","maxWidth","MailChatAttachment","description","download_url","_ref$is_image","is_image","verificationStatus","setVerificationStatus","canDownload","setCanDownload","finalDownloadUrl","setFinalDownloadUrl","isSensitiveImage","setIsSensitiveImage","baseClass","getButtonClass","getButtonTitle","getButtonIcon","MailChatMessage","totalMessages","addLabel","updateMessages","loadMessageBody","keyword","expandingBody","setExpandingBody","expandHeader","setExpandHeader","undelivered","plainBody","setPlainBody","expandDeliveryInformation","setExpandDeliveryInformation","getStyleObjectFromString","str","split","el","_el$split","_el$split2","property","formattedProperty","splitted","slice","word","toUpperCase","formatStringToCamelCase","trim","loadAndExpand","expandAction","alt_body","conversation_id","from_name","from_address","opened_at","opened_at_front","is_external","cls_time","conversation_id_old","subjects","label","color","can_write","udate_front","udate_ago","stopPropagation","href","can_forward","confirm","err","isAxiosError","stringify","unMerge","can_download","mail_links","link","icon","subject","to_data_front","cc_data_front","message_id","bcc_data_front","reply_to_data_front","from_host","accept_time_front","plain_user_name","wait_time","wait_time_pending","lr_time","response_time","wait_time_response","interaction_time","interaction_time_duration","cls_time_front","conv_duration_front","delivery_status_keyed","Diagnostic_Code","taken","domNode","attribs","Object","assign","domToReact","attachments","lastMessage","reducer","action","count","conv","foundIndex","messages","findIndex","x","fetching_messages","op_watching","watcher","ts","floor","Date","now","splice","element","history","msg","unshift","Error","defaults","common","tabsContainer","operators","saving_remarks","close_mode","old_message_id","last_message","remarks","last_message_id","lmsop","lgsync","expand_messages","updateLabels","loadMainData","chatId","customer_remarks","disableRemember","localStorage","achat_id_array","achat_id","getItem","indexOf","setItem","rememberChat","pending_sync","lhinst","removeDialogTabMail","$","fetchUntillUpdate","updated","setTimeout","showModal","params","timeout","clearTimeout","mailChatModified","mailLabelsModified","messageId","mailOpWatching","ee","addListener","removeListener","emitEvent","forgetChat","start_type","hidecallback","saving_customer_remarks","onKeyUp","defaultValue","can_close","hasUnrespondedMessages","getElementById","colSpan","can_delete","lang","lang_dir","is_blocked","phone","phone_front","is_archive","changeStatus","dep_id","department_name","can_change_mailbox","mailbox_id","mailbox_front","origin","copyContent","follow_up_id","accept_time","lr_time_front","conv_duration","priority","name_official"],"sourceRoot":""}
| ver. 1.4 |
Github
|
.
| PHP 8.2.30 | ���֧ߧ֧�ѧ�ڧ� ����ѧߧڧ��: 0.01 |
proxy
|
phpinfo
|
���ѧ����ۧܧ�