/
5.07d5fed071fa31a93f1e.js.map
1 lines (1 loc) · 44.8 KB
/
5.07d5fed071fa31a93f1e.js.map
1
{"version":3,"sources":["webpack://LHCReactAPPAdmin/./src/components/parts/GroupChatMessage.js","webpack://LHCReactAPPAdmin/./src/components/lib/useInterval.js","webpack://LHCReactAPPAdmin/./src/components/lib/groupChatSync.js","webpack://LHCReactAPPAdmin/./src/components/GroupChat.js"],"names":["React","memo","message","index","operatorChanged","parse","replace","domNode","attribs","cloneAttr","Object","assign","className","indexOf","onclick","name","domToReact","children","useInterval","groupChatSync","this","eventEmitter","EventEmitter","chatsSynchro","chatsSynchroMsg","timeoutSync","syncInProgress","fetchStatus","status","axios","post","WWW_DIR_JAVASCRIPT","then","result","groupedData","data","forEach","chatData","chat_id","parts","split","message_id","join","result_status","lgsync","chatId","emitEvent","clearTimeout","length","setInterval","sync","cb","push","parseInt","addListener","startSync","splice","removeListener","reducer","state","action","type","count","value","messages","lmsop","history","msg","unshift","Error","defaults","headers","common","confLH","csrf_token","GroupChat","props","messageElement","useRef","messagesElement","tabsContainer","searchOperatorElement","useReducer","operators","supervistors","operators_invite","chat","has_more_messages","old_message_id","last_message","error","last_message_id","dispatch","startChatWithOperator","operator","ee","user_id","setUnreadSupportChat","whoisHot","tab","document","getElementById","hotSet","classList","contains","querySelector","remove","id","unread","playSoundMessage","lhinst","playNewMessageSound","useEffect","current","scrollTop","scrollHeight","chatPublicId","searchTimeout","searchOpeartors","setTimeout","get","escape","cancelSearch","chatSynced","e","content","msop","valueUpdate","subTabClicked","tabClicked","div","createElement","innerHTML","prepend","firstChild","addEventListener","localStorage","achat_id_array","achat_id","getItem","setItem","rememberChat","subTab","paramsStart","getAttribute","default_message","focus","String","addSubscriber","container","bsn","require","tabs","querySelectorAll","Array","prototype","call","element","Tab","supervisors","removeDialogTabGroup","$","response","elm","forceFocus","tabHot","offsetHeight","add","click","prefillMessage","forgetChat","removeSubscriber","inviteOperator","setFetchStatus","invited","cancelInvite","useTranslation","t","i18n","Fragment","role","map","userId","title","onClick","n_off_full","jtime","hide_online","last_activity_ago","has_messages","ref","key","placeholder","onKeyDown","doSearch","keyCode","preventDefault","stopPropagation","addMessage","rows","href","aria-controls","data-toggle","onKeyUp","aria-label","disabled","name_official","member","nick"],"mappings":"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","file":"5.07d5fed071fa31a93f1e.js","sourcesContent":["import parse, { domToReact } from 'html-react-parser';\nimport React from \"react\";\n\nconst GroupChatMessage = ({message, index}) => {\n\n var operatorChanged = false;\n\n return parse(message['msg'], {\n\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\n // Animate only if it's not first sync call\n if (domNode.attribs.className.indexOf('message-row') !== -1 && index > 0) {\n domNode.attribs.className += ' fade-in-fast';\n if (message['msop'] > 0 && message['msop'] != message['lmsop'] && operatorChanged == false) {\n domNode.attribs.className += ' operator-changes';\n operatorChanged = true;\n }\n }\n\n delete domNode.attribs.class;\n }\n\n if (domNode.attribs.onclick) {\n delete domNode.attribs.onclick;\n }\n\n if (domNode.name && domNode.name === 'img') {\n return <img {...domNode.attribs} />\n } else if (domNode.name && domNode.name === 'a') {\n if (cloneAttr.onclick) {\n return <a {...domNode.attribs} >{domToReact(domNode.children)}</a>\n }\n }\n }\n }\n });\n}\n\nexport default React.memo(GroupChatMessage);","import { useEffect, useRef } from \"react\";\n\nfunction useInterval(callback, delay) {\n const savedCallback = useRef();\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport default useInterval;","import axios from \"axios\";\n\nclass _groupChatSync {\n\n constructor() {\n this.eventEmitter = new EventEmitter();\n this.chatsSynchro = [];\n this.chatsSynchroMsg = [];\n this.timeoutSync = null;\n this.syncInProgress = false;\n this.fetchStatus = false;\n }\n\n setFetchStatus(status) {\n this.fetchStatus = status;\n }\n\n sync() {\n if (this.syncInProgress == true) {return;}\n\n this.syncInProgress = true;\n\n axios.post(WWW_DIR_JAVASCRIPT + \"groupchat/sync\" + (this.fetchStatus == true ? '/(opt)/status' : ''), this.chatsSynchroMsg).then(result => {\n\n this.fetchStatus = false;\n\n let groupedData = [];\n\n result.data.result.forEach((chatData) => {\n if (!groupedData[chatData.chat_id]) {\n groupedData[chatData.chat_id] = {};\n }\n\n groupedData[chatData.chat_id][\"msg\"] = chatData;\n\n let index = this.chatsSynchro.indexOf(chatData.chat_id);\n let parts = this.chatsSynchroMsg[index].split(\",\");\n parts[1] = chatData.message_id;\n\n this.chatsSynchroMsg[index] = parts.join(\",\");\n });\n\n result.data.result_status.forEach((chatData) => {\n if (!groupedData[chatData.chat_id]) {\n groupedData[chatData.chat_id] = {};\n }\n\n groupedData[chatData.chat_id][\"status\"] = chatData;\n\n let index = this.chatsSynchro.indexOf(chatData.chat_id);\n let parts = this.chatsSynchroMsg[index].split(\",\");\n parts[2] = chatData.lgsync;\n\n this.chatsSynchroMsg[index] = parts.join(\",\");\n })\n\n groupedData.forEach((chatData, chatId) => {\n this.eventEmitter.emitEvent('gchat_'+chatId, [chatData]);\n });\n\n this.syncInProgress = false;\n });\n }\n\n startSync() {\n clearTimeout(this.timeoutSync);\n if (this.chatsSynchro.length > 0) {\n this.timeoutSync = setInterval(() => { this.sync(); }, 2500);\n }\n }\n\n addSubscriber(chatId, cb) {\n this.chatsSynchro.push(parseInt(chatId));\n this.chatsSynchroMsg.push(chatId+\",0,0\");\n this.eventEmitter.addListener('gchat_'+chatId, cb);\n this.startSync();\n }\n\n removeSubscriber(chatId, cb) {\n var index = this.chatsSynchro.indexOf(parseInt(chatId));\n if (index !== -1) {\n this.chatsSynchro.splice(index, 1);\n this.chatsSynchroMsg.splice(index, 1);\n this.eventEmitter.removeListener('gchat_'+chatId, cb);\n this.startSync();\n }\n }\n};\n\nconst groupChatSync = new _groupChatSync();\nexport { groupChatSync };","//https://medium.com/@MilkMan/read-this-before-refactoring-your-big-react-class-components-to-hooks-515437e9d96f\n//https://reactjs.org/docs/hooks-reference.html#usereducer\n\nimport React, { useEffect, useState, useReducer, useRef } from \"react\";\nimport axios from \"axios\";\nimport GroupChatMessage from \"./parts/GroupChatMessage\";\nimport useInterval from \"./lib/useInterval\";\nimport {groupChatSync} from \"./lib/groupChatSync\";\nimport {useTranslation} from 'react-i18next';\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_messages': {\n\n // Set last operator from previous state\n action.messages['lmsop'] = state.lmsop || action.value.lmsop;\n\n // Update state\n state = { ...state, ...action.value };\n\n // Update message\n state.messages.push(action.messages);\n\n return state;\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 GroupChat = props => {\n\n const messageElement = useRef(null);\n const messagesElement = useRef(null);\n const tabsContainer = useRef(null);\n const searchOperatorElement = useRef(null);\n\n const [state, dispatch] = useReducer(reducer, {\n messages: [],\n operators: [],\n supervistors: [],\n operators_invite: [],\n chat: {},\n has_more_messages: false,\n old_message_id: 0,\n last_message: '',\n error: '',\n last_message_id: 0,\n lmsop: 0,\n lgsync: 0\n });\n\n const loadMainData = () => {\n return axios.post(WWW_DIR_JAVASCRIPT + \"groupchat/\" + (props.chatPublicId ? 'loadpublichat' : 'loadgroupchat') + \"/\" + (props.chatPublicId || props.chatId));\n }\n\n const loadPrevious = () => {\n axios.get(WWW_DIR_JAVASCRIPT + \"groupchat/loadpreviousmessages/\" + props.chatId+'/'+state.old_message_id).then(result => {\n dispatch({\n type: 'update_history',\n value: {\n 'has_more_messages' : result.data.has_messages,\n 'old_message_id' : result.data.message_id\n },\n history: {\n \"msg\" : result.data.result,\n \"msop\" : result.data.msop,\n \"lmsop\" : result.data.lmsop\n }\n });\n });\n }\n\n const startChatWithOperator = (operator) => {\n ee.emitEvent('angularStartChatOperatorPublic',[operator.user_id]);\n }\n\n const setUnreadSupportChat = (chat_id, length) => {\n var tab = document.getElementById('chat-tab-link-'+chat_id);\n var whoisHot,hotSet = false;\n if (tab !== null && length > 1 && !tab.classList.contains('active') && (whoisHot = tab.querySelector('.whatshot')) !== null) {\n whoisHot.classList.remove(\"d-none\");\n ee.emitEvent('supportUnreadChat', [{id:chat_id,unread:true}]);\n playSoundMessage();\n hotSet = true;\n }\n\n if (hotSet == false) {\n tab = document.getElementById('private-chat-tab-link-'+chat_id);\n if (tab !== null && length > 1 && !tab.classList.contains('active') && (whoisHot = tab.querySelector('.whatshot')) !== null) {\n whoisHot.classList.remove(\"d-none\");\n playSoundMessage();\n }\n }\n }\n\n const playSoundMessage = () => {\n lhinst.playNewMessageSound();\n }\n\n useEffect(() => {\n messagesElement.current.scrollTop = messagesElement.current.scrollHeight;\n\n if (!props.chatPublicId) {\n var tab = document.getElementById('chat-tab-link-gc'+props.chatId);\n if (tab && state.messages.length > 1 && !tab.classList.contains('active')) {\n tab.querySelector('.whatshot').classList.remove(\"d-none\");\n playSoundMessage();\n }\n } else {\n setUnreadSupportChat(props.chatPublicId, state.messages.length);\n }\n\n },[state.messages.length]);\n\n const rememberChat = (chatId) => {\n if (localStorage) {\n try {\n var achat_id_array = [];\n var achat_id = localStorage.getItem('gachat_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('gachat_id',achat_id_array.join(','));\n }\n\n } catch(e) {\n\n }\n }\n }\n\n const leaveGroup = () => {\n axios.get(WWW_DIR_JAVASCRIPT + \"groupchat/leave/\" + props.chatId).then(result => {\n lhinst.removeDialogTabGroup('gc'+props.chatId,$('#tabs'),true)\n });\n }\n\n var searchTimeout = null\n const searchOpeartors = () => {\n clearTimeout(searchTimeout);\n searchTimeout = setTimeout(() => {\n axios.get(WWW_DIR_JAVASCRIPT + \"groupchat/searchoperator/\"+props.chatId+\"?\"+(props.chatPublicId ? \"id=\"+props.chatPublicId+\"&\" : '')+\"q=\" + escape(searchOperatorElement.current.value)).then(result => {\n dispatch({\n type: 'update',\n value: {\n \"operators_invite\" : result.data\n }\n });\n });\n },200);\n }\n\n const cancelSearch = () => {\n dispatch({\n type: 'update',\n value: {\n \"operators_invite\" : []\n }\n });\n }\n\n const forgetChat = (chatId) => {\n if (localStorage) {\n try {\n var achat_id_array = [];\n var achat_id = localStorage.getItem('gachat_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('gachat_id',achat_id_array.join(','));\n } catch(e) {\n\n }\n }\n }\n\n useEffect(() => {\n\n const chatSynced = (e) => {\n if (e.msg) {\n dispatch({\n type: 'update_messages',\n messages : {\n 'msg':e.msg.content,\n 'msop': e.msg.msop,\n },\n value: {\n 'last_message_id' : e.msg.message_id,\n 'lmsop': e.msg.lmsop\n }\n });\n }\n\n if (e.status) {\n let valueUpdate = {\n 'operators': e.status.operators,\n 'lgsync': e.status.lgsync\n };\n\n if (e.status.old_message_id) {\n valueUpdate['has_more_messages'] = e.status.has_more_messages;\n valueUpdate['old_message_id'] = e.status.old_message_id;\n }\n\n dispatch({\n type: 'update',\n value: valueUpdate\n });\n }\n }\n\n const subTabClicked = (e) => {\n tabClicked(props.chatPublicId, null, true);\n }\n\n loadMainData().then(result => {\n\n if (!props.chatPublicId) {\n rememberChat(props.chatId);\n } else {\n var div = document.createElement('div');\n div.innerHTML = \"<i class=\\\"whatshot blink-ani d-none text-warning material-icons\\\">whatshot</i>\";\n document.getElementById('chat-tab-link-'+props.chatPublicId).prepend(div.firstChild);\n document.getElementById('private-chat-tab-link-'+props.chatPublicId).addEventListener('click',subTabClicked);\n }\n\n var subTab = document.getElementById('private-chat-tab-link-'+props.chatPublicId);\n\n if ((props.paramsStart && props.paramsStart.unread) || (subTab !== null && subTab.getAttribute('data-unread') == 'true')) {\n setUnreadSupportChat(props.chatPublicId,2);\n }\n\n if (props.paramsStart && props.paramsStart.default_message && messageElement.current !== null) {\n messageElement.current.focus();\n messageElement.current.value = '[quote]'+props.paramsStart.default_message+'[/quote]'+\"\\n\";\n }\n\n props.chatId = String(result.data.chat.id);\n groupChatSync.addSubscriber(props.chatId, chatSynced);\n groupChatSync.sync();\n\n if (!props.chatPublicId){\n var container = tabsContainer.current;\n var bsn = require(\"bootstrap.native/dist/bootstrap-native-v4\");\n var tabs = container.querySelectorAll('[data-toggle=\"tab\"]');\n\n if (tabs.length > 0) {\n Array.prototype.forEach.call(tabs, function(element){ new bsn.Tab( element) });\n }\n }\n\n dispatch({\n type: 'update',\n value: {\n 'chat': result.data.chat,\n 'supervisors': result.data.supervisors || []\n }\n });\n\n }).catch((error) => {\n !props.chatPublicId && lhinst.removeDialogTabGroup('gc'+props.chatId,$('#tabs'),true);\n if (error.response && error.response.data && error.response.data.error) {\n dispatch({\n type: 'update',\n value: {\n \"error\" : error.response.data.error\n }\n });\n }\n })\n\n const tabClicked = (e, elm, forceFocus) => {\n if ((props.chatPublicId && e == props.chatPublicId) || (!props.chatPublicId && e == props.chatId)) {\n\n if (messagesElement.current !== null){\n setTimeout(() => {\n if (messagesElement.current !== null){\n (!props.chatPublicId || forceFocus) && messageElement.current.focus();\n if (messagesElement.current.scrollHeight - (messagesElement.current.scrollTop + messagesElement.current.offsetHeight) < (messagesElement.current.offsetHeight - 50)) {\n messagesElement.current.scrollTop = messagesElement.current.scrollHeight;\n }\n }\n },2);\n }\n\n var tab = document.getElementById(!props.chatPublicId ? 'chat-tab-link-gc'+props.chatId : 'chat-tab-link-'+props.chatPublicId);\n\n if (tab !== null) {\n var tabHot = tab.querySelector('.whatshot');\n if (tabHot !== null && !tabHot.classList.contains(\"d-none\")) {\n tabHot.classList.add(\"d-none\");\n // Activate private chat subtab if it was pending\n if (props.chatPublicId) {\n document.getElementById('private-chat-tab-link-'+props.chatPublicId).click();\n }\n }\n }\n\n if (props.chatPublicId){\n var tab = document.getElementById('private-chat-tab-link-'+props.chatPublicId);\n if (tab !== null) {\n var tabHot = tab.querySelector('.whatshot');\n if (tabHot !== null && !tabHot.classList.contains(\"d-none\")) {\n tabHot.classList.add(\"d-none\");\n }\n }\n }\n }\n }\n\n const prefillMessage = (chatId, message) => {\n if (props.chatPublicId && chatId == props.chatPublicId) {\n if (messageElement && messageElement.current) {\n messageElement.current.value = '[quote]'+message+'[/quote]'+\"\\n\";\n messageElement.current.focus();\n }\n }\n }\n\n if (props.chatPublicId){\n ee.addListener('groupChatPrefillMessage',prefillMessage);\n }\n\n ee.addListener((!props.chatPublicId ? 'groupChatTabClicked' : 'chatTabClicked'),tabClicked)\n\n !props.chatPublicId && messageElement.current.focus();\n\n return function cleanup() {\n\n forgetChat(props.chatId)\n\n if (!props.chatPublicId) {\n ee.removeListener('groupChatTabClicked',tabClicked);\n } else {\n ee.removeListener('chatTabClicked',tabClicked);\n ee.removeListener('prefillMessage',prefillMessage);\n }\n\n groupChatSync.removeSubscriber(props.chatId, chatSynced);\n };\n },[]);\n\n const addMessage = (e, doSearch) => {\n if (e.keyCode == 13) {\n\n axios.post(WWW_DIR_JAVASCRIPT + \"groupchat/addmessage/\" + props.chatId,{msg: messageElement.current.value}).then(result => {\n if (result.data.result.indexOf('status') !== -1) {\n groupChatSync.setFetchStatus(true);\n }\n groupChatSync.sync();\n });\n\n messageElement.current.value = '';\n\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n }\n\n const inviteOperator = (e) => {\n axios.get(WWW_DIR_JAVASCRIPT + \"groupchat/inviteoperator/\" + props.chatId + \"/\" + e.id).then(result => {\n groupChatSync.setFetchStatus(true);\n groupChatSync.sync();\n e.invited = true;\n dispatch({\n type: 'update',\n value: {\n \"operators_invite\" : state.operators_invite\n }\n });\n });\n }\n\n const cancelInvite = (e) => {\n axios.get(WWW_DIR_JAVASCRIPT + \"groupchat/cancelinvite/\" + props.chatId + \"/\" + e.id).then(result => {\n groupChatSync.setFetchStatus(true);\n groupChatSync.sync();\n e.invited = false;\n dispatch({\n type: 'update',\n value: {\n \"operators_invite\" : state.operators_invite\n }\n });\n });\n }\n\n const { t, i18n } = useTranslation('group_chat');\n\n if (state.error != '') {\n return (<React.Fragment>\n <div className=\"row\">\n <div className=\"col-12\">\n <div className=\"alert alert-info\" role=\"alert\">\n {state.error}\n </div>\n </div>\n </div>\n </React.Fragment>)\n }\n\n return (\n\n\n\n <React.Fragment>\n <div className={\"row group-chat-\"+(props.chatPublicId ? \"public\" : \"private\")}>\n\n {props.chatPublicId && state.chat.type == 2 && <div className=\"col-12 pb-1\">\n\n {state.operators.map((operator, index) => (\n <button className=\"btn btn-sm fs12 btn-outline-secondary mb-1 mr-1\">{props.userId != operator.user_id && <i title=\"Start chat with an operator directly\" onClick={(e) => startChatWithOperator(operator)} className=\"material-icons action-image\">chat</i>} {state.chat.user_id == operator.user_id && <i title=\"Group owner\" className=\"material-icons\">account_balance</i>} {operator.n_off_full}\n {!operator.jtime && <span className=\"ml-1 badge badge-info fs11\">{t('operator.pending_join')}</span>} <i className=\"material-icons\">{operator.hide_online ? 'flash_off' : 'flash_on'}</i>{operator.last_activity_ago}</button>\n ))}\n\n </div>}\n\n <div className={(props.chatPublicId ? \"col-12\" : \"col-7\")}>\n <div className=\"message-block\">\n\n {state.has_more_messages && <a className=\"load-prev-btn\" title=\"Load more...\" onClick={(e) => loadPrevious()}><i className=\"material-icons\"></i></a>}\n\n <div className=\"msgBlock msgBlock-admin msgBlock-group-admin\" ref={messagesElement}>\n {state.messages.map((message, index) => (\n <GroupChatMessage key={'msg_' + props.chatId + '_' + index} index={index} message={message} />\n ))}\n </div>\n </div>\n <div className=\"message-container-admin mt-2\">\n <textarea ref={messageElement} placeholder={t('message.enter_message')} onKeyDown={(e) => addMessage(e)} className=\"form-control form-control-sm form-group\" rows=\"2\"></textarea>\n </div>\n </div>\n {!props.chatPublicId && <div className=\"chat-main-right-column 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={\"#group-chat-\"+props.chatId} aria-controls={\"#group-chat-\"+props.chatId} role=\"tab\" data-toggle=\"tab\" title=\"Operators\"><i className=\"material-icons mr-0\">face</i></a></li>\n <li className=\"nav-item\" role=\"presentation\"><a className=\"nav-link \" href={\"#group-chat-info-\"+props.chatId} aria-controls={\"#group-chat-info-\"+props.chatId} title=\"Information\" role=\"tab\" data-toggle=\"tab\"><i className=\"material-icons mr-0\">info_outline</i></a></li>\n </ul>\n <div className=\"tab-content\">\n <div role=\"tabpanel\" className=\"tab-pane active\" id={\"group-chat-\"+props.chatId}>\n\n <ul className=\"list-group list-group-flush border-0 mw-100 mx275\">\n {state.operators.map((operator, index) => (\n <li className=\"list-group-item pl-1 py-1\">{props.userId != operator.user_id && <i title=\"Start chat with an operator directly\" onClick={(e) => startChatWithOperator(operator)} className=\"material-icons action-image\">chat</i>} {state.chat.user_id == operator.user_id && <i title=\"Group owner\" className=\"material-icons\">account_balance</i>} {operator.n_off_full}<span className=\"float-right fs11\">\n {!operator.jtime && <span className=\"badge badge-info fs11\">{t('operator.pending_join')}</span>} {operator.last_activity_ago} <i className=\"material-icons\">{operator.hide_online ? 'flash_off' : 'flash_on'}</i>\n </span>\n </li>\n ))}\n </ul>\n </div>\n\n <div role=\"tabpanel\" className=\"tab-pane\" id={\"group-chat-info-\"+props.chatId}>\n\n {state.chat.type == 1 && <div>\n <div className=\"form-row\">\n <div className=\"col-9\">\n <input ref={searchOperatorElement} onKeyUp={searchOpeartors} type=\"text\" placeholder={t('operator.search_tip')} className=\"form-control form-control-sm\" />\n </div>\n <div className=\"col-3\">\n <div className=\"btn-group w-100\" role=\"group\" aria-label=\"Basic example\">\n <button onClick={searchOpeartors} className=\"btn d-block btn-secondary btn-sm\"><span className=\"material-icons\">search</span></button>\n <button disabled={state.operators_invite.length == 0} onClick={cancelSearch} className=\"btn d-block btn-secondary btn-sm\"><span className=\"material-icons\">delete</span></button>\n </div>\n </div>\n </div>\n\n <ul className=\"m-0 p-0 mt-2 mx275\">\n {state.operators_invite.map((operator, index) => (\n <li className=\"list-group-item p-2 fs13\" title={operator.id}>\n {operator.name_official}\n {!operator.member && !operator.invited && <button className=\"float-right btn btn-xs btn-secondary\" onClick={(e) => inviteOperator(operator)}>{t('operator.invite')}</button>}\n {!operator.member && operator.invited && <button className=\"float-right btn btn-xs btn-warning\" onClick={(e) => cancelInvite(operator)}>{t('operator.cancel_invite')}</button>}\n {operator.member && <button disabled=\"disabled\" className=\"float-right btn btn-xs btn-success\">{t('operator.already_member')}</button>}\n </li>\n ))}\n </ul>\n <hr/>\n </div>}\n\n <button className=\"btn btn-xs btn-danger\" title={t('operator.leave_group_tip')} onClick={(e) => leaveGroup()}>{t('operator.leave_group')}</button>\n </div>\n\n </div>\n </div>\n </div>}\n\n {props.chatPublicId && <div className=\"col-12\">\n\n <div className=\"pb-1\">\n {props.chatPublicId && state.chat.type == 2 && state.supervisors.length > 0 && state.supervisors.map((operator, index) => (\n <React.Fragment>\n {!operator.member && !operator.invited && <button className=\"btn btn-xs btn-secondary\" onClick={(e) => inviteOperator(operator)}>{operator.nick} | {t('operator.invite')}</button>}\n </React.Fragment>\n ))}\n </div>\n\n <div className=\"row\">\n <div className=\"col-9\">\n <input ref={searchOperatorElement} onKeyUp={searchOpeartors} type=\"text\" placeholder={t('operator.search_tip')} className=\"form-control form-control-sm\" />\n </div>\n <div className=\"col-3\">\n <div className=\"btn-group w-100\" role=\"group\" aria-label=\"Basic example\">\n <button onClick={searchOpeartors} className=\"btn d-block btn-secondary btn-sm\"><span className=\"material-icons\">search</span></button>\n <button disabled={state.operators_invite.length == 0} onClick={cancelSearch} className=\"btn d-block btn-secondary btn-sm\"><span className=\"material-icons\">delete</span></button>\n </div>\n </div>\n </div>\n\n <ul className=\"m-0 p-0 mt-2 mx275\">\n {state.operators_invite.map((operator, index) => (\n <li className=\"list-group-item p-2 fs13\" title={operator.id}>\n {operator.name_official}\n {!operator.member && !operator.invited && <button className=\"float-right btn btn-xs btn-secondary\" onClick={(e) => inviteOperator(operator)}>{t('operator.invite')}</button>}\n {!operator.member && operator.invited && <button className=\"float-right btn btn-xs btn-warning\" onClick={(e) => cancelInvite(operator)}>{t('operator.cancel_invite')}</button>}\n {operator.member && <button disabled=\"disabled\" className=\"float-right btn btn-xs btn-success\">{t('operator.already_member')}</button>}\n </li>\n ))}\n </ul>\n\n </div>}\n\n </div>\n </React.Fragment>\n );\n}\n\nexport default GroupChat"],"sourceRoot":""}