/
5.212dc9dcae73358ed7d1.js.map
1 lines (1 loc) · 44.7 KB
/
5.212dc9dcae73358ed7d1.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","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.212dc9dcae73358ed7d1.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\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":""}