{"version":3,"sources":["helpers/Time.js","i18n.js","helpers/Icon.js","helpers/Routers.js","helpers/HttpClient.js","helpers/Auth.js","helpers/Common.js","helpers/SocketIO.js","helpers/RocketChat.js","redux/actions/type.js","helpers/RealTimeAPI.js","route/Header.js","views/Lobby/Header.view.js","views/Lobby/Announcement.view.js","redux/actions/actions.js","views/Lobby/EditAnnouncement.view.js","views/Chat/ModalEditParticipant.js","views/Chat/Header.js","views/Chat/ModalUpload.js","views/Chat/Chat.view.js","views/Lobby/Lobby.view.js","views/ChooseDevice/ChooseDevice.view.js","views/Participant/AnnouncementHead.js","views/Participant/AnnouncementMsg.js","views/Participant/Header.js","views/Participant/AnonymousRocket.js","views/Participant/ModalInformation.js","views/Participant/IframChat.js","views/Participant/Wating.js","views/Participant/AuthRocketJWT.js","views/index.js","views/Participant/Participant.view.js","components/Lobby/Lobby.component.js","components/ChooseDevice/ChooseDevice.component.js","route/routeView.js","route/LeftBar.js","components/Participant/Participant.component.js","helpers/PopupStatus.js","route/index.js","serviceWorker.js","redux/reducers/keycloak.js","redux/reducers/language.js","redux/reducers/backgroundRunning.js","redux/reducers/contextInfo.js","redux/reducers/lobby.js","redux/reducers/popup.js","redux/reducers/index.js","redux/sagas/startup.js","redux/sagas/authentication.js","redux/sagas/detectMobile.js","redux/sagas/lobby.js","redux/sagas/index.js","shared/PopupInfo.js","index.js"],"names":["resources","en","translation","th","cn","i18n","use","detector","backend","reactI18nextModule","init","lng","fallbackLng","interpolation","escapeValue","react","wait","IconHelper","style","fill","width","height","viewBox","onClick","d","id","mask-type","maskUnits","x","y","cx","cy","r","mask","xmlns","fillRule","clipRule","className","margin","display","shapeRendering","xmlnsXlink","preserveAspectRatio","transform","rx","ry","attributeName","values","keyTimes","dur","begin","repeatCount","stroke","strokeWidth","strokeLinecap","strokeLinejoin","routersHelper","params","useParams","location","useLocation","history","useHistory","match","useRouteMatch","useMemo","push","replace","pathname","query","queryString","parse","search","setHttpErrObj","errFunc","message","stacktrace","date","Date","getCookie","JSON","name","email","toISOString","window","_env_","APP_NAME","getHttpVtoken","keycloak","url","headers","fetch","method","then","response","status","destroyUserInfo","logout","errorObj","setCookie","stringify","period","duration","href","json","responseJson","catch","err","console","error","deleteCookie","checkKeycloakToken","Promise","resolve","reject","updateToken","updateKeycloakToken","refreshed","a","genVRoomToken","subscriberServiceBaseURL","Authorization","idToken","token","isEmpty","localStorage","setItem","setContextInfo","getContextInfo","contextInfo","vroomToken","decode","user","context","avatar","p","pkgcode","login","language","lang","alert","createLoginUrl","logoutByUser","removeItem","value","time","hostName","host","split","myDate","setMinutes","getMinutes","setHours","getHours","setMonth","getMonth","setFullYear","getFullYear","document","cookie","parts","length","pop","shift","charectorLength","input","isUndefined","this_length","toString","sub","substr","log","socket","authen","getItem","authenRocketChat","vtoken","has","setChatID","setTimeout","auth","logInRealtimeAPI","chatUserToken","getToken","rocketAuth","jwt","rocketChatAPIUrl","ok","APP_ENV","Error","vRoomUrl","setRocketStore","rocketObj","chatUserID","key","encodeURIComponent","_","isNull","chatUserName","undefined","setAuthLobby","dispatch","newVtoken","roomName","reservationId","chatRoomId","socketIOClient","lobbyAPIUrl","chatUserId","chatRoomName","intent","decodeURIComponent","on","data","intentionStatus","tempVtoken","type","payload","isShow","textBody","action","textHeader","connecting","setOverridename","announcement","setAnonymousLobby","vToken","anonymousID","anonymousName","createRocketChat","createObj","body","obj","funcName","overrideName","rocketChatInfo","anonymousInfo","success","destroyRocketChatInfo","rocketChatIFrameUrl","initiateSocket","chatID","code","emit","lobbyLists","textButton","mymeeting","ConnectChat","Reject","userID","connectApproveUser","updateAnnouncement","text","realtimeAPI","RealTimeAPI","connectToServer","connectRealtimeAPI","keepAlive","subscribe","loginWithAuthToken","authResult","msg","MessageMethod","sendMessage","connect","state","getKeycloak","getAuthenticated","authenticated","switchLanguage","translate","t","useState","setKeycloak","setAuthenticated","setContext","IconTH","IconEN","IconCN","indexOf","overflow","useEffect","changeLanguage","initialLanguage","top","cursor","leftMenu","getElementsByClassName","bgBlack","left","innerHeight","aria-hidden","focusable","exact","to","activeClassName","src","parseInt","isShowPlanPrice","subscriptionPlanspricing","SUPPORT_WEB","isShowContactPage","bind","filter","IconBack","back","setIsEdit","IconEdit","useSelector","lobby","marginRight","span","color","showSpinner","spinner","hideSpinner","checkTokenExpire","TextArea","Input","useDispatch","announcementInput","setAnnouncementInput","onUpdateAnnouncement","placeholder","rows","onChange","target","visible","title","setEditParticipant","userInfo","handleChatApi","Form","useForm","form","setName","nameError","setnameError","loading","setLoading","setFieldsValue","handleCancel","onCancel","footer","layout","Item","label","maxLength","onKeyPress","event","keyCode","which","e","IconEditParticipant","IconUserChecked","IconInside","IconCloseGray","editParticipant","xl","lg","md","alignItems","isMember","u","marginLeft","position","styles","img","show","dataFile","preview","onFinish","description","setDescription","filename","setFilename","handleChange","file","originFileObj","destroyOnClose","htmlType","get","HistoryMsg","onInputKeydown","setMsg","unreadNotLoaded","fileList","showModal","setShowModal","onLayoutHeight","addEventListener","updateScroll","element","scrollTop","scrollHeight","navCol","chatboxCol","inputAreaChat","nav","offsetHeight","getAvatar","item","realtimeRocket","_id","xxl","sm","Array","isArray","map","k","shape","backgroundColor","username","moment","_updatedAt","$date","format","attachments","v","i","mod","title_link","download","CloudDownloadOutlined","image_url","marginTop","bordered","inputFile","imgArr","imgObj","Object","assign","image_dimensions","image_preview","image_size","image_type","title_link_download","objFile","inputObj","getTime","rid","usersMe","TabPane","Tabs","isEdit","setUserInfo","setHistoryMsg","logged","setLogged","selected","setSelected","callMethod","loaderCssCol","lobbyHeaderCol","lobbyTab","lobbyTabUser","lobbyAnnouncement","chatbox","lobbyHeader","lobbyAnnouncementHeight","chatting","roomList","minHeight","join","noti","chatRoomID","setActiveId","removeNoti","hisMesg","result","messages","setcID","userId","userid","newName","ch","reverse","subscribeMsg","warn","SyncUser","users","usersMeTmp","forEach","lastedChatAt","SortMe","lastDated","userReturn","orderBy","getSubscription","m","fields","args","showNoti","prev","roomid","onConnectApproveUser","handleChangeName","res","justify","defaultActiveKey","tab","index","shiftKey","preventDefault","ChooseDevicePage","Text","Typography","align","xs","strong","isIOS","isAndroid","origin","announcementMsg","setAnnouncementMsg","IconArrowBack","AnonymousRocket","anonymouseInfo","isReady","reqObj","members","group","lobbyRoomID","initConn","setshowModal","router","setIsReady","handleOk","nameInput","getFieldValue","handleSubmit","submit","uuid","onOk","closeIcon","background","borderRadius","rules","required","charCode","allowClear","Option","isConnect","roomID","IframChat","antAlertMessage","participantBody","antAlertMessageHeight","chatHeight","heightChat","innerWidth","contentHeight","participantChat","dangerouslySetInnerHTML","__html","IconSpinner","AuthRucket","JwtDecode","memberName","authRocketChat","initConnect","Views","Lobby","Participant","screenWidth","setScreenWidth","activeTabPane","setActiveTabPane","activeTime","setActiveTime","handleIframeChat","setProperty","currrentTime","setInterval","getActiveTime","participantAlert","participantWatingBox","onTabClick","activeKey","disabled","Chat","newLobbyLists","RouteView","updateLocale","isMobile","path","component","ChooseDevice","IconUser","IconClose","IconMenuSupport","IconContact","IconMenuPrice","IconMenuMeeting","IconMenuMyRecords","errored","imgUrl","setImgUrl","leftMenuClose","onError","process","activeclassname","zIndex","setReservationId","pushState","reservation","initParticipant","toLowerCase","popupStatus","backgroundRunning","IconStatusErr","header","closable","getIcon","setRedText","Router","page","ReactGA","initialize","GoogleAnalyticsKey","pageview","spinning","routeView","Boolean","hostname","initialState","authentication","initState","popup","rootReducer","combineReducers","setLocale","setAnonymouseInfo","startup","put","info","call","pathFromState","initKeycloak","bypassLogout","connectSocket","languageSelector","onKeycloak","Keycloak","clientId","clientid","realm","keycloak_url","onLoad","checkLoginIframe","silentCheckSsoRedirectUri","refreshToken","select","takeLatest","detectMobile","openUrlVroomMobile","saveAnonymousInfo","saveVroomToken","rootSata","fork","VConsole","setOption","maxLogNumber","sagaMiddleware","createSagaMiddleware","composeEnhancer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","applyMiddleware","run","rootSaga","AppWithRouter","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.125f04cf.chunk.js","sourcesContent":["import moment from 'moment';\nimport { isEmpty } from 'lodash';\n\nexport const timestampTodate = (timestamp, language) => {\n if (timestamp === 0) return null;\n if (language === 'th')\n return moment(timestamp).add(543, 'year').format('Do MMM YYYY, HH:mm')\n if (language === 'cn')\n return moment(timestamp).format('YYYY MMM Do, HH:mm')\n else\n return moment(timestamp).format('MMM Do YYYY, HH:mm')\n}\n\nexport const durationToTime = (milliseconds) => {\n if (parseInt(milliseconds) >= 3600000) {\n return moment.utc(moment.duration(milliseconds).asMilliseconds()).format(\"HH:mm:ss\");\n } else {\n return moment.utc(moment.duration(milliseconds).asMilliseconds()).format(\"mm:ss\");\n }\n}\n\nexport const dateToMillisecond = (date) => {\n if (moment(date, \"MM/DD/YYYY HH:mm\").format(\"MM/DD/YYYY HH:mm\") === date) {\n return moment(date, \"MM/DD/YYYY HH:mm\").valueOf()\n }\n return null\n}\n\nexport const convertWithDutationTime = (date, hours, minutes) => {\n return moment(date, \"MM/DD/YYYY HH:mm\")\n .add(hours, 'hours')\n .add(minutes, 'minutes')\n .valueOf()\n}\n\nexport const disabledPastDay = (current) => {\n let customDate = moment().format('YYYY-MM-DD');\n return current && current < moment(customDate, \"YYYY-MM-DD\");\n}\n\nexport const disabledPastHours = () => {\n var hours = [];\n for (let i = 0; i < moment().hour(); i++) {\n hours.push(i);\n }\n return hours;\n}\n\nexport const disabledPastMinutes = (selectedHour) => {\n var minutes = [];\n if (selectedHour === moment().hour()) {\n for (var i = 0; i < moment().minute(); i++) {\n minutes.push(i);\n }\n }\n return minutes;\n}\n\n\nexport const convertMillisecondToDate = (milliseconds) => {\n if (milliseconds) {\n return moment(milliseconds).format(\"YYYY-MM-DD HH:mm\")\n }\n return null\n}\n\nexport const dateDiffDuration = (startMillisecond, endMillisecond) => {\n if (startMillisecond && endMillisecond) {\n let start = moment(startMillisecond);\n let end = moment(endMillisecond);\n let duration = moment.duration(end.diff(start));\n let hours = Math.floor(duration.asHours());\n let minutes = Math.floor(duration.minutes())\n return {\n hours, minutes\n }\n }\n return {\n hours: null,\n minutes: null\n }\n}\n\nexport const secondsContextToHms = (token) => {\n if (!isEmpty(token)) {\n let tokenString = new Buffer(token, 'base64').toString()\n let contextTime = JSON.parse(tokenString)\n let timeSecond = contextTime.r.d\n\n let second = Number(timeSecond);\n let hours = Math.floor(second / 3600);\n let minutes = Math.floor(second % 3600 / 60);\n\n return {\n hours,\n minutes\n }\n }\n return {\n hours: 0,\n minutes: 0\n }\n}\n\nexport const getTimeRemaining = (startTime) => {\n const total = startTime - Date.parse(new Date());\n const seconds = Math.floor((total / 1000) % 60);\n const minutes = Math.floor((total / 1000 / 60) % 60);\n const hours = Math.floor((total / (1000 * 60 * 60)) % 24);\n const days = Math.floor(total / (1000 * 60 * 60 * 24));\n\n return {\n total,\n days,\n hours,\n minutes,\n seconds\n };\n}","import i18n from \"i18next\";\nimport detector from \"i18next-browser-languagedetector\";\nimport backend from \"i18next-xhr-backend\";\nimport { reactI18nextModule } from \"react-i18next\";\n\nimport translationEN from './locales/en/translation.json';\nimport translationTH from './locales/th/translation.json';\nimport translationCN from './locales/cn/translation.json';\n\n// the translations\nconst resources = {\n en: {\n translation: translationEN\n },\n th: {\n translation: translationTH\n },\n cn: {\n translation: translationCN\n }\n};\n\ni18n\n .use(detector)\n .use(backend)\n .use(reactI18nextModule) // passes i18n down to react-i18next\n .init({\n resources,\n lng: \"th\",\n fallbackLng: \"th\", // use en if detected lng is not available\n\n // keySeparator: false, // we do not use keys in form messages.welcome\n\n interpolation: {\n escapeValue: false // react already safes from xss\n },\n // react-i18next options\n react: {\n wait: true\n }\n });\n\nexport default i18n;","import React from 'react'\n\nconst IconRight = ({\n style = {},\n fill = '#fff',\n width = '12',\n height = '19',\n viewBox = '0 0 12 19'\n}) => (\n \n \n \n )\n\nconst IconNoPicture = ({\n style = {},\n fill = 'none',\n width = '177',\n height = '177',\n viewBox = '0 0 177 177'\n}) => (\n \n \n \n )\n\nconst IconMicON = ({\n style = {},\n fill = 'none',\n width = '40',\n height = '40',\n viewBox = '0 0 40 40',\n onClick\n}) => (\n \n \n \n \n \n \n )\n\nconst IconMicOff = ({\n style = {},\n fill = 'none',\n width = '40',\n height = '40',\n viewBox = '0 0 40 40',\n onClick\n}) => (\n \n \n \n \n \n \n \n \n \n \n )\n\nconst IconCameraOn = ({\n style = {},\n fill = 'none',\n width = '40',\n height = '40',\n viewBox = '0 0 40 40',\n onClick\n}) => (\n \n \n \n \n \n \n )\n\nconst IconCameraOff = ({\n style = {},\n fill = 'none',\n width = '40',\n height = '40',\n viewBox = '0 0 40 40',\n onClick\n}) => (\n \n \n \n \n \n \n )\n\nconst IconTH = ({\n style = {},\n fill = '#F9F9F9',\n width = '27',\n height = '6',\n viewBox = '0 0 27 6',\n onClick\n}) => (\n \n \n \n \n \n \n \n )\n\nconst IconEN = ({\n style = {},\n fill = '#828282',\n width = '27',\n height = '6',\n viewBox = '0 0 27 6',\n onClick\n}) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n )\n\nconst IconCN = ({\n style = {},\n fill = '#828282',\n width = '27',\n height = '6',\n viewBox = '0 0 27 6',\n onClick\n}) => (\n \n \n \n \n \n \n \n \n\n )\n\nconst IconUser = ({\n style = {},\n fill = 'none',\n width = '84',\n height = '84',\n viewBox = '0 0 84 84'\n}) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n\nconst IconClose = ({\n style = {},\n fill = 'none',\n width = '19',\n height = '19',\n viewBox = '0 0 19 19',\n onClick\n}) => (\n \n \n \n )\n\nconst Icon404 = ({\n style = {},\n fill = 'none',\n width = '344',\n height = '146',\n viewBox = '0 0 344 146'\n}) => (\n \n \n \n \n \n \n \n \n \n \n \n )\n\nconst IconNotFoundEN = ({\n style = {},\n fill = 'none',\n width = '341',\n height = '38',\n viewBox = '0 0 341 38'\n}) => (\n \n \n \n\n )\n\nconst IconNotFoundTH = ({\n style = {},\n fill = 'none',\n width = '322',\n height = '25',\n viewBox = '0 0 322 25'\n}) => (\n \n \n \n\n )\n\nconst IconCheck = ({\n style = {},\n fill = 'none',\n width = '20',\n height = '20',\n viewBox = '0 0 20 20'\n}) => (\n \n \n \n\n )\n\nconst IconEye = ({\n style = {},\n fill = 'none',\n width = '18',\n height = '18',\n viewBox = '0 0 18 18',\n onClick\n}) => (\n \n \n \n\n )\n\nconst IconStatusErr = ({\n style = {},\n fill = 'none',\n width = '50',\n height = '50',\n viewBox = '0 0 50 50',\n onClick\n}) => (\n \n \n \n\n )\n\nconst IconSupport = ({\n style = {},\n fill = 'none',\n width = '24',\n height = '24',\n viewBox = '0 0 24 24',\n onClick\n}) => (\n \n \n \n\n )\n\nconst IconContact = ({\n style = {},\n fill = 'none',\n width = '20',\n height = '20',\n viewBox = '0 0 20 20',\n onClick\n}) => (\n \n \n \n \n\n )\n\n\nconst IconRemove = ({\n style = {},\n fill = 'none',\n width = '10',\n height = '12',\n viewBox = '0 0 10 12',\n onClick\n}) => (\n \n \n \n\n )\n\nconst IconBack = ({\n style = {},\n fill = 'none',\n width = '12',\n height = '20',\n viewBox = '0 0 12 20',\n onClick\n}) => (\n \n \n \n )\n\nconst IconUserChecked = ({\n style = {},\n fill = 'none',\n width = '20',\n height = '19',\n viewBox = '0 0 20 19'\n}) => (\n \n \n \n \n \n )\n\nconst IconInside = ({\n style = {},\n fill = 'none',\n width = '16',\n height = '16',\n viewBox = '0 0 16 16',\n className = '',\n onClick\n}) => (\n \n \n \n )\n\nconst IconWave = ({\n style = {},\n fill = 'none',\n width = '18',\n height = '17',\n viewBox = '0 0 18 17',\n className = ''\n}) => (\n \n \n \n )\n\nconst IconCloseGray = ({\n style = {},\n fill = 'none',\n width = '12',\n height = '12',\n viewBox = '0 0 12 12',\n className = '',\n onClick\n}) => (\n \n \n \n )\nconst IconArrowBack = ({\n style = {},\n fill = 'none',\n width = '24',\n height = '24',\n viewBox = '0 0 24 24',\n onClick\n}) => (\n \n \n \n )\n\n// \"margin: auto; background: rgb(255, 255, 255); display: block; shape-rendering: auto;\nconst IconSpinner = ({\n width = '0px',\n height = '0px',\n viewBox = '0 0 100 100',\n style = {\n margin: 'auto',\n display: 'block',\n shapeRendering: 'auto'\n },\n}) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n\nconst IconEdit = ({\n style = {},\n fill = 'none',\n width = '19',\n height = '19',\n viewBox = '0 0 19 19'\n}) => (\n \n \n \n )\n\nconst IconLeft = ({\n style = {},\n fill = 'none',\n width = '22',\n height = '22',\n viewBox = '0 0 22 22',\n onClick\n}) => (\n \n \n \n\n )\n\n\nconst IconLive = ({\n style = {},\n fill = 'none',\n width = '26',\n height = '23',\n viewBox = '0 0 26 23',\n onClick\n}) => (\n \n \n \n\n )\n\nconst IconDelete = ({\n style = {},\n fill = 'none',\n width = '18',\n height = '18',\n viewBox = '0 0 18 18',\n onClick\n}) => (\n \n\n \n\n \n\n )\n\nconst IconSmile = ({\n style = {},\n fill = 'none',\n width = '20',\n height = '20',\n viewBox = '0 0 20 20',\n onClick\n}) => (\n \n \n \n \n \n \n \n\n\n )\n\nconst IconMicrophone = ({\n style = {},\n fill = 'none',\n width = '14',\n height = '19',\n viewBox = '0 0 14 18',\n onClick\n}) => (\n \n\n \n\n \n\n )\n\nconst IconPlus = ({\n style = {},\n fill = 'none',\n width = '14',\n height = '14',\n viewBox = '0 0 14 14',\n onClick\n}) => (\n \n \n \n )\n\nconst IconEditParticipant = ({\n style = {},\n fill = 'none',\n width = '16',\n height = '16',\n viewBox = '0 0 16 16',\n onClick\n}) => (\n \n \n \n\n )\n\n const IconMenuSupport = ({\n style = {},\n fill = 'none',\n width = '17',\n height = '17',\n viewBox = '0 0 17 17',\n onClick\n }) => (\n \n \n \n \n \n )\n \n \n const IconMenuPrice = ({\n style = {},\n fill = 'none',\n width = '15',\n height = '19',\n viewBox = '0 0 15 19',\n onClick\n }) => (\n \n \n \n \n \n )\n \n \n const IconMenuMeeting = ({\n style = {},\n fill = 'none',\n width = '19',\n height = '19',\n viewBox = '0 0 19 19',\n onClick\n }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n\n const IconMenuMyRecords = ({\n style = {},\n fill = 'none',\n width = '19',\n height = '14',\n viewBox = '0 0 19 14',\n onClick\n }) => (\n \n \n \n \n )\n\n\nexport const IconHelper = {\n IconRight,\n IconNoPicture,\n IconMicON,\n IconMicOff,\n IconCameraOn,\n IconCameraOff,\n IconTH,\n IconEN,\n IconCN,\n IconUser,\n IconClose,\n Icon404,\n IconNotFoundEN,\n IconNotFoundTH,\n IconCheck,\n IconEye,\n IconStatusErr,\n IconSupport,\n IconContact,\n IconRemove,\n IconBack,\n IconUserChecked,\n IconInside,\n IconWave,\n IconCloseGray,\n IconArrowBack,\n IconSpinner,\n IconEdit,\n IconLeft,\n IconLive,\n IconDelete,\n IconSmile,\n IconMicrophone,\n IconPlus,\n IconEditParticipant,\n IconMenuSupport,\n IconMenuPrice,\n IconMenuMeeting,\n IconMenuMyRecords\n}","import { useMemo } from 'react'\nimport { useParams, useLocation, useHistory, useRouteMatch } from 'react-router-dom'\nimport queryString from 'query-string'\n\nconst useRouter = () => {\n const params = useParams()\n const location = useLocation()\n const history = useHistory()\n const match = useRouteMatch()\n\n // Return our custom router object\n // Memoize so that a new object is only returned if something changes\n return useMemo(() => {\n return {\n // For convenience add push(), replace(), pathname at top level\n push: history.push,\n replace: history.replace,\n pathname: location.pathname,\n // Merge params and parsed query string into single \"query\" object\n // so that they can be used interchangeably.\n // Example: /:topic?sort=popular -> { topic: \"react\", sort: \"popular\" }\n query: {\n ...queryString.parse(location.search), // Convert string to object\n ...params\n },\n // Include match, location, history objects so we have\n // access to extra React Router functionality if needed.\n match,\n location,\n history\n }\n }, [params, match, location, history])\n}\n\nexport const routersHelper = {\n useRouter\n}\n","import axios from 'axios'\nimport { destroyUserInfo, setCookie, getCookie } from './Auth'\n\n\nexport const setHttpErrObj = (errFunc, message, stacktrace) => {\n const date = new Date();\n const { name, email } = getCookie('contextInfo') ? JSON.parse(getCookie('contextInfo')) : {}\n const errorObj = {\n \"@timestamp\": date.toISOString(),\n \"level\": \"error\",\n \"user\": name || '',\n \"email\": email || '',\n \"app\": window._env_.APP_NAME,\n \"page\": window.location.pathname,\n \"function\": errFunc,\n \"message\": message,\n \"stacktrace\": stacktrace\n }\n return errorObj\n}\n\nexport const getHttpClient = function (keycloak, url, headers = {}) {\n return fetch(url, {\n method: 'GET',\n headers,\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"getHttpClient\", \"status bad request\", \"HTTP Client GET: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response.json()\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client GET', err))\n}\n\nexport const postHttpClient = function (keycloak, url, headers = {}, body = {}) {\n return fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"postHttpClient\", \"status bad request\", \"HTTP Client POST: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response.json()\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client POST', err))\n}\n\nexport const putHttpClient = function (keycloak, url, headers = {}, body = {}) {\n return fetch(url, {\n method: 'PUT',\n headers,\n body: JSON.stringify(body)\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"putHttpClient\", \"status bad request\", \"HTTP Client PUT: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response.json()\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client PUT', err))\n}\n\nexport const patchHttpClient = function (keycloak, url, headers = {}, body = {}) {\n return fetch(url, {\n method: 'PATCH',\n headers,\n body: JSON.stringify(body)\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"patchHttpClient\", \"status bad request\", \"HTTP Client PATCH: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response.json()\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client PATCH', err))\n}\n\nexport const deleteHttpClient = function (keycloak, url, headers = {}) {\n return fetch(url, {\n method: 'DELETE',\n headers,\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"deleteHttpClient\", \"status bad request\", \"HTTP Client DELETE: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client DELETE', err))\n}\n\nexport const getHttpVtoken = function (keycloak, url, headers = {}) {\n return fetch(url, {\n method: 'GET',\n headers,\n }).then((response) => {\n if (window.location.pathname !== '/portal/error') {\n if (response.status === 401) {\n destroyUserInfo()\n keycloak.logout()\n } else if (response.status === 404) {\n const errorObj = setHttpErrObj(\"getHttpVtoken\", \"User Not Found\", \"HTTP Client GET: status not found \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else if (response.status >= 500) {\n const errorObj = setHttpErrObj(\"getHttpVtoken\", \"status bad request\", \"HTTP Client POST: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n } else {\n return response.json()\n }\n }\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client GET', err))\n}\n\nexport const putHttpLog = (body = {}) => {\n return new Promise((resolve, reject) => {\n fetch(window._env_.LOG_URL, {\n method: 'PUT',\n body: JSON.stringify(body)\n }).then((response) => {\n return response.json()\n }).then((json) => {\n resolve(json);\n }).catch(error => {\n console.error('HTTP LOG', error)\n reject(error.message);\n })\n })\n}\n\n\nexport const formDataHeader = () => {\n let config = {\n headers: {\n 'content-type': 'multipart/form-data',\n }\n }\n return config\n}\n\nexport const sendemailHttpClient = function (url, body, ran) {\n return axios.post(url, body, formDataHeader()).then((response) => {\n return response\n }).then((responseJson) => {\n return responseJson\n }).catch(err => console.error('HTTP Client POST', err))\n}","import { getHttpVtoken } from './HttpClient'\nimport decode from 'jwt-decode';\nimport { isEmpty } from 'lodash';\n\nexport const mapUserInfo = (loadUserInfo, keycloakToken, idToken, refreshToken) => {\n const name = loadUserInfo.name.split(\" \")\n const firstName = name[0]\n const lastName = name[1]\n return {\n firstName,\n lastName,\n email: loadUserInfo.email,\n id: loadUserInfo.sub,\n token: keycloakToken,\n idToken,\n refreshToken,\n }\n}\n\nexport const destroyUserInfo = () => {\n deleteCookie('contextInfo')\n}\n\nexport const checkKeycloakToken = (keycloak) => {\n return new Promise((resolve, reject) => {\n keycloak\n .updateToken(window._env_.updateKeycloakToken)\n .then(async function (refreshed) {\n resolve(keycloak);\n }).catch(function (err) {\n console.error(err)\n reject(err)\n });\n });\n\n}\n\nexport const genVRoomToken = async function (keycloak) {\n try {\n // console.log(\"old\", keycloak.idToken.substr(keycloak.idToken.length - 4, keycloak.idToken.length));\n await checkKeycloakToken(keycloak);\n // console.log(\"new\", keycloak.idToken.substr(keycloak.idToken.length - 4, keycloak.idToken.length));\n // console.log(\"new-keycloak\", keycloak.idToken);\n const url = window._env_.subscriberServiceBaseURL + \"/v1/token\"\n const headers = {\n Authorization: \"Bearer \" + keycloak.idToken\n }\n const { token } = await getHttpVtoken(keycloak, url, headers)\n if (!isEmpty(token)) {\n localStorage.setItem(\"vtoken\", token)\n setContextInfo(token)\n return token\n }\n return null\n } catch (error) {\n console.error('Generate token', error)\n }\n}\n\nexport const getContextInfo = async (keycloak) => {\n let contextInfo = getCookie('contextInfo') ? JSON.parse(getCookie('contextInfo')) : {}\n if (isEmpty(contextInfo)) {\n const vroomToken = await genVRoomToken(keycloak)\n if (!isEmpty(vroomToken)) {\n const contextInfo = decode(vroomToken)\n const { user } = contextInfo.context\n const { avatar, p, pkgcode, name, email } = user\n return {\n avatar, p, pkgcode, name, email\n }\n }\n }\n return contextInfo\n}\n\nexport const setContextInfo = (vroomToken) => {\n const contextInfo = decode(vroomToken)\n const { user } = contextInfo.context\n const { avatar, p, pkgcode, name, email } = user\n setCookie(\"contextInfo\", JSON.stringify({ avatar, p, pkgcode, name, email }));\n}\n\nexport const isExpire = (token) => {\n if (token && decode(token)) {\n const expiry = decode(token).exp;\n const now = new Date();\n return now.getTime() > expiry * 1000;\n }\n return true;\n}\n\n\nexport const login = (keycloak, language) => {\n const lang = language === 'cn' ? 'zh-cn' : language\n if (!isEmpty(keycloak)) {\n // alert(this.state.keycloak.createLoginUrl())\n window.location.href = keycloak.createLoginUrl() + `&ui_locales=${lang}&clear=true`\n // console.log(this.state.keycloak)\n } else {\n alert(\"keycloak is null\");\n }\n}\n\nexport const logoutByUser = (keycloak) => {\n if (!isEmpty(keycloak)) {\n keycloak.logout()\n }\n destroyUserInfo()\n localStorage.removeItem(\"vtoken\")\n}\n\nexport const setCookie = (name, value, time = { period: '', duration: 0 }) => {\n const hostName = window.location.host.split(':')\n let myDate = new Date();\n switch (time.period) {\n case 'minutes':\n myDate.setMinutes(myDate.getMinutes() + time.duration);\n break;\n case 'hours':\n myDate.setHours(myDate.getHours() + time.duration);\n break\n case 'months':\n myDate.setMonth(myDate.getMonth() + time.duration);\n break\n case 'years':\n myDate.setFullYear(myDate.getFullYear() + time.duration);\n break;\n default:\n myDate.setMonth(myDate.getMonth() + 12);\n break;\n }\n document.cookie = name + \"=\" + value + \";expires=\" + myDate\n + \";domain=\" + hostName[0] + \";path=/\"\n}\n\nexport const getCookie = (name) => {\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop().split(';').shift();\n}\n\nexport const deleteCookie = (name) => {\n const hostName = window.location.host.split(':')\n document.cookie = name + \"=;domain=\" + hostName[0]\n + \";expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\n}\n\nexport const isVtokenExp = (vtoken) => {\n if (!isEmpty(vtoken)) {\n const dateNow = Date.parse(new Date()) / 1000\n const { exp } = decode(vtoken)\n if (exp < dateNow) {\n return true\n }\n }\n return false\n}\n","import { result, isUndefined, has } from 'lodash';\nimport { authenRocketChat, setChatID, logInRealtimeAPI } from '../helpers'\nexport const getSelector = (pathFromState) => (state) => result(state, pathFromState, null);\n\nexport const getRoomHistory = () => {\n const item = localStorage.getItem('features/recent-list')\n return (item !== null) ? JSON.parse(item).reverse() : []\n}\n\nexport const validateEmail = (email) => {\n const re = /^(([^<>()\\\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n}\n\nexport const charectorLength = (input) => {\n\n if (!isUndefined(input)) {\n let max_length = 15;\n let this_length = max_length - input.toString().length;\n if (this_length < 0) {\n let sub = input.substr(0, 15);\n let res = `${sub}...`\n return res;\n } else {\n console.log('ตัวอักษร', this_length)\n }\n }\n}\n\nexport const isValidName = (name) => {\n // ? & : ' \" % # / \\ $ ^ * ` > <\n // /^(?=.*[A-Za-z])(?=.*\\d)[a-zA-Z0-9!@#$%^&*()~¥=_+}{\":;'?/>.<,`\\-\\|\\[\\]]{6,50}$/\n let reg = /^(?!.*(?:&|:|'|\"|%|#|\\/|\\\\|\\$|\\^|\\*|`|>|<|\\?)).+/ ///^(?!(\\?|&|:|'|\"|%|#|\\/|\\\\|\\$|\\^|\\*|`|>|<)$).+/ ///^[\\u4e00-\\u9fa5ก-๙a-zA-Z0-9!+~@฿()={}|;.,_-]{1,100}$/\n // let reg = /^[\\u4E00-\\u9FCC\\u3400-\\u4DB5\\uFA0E\\uFA0F\\uFA11\\uFA13\\uFA14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29]|[\\ud840-\\ud868][\\udc00-\\udfff]|\\ud869[\\udc00-\\uded6\\udf00-\\udfff]|[\\ud86a-\\ud86c][\\udc00-\\udfff]|\\ud86d[\\udc00-\\udf34\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d]|[ก-๙a-zA-Z0-9_-]{1,100}$/\n return reg.test(name)\n}\n\nexport const validateMobileNation = mobile => {\n let m = mobile.split(' ');\n if (m.length > 0) {\n if ('+66' === m[0]) {\n if (m.join('').length >= 12) {\n return true;\n } else {\n return false;\n }\n } else {\n return true;\n }\n } else {\n return false;\n }\n};\n\nexport const uploadImageValidate = (type, size) => {\n if (type.search(\"image/\") >= 0) {\n let s = size.split(\" \");\n if (s.length > 1) {\n if (parseInt(s[0]) <= 2048) {\n return true;\n }\n }\n } else {\n return false;\n }\n};\n\nexport function randomNum() {\n let length = 32;\n let result = \"\";\n let characters =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let charactersLength = characters.length;\n let i;\n for (i = 0; i < length; i++)\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n\n // setOTPState(result);\n return result;\n}\n\nexport const authen = async () => {\n const token = localStorage.getItem('vtoken')\n\n if (token !== null) {\n const vtoken = await authenRocketChat(token)\n\n if (has(vtoken, 'chatUserID')) {\n setChatID(vtoken)\n setTimeout(() => {\n // const set = JSON.parse(localStorage.getItem('setChatID'))\n\n // event setChatID = chatUserID\n // connectSetChatID(set.chatUserID)\n const auth = JSON.parse(localStorage.getItem('chatUserToken'))\n logInRealtimeAPI(auth.chatUserToken)\n // const auth = JSON.parse(localStorage.getItem('chatUserToken'))\n // realtimeAPI.loginWithAuthToken(auth.chatUserToken).subscribe(\n // (authResult) => {\n // console.log(\"authResult\", authResult);\n // if (authResult.msg === \"result\") {\n // if (authResult.error === undefined) {\n\n // } else {\n // console.log(\"login fail handle here\");\n // }\n // }\n // },\n // (error) => {\n // console.log(\"login error (may be network)\", error);\n // }\n // )\n\n }, 100);\n }\n } else {\n\n setTimeout(async () => {\n const getToken = localStorage.getItem('vtoken')\n\n if (getToken !== null) {\n const rocketAuth = await authenRocketChat(getToken)\n\n if (has(rocketAuth, 'chatUserID')) {\n setChatID(rocketAuth)\n setTimeout(() => {\n // const setcID = JSON.parse(localStorage.getItem('setChatID'))\n\n // event setChatID = chatUserID\n // connectSetChatID(setcID.chatUserID)\n const auth = JSON.parse(localStorage.getItem('chatUserToken'))\n logInRealtimeAPI(auth.chatUserToken)\n // const auth = JSON.parse(localStorage.getItem('chatUserToken'))\n // realtimeAPI.loginWithAuthToken(auth.chatUserToken).subscribe(\n // (authResult) => {\n // console.log(\"authResult\", authResult);\n // if (authResult.msg === \"result\") {\n // if (authResult.error === undefined) {\n\n // } else {\n // console.log(\"login fail handle here\");\n // }\n // }\n // },\n // (error) => {\n // console.log(\"login error (may be network)\", error);\n // }\n // )\n\n }, 100);\n }\n }\n }, 600);\n\n\n }\n}\n","import socketIOClient from 'socket.io-client'\nimport { SET_LOBBY_LIST, SET_ANNOUNCEMENT, SHOW_POPUP } from '../redux/actions/type'\nlet socket\n\nexport const initiateSocket = (name, dispatch, chatID) => {\n socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: encodeURIComponent(name.roomName)\n }\n });\n socket.on('onConnect', function (data) {\n if (data.code !== 200)\n window.location.href = `${window._env_.vRoomUrl}/portal/notFound`\n console.log('onConnect', data)\n });\n socket.emit('setChatID', chatID, function (data) {\n console.log('setChatID::', data);\n });\n socket.on('userList', function (data) {\n dispatch({\n type: SET_LOBBY_LIST,\n payload: {\n lobbyLists: data\n }\n })\n console.log(\"userList\", data)\n });\n socket.on('announcement', function (data) {\n dispatch({\n type: SET_ANNOUNCEMENT,\n payload: {\n announcement: data\n }\n })\n });\n socket.on('roomExpire', function () {\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.body',\n textButton: \"popupInfo.button_my_meeting\",\n action: `${window._env_.mymeeting}`\n }\n })\n });\n}\n\nexport const ChangeName = (name, id) => {\n if (socket) {\n socket.emit('setProfile', { name, id }, function (data) {\n console.log('setProfile', data);\n });\n }\n\n}\n\nexport const connectSetChatID = (chatID) => {\n if (socket) {\n socket.emit('setChatID', chatID, function (data) {\n console.log('setChatID::', data);\n });\n }\n\n}\n\nexport const ConnectChat = () => {\n\n if (socket) {\n return socket\n // socket.emit('chat', userID.id, function (data) {\n // console.log('chat', data);\n // if (data.code === 200) {\n // localStorage.setItem(\"chatCodeStatus\", data.code)\n // }\n\n // });\n }\n}\n\nexport const Reject = (userID) => {\n if (socket) {\n socket.emit('reject', userID.id, function (data) {\n console.log('reject', data);\n });\n }\n\n}\n\nexport const connectApproveUser = (id) => {\n if (socket) {\n socket.emit('approve', { vtoken: localStorage.getItem('vtoken'), id }, function (data) {\n console.log('approve', data);\n })\n }\n}\n\nexport const updateAnnouncement = (text) => {\n if (socket) {\n return new Promise((resolve) => {\n socket.emit('announcement', text, function () {\n resolve();\n });\n });\n }\n}","import { isEmpty, isNull } from 'lodash'\nimport socketIOClient from 'socket.io-client'\nimport { SET_ANNOUNCEMENT, SET_CONNECT_LOBBY, SET_LOBBY_LIST, SHOW_POPUP } from '../redux/actions/type'\nimport { deleteCookie, getCookie, setCookie } from './Auth'\nimport { setHttpErrObj } from './HttpClient'\nimport _ from 'lodash'\n\n\nexport const authenRocketChat = (jwt) => {\n return fetch(`${window._env_.rocketChatAPIUrl}api/v1/auth`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${jwt}`,\n 'Content-Type': 'application/json'\n }\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n } else {\n //error case via APIs.\n if (window._env_.APP_ENV === 'development') {\n throw new Error(`Status bad request: ${window._env_.rocketChatAPIUrl}`);\n } else {\n const errorObj = setHttpErrObj(\"authenRocketChat\", \"status bad request\", \"HTTP Client POST: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `${window._env_.vRoomUrl}/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n }\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('authenRocketChat', err))\n}\n\nexport const anonymousRocketChat = (reqObj) => {\n return fetch(`${window._env_.rocketChatAPIUrl}api/v1/auth`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(reqObj)\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n } else {\n //error case via APIs.\n if (window._env_.APP_ENV === 'development') {\n throw new Error(`Status bad request: ${window._env_.rocketChatAPIUrl}`);\n } else {\n const errorObj = setHttpErrObj(\"anonymousRocketChat\", \"status bad request\", \"HTTP Client POST: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `${window._env_.vRoomUrl}/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n }\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('anonymousRocketChat', err))\n}\n\nexport const setRocketStore = (rocketObj) => {\n const { name, chatUserID, chatUserToken } = rocketObj\n // setCookie('rocketChatInfo', JSON.stringify({ name, chatUserID, chatUserToken }), { period: 'hours', duration: 1 })\n const key = 'rocketChatInfo';\n deleteCookie(key)\n localStorage.removeItem('rocketChatLogoutInfo')\n const value = JSON.stringify({ name: encodeURIComponent(name), chatUserID, chatUserToken });\n const myDate = new Date();\n myDate.setHours(myDate.getFullYear() + 1);\n document.cookie = key + \"=\" + value + \";expires=\" + myDate\n + \";domain=.truevirtualworld.com;path=/\";\n localStorage.setItem('rocketChatLogoutInfo', JSON.stringify({ chatUserID, chatUserToken }))\n}\n\nexport const setLobbyStore = (lobbyObj) => {\n deleteCookie('lobbyRoomInfo')\n const { _id, name, roomName, reservationId } = lobbyObj\n setCookie('lobbyRoomInfo', JSON.stringify({ name, _id, roomName, reservationId }), { period: 'hours', duration: 1 })\n}\n\nexport const setChatID = (rocketObj) => {\n if (!_.isUndefined(rocketObj) || !_.isNull(rocketObj)) {\n const { chatUserID, chatUserToken, chatUserName } = rocketObj\n if (chatUserID !== undefined || chatUserID !== null) {\n localStorage.setItem('setChatID', JSON.stringify({ chatUserID }))\n }\n if (chatUserToken !== undefined || chatUserToken !== null) {\n localStorage.setItem('chatUserToken', JSON.stringify({ chatUserToken }))\n }\n if (chatUserName !== undefined || chatUserName !== null) {\n localStorage.setItem('chatUserName', JSON.stringify({ chatUserName }))\n }\n localStorage.setItem('DataManager', JSON.stringify(rocketObj))\n }\n\n\n}\n\nexport const setLobbyManager = (name, dispatch, chatID, userID) => {\n setTimeout(() => {\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: name.roomName\n }\n });\n socket.on('onConnect', function (data) {\n if (data.code !== 200)\n window.location.href = `${window._env_.vRoomUrl}/portal/notFound`\n console.log('onConnect', data)\n });\n socket.on('userList', function (data) {\n dispatch({\n type: SET_LOBBY_LIST,\n payload: {\n lobbyLists: data\n }\n })\n console.log(\"userList\", data)\n });\n socket.emit('setChatID', chatID, function (data) {\n console.log('setChatID', data);\n });\n if (userID !== undefined) {\n socket.emit('chat', userID, function (data) {\n console.log('chat', data);\n //localStorage.setItem('chat', data.data.chatRoomId)\n });\n }\n\n }, 1000);\n}\n\nexport const setAuthLobby = (rocketObj, dispatch) => {\n let newVtoken = null\n const { chatUserID, name, roomName, reservationId, chatRoomId, vtoken } = rocketObj\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby`, {\n query: {\n roomName: encodeURIComponent(roomName),\n chatUserId: chatUserID,\n chatRoomName: `${reservationId}_${chatUserID}`,\n chatRoomId: chatRoomId,\n intent: \"conference\",\n vtoken,\n name: decodeURIComponent(name)\n }\n });\n socket.on('onConnect', function (data) {\n console.log('onConnect', data)\n });\n socket.on('setToken', function (data) {\n console.log(\"setToken\", data)\n newVtoken = data.vtoken\n });\n socket.on('updateState', function (data) {\n console.log(\"updateState\", data)\n const { intentionStatus } = data\n\n if (intentionStatus === 1) {\n let tempVtoken = vtoken\n if (!isNull(newVtoken)) {\n tempVtoken = newVtoken\n }\n window.location.href = `${window._env_.vRoomUrl}/${roomName}?jwt=${tempVtoken}`\n }\n\n if (intentionStatus === 2) {\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.reject',\n action: `${window._env_.vRoomUrl}/portal`,\n textHeader: 'popupInfo.reject_header'\n }\n })\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n connecting: false\n }\n })\n }\n });\n socket.on('setProfile', function (data) {\n console.log(\"setProfile\", data)\n setOverridename({ ...data, chatUserID }, 'AuthRucket')\n });\n socket.on('modEnterRoom', function (data) {\n console.log(\"modEnterRoom\", data)\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n connecting: true\n }\n })\n });\n socket.on('announcement', function (data) {\n dispatch({\n type: SET_ANNOUNCEMENT,\n payload: {\n announcement: data\n }\n })\n });\n socket.on('roomExpire', function () {\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.body',\n action: `${window._env_.vRoomUrl}/portal`\n }\n })\n });\n}\n\nexport const setAnonymousLobby = (rocketObj, dispatch) => {\n let vToken = null\n const { chatUserID, name, roomName, reservationId, chatRoomId, anonymousID } = rocketObj\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby`, {\n query: {\n roomName: encodeURIComponent(roomName),\n chatUserId: chatUserID,\n chatRoomName: `${reservationId}_${chatUserID}`,\n chatRoomId: chatRoomId,\n intent: \"conference\",\n anonymousID,\n anonymousName: decodeURIComponent(name)\n }\n });\n socket.on('onConnect', function (data) {\n console.log('onConnect', data)\n });\n socket.on('setToken', function (data) {\n console.log(\"setToken\", data)\n vToken = data.vtoken\n });\n socket.on('updateState', function (data) {\n console.log(\"updateState\", data)\n const { intentionStatus } = data\n if (intentionStatus === 1 && !isNull(vToken)) {\n window.location.href = `${window._env_.vRoomUrl}/${roomName}?jwt=${vToken}`\n }\n if (intentionStatus === 2) {\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.reject',\n action: `${window._env_.vRoomUrl}/portal`,\n textHeader: 'popupInfo.reject_header'\n }\n })\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n connecting: false\n }\n })\n }\n });\n socket.on('setProfile', function (data) {\n console.log(\"setProfile\", data)\n setOverridename({ ...data, chatUserID }, 'AnonymousRocket')\n });\n socket.on('modEnterRoom', function (data) {\n console.log(\"modEnterRoom\", data)\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n connecting: true\n }\n })\n });\n socket.on('announcement', function (data) {\n dispatch({\n type: SET_ANNOUNCEMENT,\n payload: {\n announcement: data\n }\n })\n });\n socket.on('roomExpire', function () {\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.body',\n action: `${window._env_.vRoomUrl}/portal`\n }\n })\n });\n}\n\nexport const getAuthMethod = (roomName) => {\n return fetch(`${window._env_.reservation}api/v1/public/reservations/current?name=${roomName}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n },\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n } else {\n if (response.status === 404) {\n // roomName not found\n window.location.href = `${window._env_.vRoomUrl}/portal/notFound`\n } else {\n //error case via APIs.\n if (window._env_.APP_ENV === 'development') {\n throw new Error(`Status bad request: ${window._env_.reservation}`);\n } else {\n const errorObj = setHttpErrObj(\"getAuthMethod\", \"status bad request\", \"HTTP Client GET: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `${window._env_.vRoomUrl}/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n }\n }\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('getAuthMethod', err))\n}\n\nexport const createRocketChat = (createObj) => {\n return fetch(`${window._env_.rocketChatAPIUrl}api/v1/room/group`, {\n headers: {\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify(createObj)\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n } else {\n //error case via APIs.\n if (window._env_.APP_ENV === 'development') {\n throw new Error(`Status bad request: ${window._env_.rocketChatAPIUrl}`);\n } else {\n const errorObj = setHttpErrObj(\"getAuthMethod\", \"status bad request\", \"HTTP Client GET: status bad request \" + response.url)\n setCookie('error', JSON.stringify(errorObj), { period: 'minutes', duration: 1 })\n window.location.href = `${window._env_.vRoomUrl}/portal/error?errorCode=${response.status}&message=error_text_1&setLog=true`\n }\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('createRocketChat', err))\n}\n\nexport const setProfile = (roomName, name, id) => {\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: roomName.roomName\n }\n });\n socket.emit('setProfile', { name, id }, function (data) {\n console.log('setProfile', data);\n });\n}\n\nexport const approveUser = (roomName, id) => {\n console.log('test');\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: roomName\n }\n });\n socket.emit('approve', { id, vtoken: localStorage.getItem('vtoken') }, function (data) {\n console.log('chat', data);\n })\n}\n\nexport const setConnectChatID = (roomName, chatID) => {\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: roomName.roomName\n }\n });\n socket.emit('setChatID', chatID, function (data) {\n console.log('setChatID::', data);\n });\n}\n\nexport const setConnectChat = (roomName, chatID, userID) => {\n const socket = socketIOClient(`${window._env_.lobbyAPIUrl}lobby-manager`, {\n query: {\n vtoken: localStorage.getItem('vtoken'),\n name: roomName.roomName\n }\n });\n\n socket.emit('setChatID', chatID, function (data) {\n console.log('setChatID', data);\n });\n socket.emit('chat', userID, function (data) {\n console.log('chat', data);\n });\n\n}\n\nexport const setOverridename = (obj, funcName) => {\n const { overrideName, chatUserID } = obj\n return fetch(`${window._env_.rocketChatAPIUrl}api/v1/user`, {\n headers: {\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({ name: overrideName, chatUserID })\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n } else {\n throw new Error(`Can't connect to ${window._env_.rocketChatAPIUrl}`);\n }\n })\n .then(json => {\n const rocketChatInfo = getCookie('rocketChatInfo') ? JSON.parse(getCookie('rocketChatInfo')) : {}\n const anonymousInfo = localStorage.getItem('anonymousInfo') ? JSON.parse(localStorage.getItem('anonymousInfo')) : {}\n const { success } = json\n if (!isEmpty(rocketChatInfo) && success) {\n setRocketStore({ ...rocketChatInfo, name: overrideName })\n }\n if (!isEmpty(anonymousInfo) && success && funcName === 'AnonymousRocket') {\n localStorage.setItem('anonymousInfo', JSON.stringify({ ...anonymousInfo, name: encodeURIComponent(overrideName) }))\n }\n return json\n })\n .catch(err => console.error('setOverridename', err))\n}\n\nexport const destroyRocketChatInfo = () => {\n const rocketChatInfo = localStorage.getItem('rocketChatLogoutInfo') ? JSON.parse(localStorage.getItem('rocketChatLogoutInfo')) : {}\n deleteCookie('rocketChatInfo')\n localStorage.removeItem('rocketChatLogoutInfo')\n if (!isEmpty(rocketChatInfo)) {\n const { chatUserID, chatUserToken } = rocketChatInfo\n fetch(`${window._env_.rocketChatIFrameUrl}api/v1/logout`, {\n headers: {\n 'X-Auth-Token': chatUserToken,\n 'X-User-Id': chatUserID\n },\n method: 'POST',\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('destroyRocketChatInfo', err))\n }\n}\n\n\n\nexport const roomUsersCount = (auth, userid, roomID) => {\n return fetch(`${window._env_.realtimeRocket}/api/v1/rooms.info?roomId=${roomID}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Auth-Token': auth,\n 'X-User-Id': userid\n },\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('get room users count', err))\n}\n\nexport const ChangeNameMod = (auth, userid, newName) => {\n\n return fetch(\"https://rocketchat-ts.truevirtualworld.com/api/v1/users.update\", {\n method: \"POST\",\n headers: {\n 'Content-Type': 'application/json',\n 'X-Auth-Token': auth,\n 'X-User-Id': userid\n },\n body: JSON.stringify(newName)\n })\n .then(response => {\n if (response.ok) {\n return response.json()\n }\n })\n .then(json => {\n return json\n })\n .catch(err => console.error('get room users count', err))\n}","export const LOG_IN = 'LOG_IN'\nexport const LOG_OUT = 'LOG_OUT'\nexport const SET_KEYCLOAK = 'SET_KEYCLOAK'\nexport const USER_INFO = 'USER_INFO'\nexport const MOBILE_URL = 'MOBILE_URL'\nexport const INIT_KEYCLOAK = 'INIT_KEYCLOAK'\nexport const SET_LANGUAGE = 'SET_LANGUAGE'\nexport const GET_RESERVATION = 'GET_RESERVATION'\nexport const SET_RESERVATION = 'SET_RESERVATION'\nexport const CREATE_RESERVATION = 'CREATE_RESERVATION'\nexport const DETAIL_RESERVATION = 'DETAIL_RESERVATION'\nexport const GET_ROOM_DAY = 'GET_ROOM_DAY'\nexport const CANCEL_RESERVATION = 'CANCEL_RESERVATION'\nexport const SET_RUNNING = 'SET_RUNNING'\nexport const SET_POPUP_STATUS = 'SET_POPUP_STATUS'\nexport const UPDATE_RESERVATION = 'UPDATE_RESERVATION'\nexport const CHECK_TOKEN_EXPIRE = 'CHECK_TOKEN_EXPIRE'\nexport const BYPASS_TOKEN = 'BYPASS_TOKEN'\nexport const SET_CONTEXT = 'SET_CONTEXT'\nexport const SET_LOBBY_LIST = 'SET_LOBBY_LIST'\nexport const SET_VROOM_TOKEN = 'SET_VROOM_TOKEN'\nexport const SAVE_VROOM_TOKEN = 'SAVE_VROOM_TOKEN'\nexport const SET_CONNECT_LOBBY = 'SET_CONNECT_LOBBY'\nexport const REMOVE_VROOM_TOKEN = 'REMOVE_VROOM_TOKEN'\nexport const SET_ANONYMOUS_INFO = 'SET_ANONYMOUS_INFO'\nexport const SAVE_ANONYMOUS_INFO = 'SAVE_ANONYMOUS_INFO'\nexport const REMOVE_ANONYMOUS_INFO = 'REMOVE_ANONYMOUS_INFO'\nexport const CONNECT_SOCKET = 'CONNECT_SOCKET'\nexport const SET_ANNOUNCEMENT = 'SET_ANNOUNCEMENT'\nexport const SHOW_POPUP = 'SHOW_POPUP'\nexport const HIDE_POPUP = 'HIDE_POPUP'\n","import { RealTimeAPI } from \"rocket.chat.realtime.api.rxjs\";\nconst url = `${window._env_.realtimeAPI}`;\nlet realtimeAPI = new RealTimeAPI(url);\nrealtimeAPI.connectToServer()\n\nexport const connectRealtimeAPI = () => {\n return realtimeAPI\n}\n\nexport const logInRealtimeAPI = (auth) => {\n realtimeAPI.keepAlive().subscribe(console.log)\n realtimeAPI.loginWithAuthToken(auth).subscribe(\n (authResult) => {\n // console.log(\"authResult\", authResult);\n if (authResult.msg === \"result\") {\n if (authResult.error === undefined) {\n \n } else {\n console.log(\"login fail handle here\");\n }\n }\n },\n (error) => {\n console.log(\"login error (may be network)\", error);\n }\n )\n}\n\nexport const MessageMethod = (msg) => {\n \n realtimeAPI.sendMessage(msg)\n}","import React, { useState, useEffect } from 'react'\nimport { NavLink } from 'react-router-dom'\nimport { routersHelper, IconHelper, logoutByUser } from '../helpers'\nimport { connect } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport i18n from '../i18n'\nimport { SET_LANGUAGE } from '../redux/actions/type'\nimport { isEmpty } from 'lodash'\nimport { login, charectorLength, setCookie } from '../helpers'\n\nconst Header = ({ getKeycloak, getAuthenticated, t, switchLanguage, language, contextInfo }) => {\n const { useRouter } = routersHelper\n const router = useRouter()\n const { pathname } = router\n const [keycloak, setKeycloak] = useState(null)\n const [authenticated, setAuthenticated] = useState(false)\n const [context, setContext] = useState({\n avatar: '',\n name: '',\n p: '',\n pkgcode: '',\n })\n const { IconTH, IconEN, IconCN } = IconHelper\n\n if (pathname.indexOf(\"/prepare\") >= 0) {\n document.body.style.overflow = \"hidden\"\n } else {\n document.body.style.overflow = \"auto\"\n }\n\n useEffect(() => {\n if (authenticated && !isEmpty(keycloak)) {\n setContext({\n ...contextInfo,\n name: contextInfo.name.split(\" \")[0] || ''\n })\n }\n setKeycloak(getKeycloak)\n setAuthenticated(getAuthenticated)\n }, [setKeycloak,\n setAuthenticated,\n getKeycloak,\n getAuthenticated,\n keycloak,\n authenticated,\n setContext,\n contextInfo\n ])\n\n const logout = () => {\n logoutByUser(keycloak)\n }\n\n const leftMenuOpen = () => {\n const leftMenu = document.getElementsByClassName('leftMenu')[0];\n const bgBlack = document.getElementsByClassName('bgBlack')[0];\n // document.body.style.overflow = 'hidden'\n leftMenu.style.left = '0px'\n bgBlack.style.height = `${window.innerHeight}px`\n bgBlack.style.display = 'block'\n }\n\n const changeLanguage = (lng) => {\n i18n.changeLanguage(lng)\n setCookie('language', lng)\n switchLanguage(lng)\n }\n const initialLanguage = { overflow: 'initial', top: '-5px', cursor: 'pointer' }\n return (\n
\n
\n
\n \n \n \n \n {/* eslint-disable-next-line */}\n \n \n
\n
\n \n
\n
\n
\n )\n}\n\nconst mapStateToProps = state => ({\n getKeycloak: state.keycloak,\n getAuthenticated: state.keycloak.authenticated,\n language: state.language,\n contextInfo: state.contextInfo\n})\n\nconst mapDispatchToProps = dispatch => ({\n switchLanguage: (lang) => {\n dispatch({\n type: SET_LANGUAGE,\n payload: lang\n })\n }\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(translate()(Header))","import React from 'react'\nimport { Button } from 'antd'\nimport { IconHelper } from '../../helpers'\nimport { translate } from 'react-i18next'\n\nconst Header = ({ roomName, t }) => {\n const { IconBack } = IconHelper\n return (\n <>\n
\n
\n window.history.back()} style={{ cursor: 'pointer' }} />\n {roomName}\n
\n
\n \n
\n
\n \n )\n}\n\nexport default translate()(Header)","import React from 'react'\nimport { Row, Col, Button } from 'antd'\nimport { IconHelper } from '../../helpers'\nimport { translate } from 'react-i18next'\nimport { useSelector } from 'react-redux'\nimport { isEmpty } from 'lodash'\n\nconst Announcement = ({ setIsEdit, t }) => {\n const { IconEdit } = IconHelper\n const announcement = useSelector(state => state.lobby.announcement)\n return (\n <>\n
\n
\n
{t(\"lobby_announcement\")}
\n
\n \n
\n
\n
\n \n \n

\n {!isEmpty(announcement)\n ? announcement\n : }\n

\n \n
\n
\n
\n \n )\n}\n\nexport default translate()(Announcement)","import { SET_RUNNING, CHECK_TOKEN_EXPIRE } from './type'\n\nexport const showSpinner = {\n type: SET_RUNNING,\n payload: {\n spinner: true\n }\n}\n\nexport const hideSpinner = {\n type: SET_RUNNING,\n payload: {\n spinner: false\n }\n}\n\nexport const checkTokenExpire = {\n type: CHECK_TOKEN_EXPIRE\n}\n\n// testFn: (text) => {\n// dispatch({\n// type: 'ADD_TODO',\n// payload: {\n// text\n// }\n// });\n// }\n","import React, { useEffect, useState } from 'react'\nimport { Row, Col, Button, Input } from 'antd'\nimport { translate } from 'react-i18next'\nimport {\n updateAnnouncement\n} from '../../helpers'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { showSpinner, hideSpinner } from '../../redux/actions/actions'\n\nconst EditAnnouncement = ({ setIsEdit, t }) => {\n const { TextArea } = Input\n const dispatch = useDispatch()\n const [announcementInput, setAnnouncementInput] = useState('')\n const announcement = useSelector(state => state.lobby.announcement)\n const onEditText = (text) => {\n const value = text.target.value\n if (value.length <= 1500)\n setAnnouncementInput(value);\n }\n const onUpdateAnnouncement = async () => {\n dispatch(showSpinner)\n await updateAnnouncement(announcementInput)\n dispatch(hideSpinner)\n setIsEdit(false)\n }\n useEffect(() => {\n setAnnouncementInput(announcement)\n }, [announcement])\n return (\n <>\n
\n
\n
{t(\"lobby_announcement\")}
\n
\n \n \n
\n
\n
\n \n \n \n \n \n
\n
\n \n )\n}\n\nexport default translate()(EditAnnouncement)","import React, { useState, useEffect } from 'react'\nimport { Modal, Row, Col, Input, Button, Form } from 'antd';\nimport { translate } from 'react-i18next'\nimport { checkTokenExpire } from './../../redux/actions/actions'\nimport { useDispatch } from 'react-redux'\n\nconst ModalEditParticipant = ({ visible, title, setEditParticipant, t, userInfo, handleChatApi }) => {\n \n const [form] = Form.useForm()\n const [name, setName] = useState('')\n const [nameError, setnameError] = useState(false)\n const dispatch = useDispatch()\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n \n form.setFieldsValue({\n name: userInfo.name\n \n })\n \n \n \n }, [form , userInfo.name])\n\n \n const handleCancel = () => {\n setEditParticipant(false)\n setnameError(false)\n form.setFieldsValue({\n name: userInfo.name\n \n })\n \n };\n\n\n const onAuthenRocket = () => {\n dispatch(checkTokenExpire)\n if (name !== '') {\n setLoading(true)\n const user = { ...userInfo, name }\n handleChatApi(user)\n setTimeout(() => {\n setLoading(false)\n setEditParticipant(false)\n \n }, 900);\n }\n \n \n }\n\n\n const onSetName = (input) => {\n \n if (input.target.value === \"\") {\n setnameError(true)\n \n } else {\n setnameError(false)\n \n }\n setName(input.target.value)\n\n }\n\n const onInputKeydown = (event) => {\n var code = event.keyCode || event.which;\n if (code === 13) {\n if (name !== '') {\n const user = { ...userInfo, name }\n \n setName(user.name)\n handleChatApi(user)\n setEditParticipant(false)\n }\n }\n }\n\n return (\n <>\n \n {/* ,\n \n ]}\n >\n \n \n \n
\n \n onSetName(e)} />\n \n \n
\n {nameError ? (\n {`${t('lobby_modal.name_invalid')}`}\n ) : null\n }\n \n \n \n
\n \n \n )\n}\n\nexport default translate()(ModalEditParticipant)\n","import React, { useState } from 'react'\nimport { Row, Col } from 'antd'\nimport { IconHelper, connectApproveUser, Reject } from \"./../../helpers\"\nimport ModalEditParticipant from './ModalEditParticipant';\nimport { translate } from 'react-i18next'\nimport { useDispatch } from 'react-redux'\nimport { checkTokenExpire } from './../../redux/actions/actions'\n\nconst Header = ({ t, userInfo, handleChatApi, realtimeAPI }) => {\n \n const { IconEditParticipant, IconUserChecked, IconInside, IconCloseGray } = IconHelper\n const dispatch = useDispatch()\n \n\n const [editParticipant, setEditParticipant] = useState(false)\n const ChangeParticipant = (u) => {\n dispatch(checkTokenExpire)\n setEditParticipant(!editParticipant)\n \n }\n \n return (\n <>\n \n \n
\n {userInfo.isMember ? :
}\n {userInfo.isMember && ( <> )} {userInfo.name}\n
\n
@{userInfo.chatUserID}\n
\n\n \n \n \n \n \n \n {/* */}\n \n \n \n \n \n )\n}\n\nexport default translate()(Header)\n","import React, { useState, useEffect } from 'react'\nimport { Modal, Row, Col, Input, Button, Form } from 'antd';\nimport { translate } from 'react-i18next'\n\nconst ModalUpload = ({title, show, dataFile, t, handleCancel, preview, onFinish}) => {\n const [form] = Form.useForm();\n const [description, setDescription] = useState(\"\")\n const [filename, setFilename] = useState(\"\")\n \n const handleChange = (e) => {\n switch (e.target.name) {\n case \"filename\":\n setFilename(e.target.value)\n return false\n case \"description\":\n setDescription(e.target.value)\n return false;\n default:\n return;\n }\n \n } \n\n useEffect(() => {\n form.setFieldsValue({\n filename: dataFile.name,\n description: '',\n preview: preview,\n file: dataFile.originFileObj,\n \n })\n }, [form , preview, dataFile.originFileObj, dataFile.name])\n\n \n \n \n return (\n <>\n \n {t(\"lobby_modal.OK\")}\n ,\n \n ]}\n >\n \n \n \n \n \n \n \n {/* eslint-disable-next-line */}\n \n \n \n handleChange(e)} />\n \n \n \n handleChange(e)} placeholder={\"File Description\"} />\n \n \n \n \n \n \n \n \n \n )\n}\n\nconst styles = {\n img: {\n display: \"block\",\n marginLeft: \"auto\",\n marginRight: \"auto\",\n width: \"50%\"\n }\n}\n\nexport default translate()(ModalUpload)","import React, { useState, useEffect } from 'react'\nimport { Row, Col, Input, Avatar,Tooltip, Image } from 'antd';\nimport Header from './Header'\nimport { MessageMethod } from \"./../../helpers\"\nimport { translate } from 'react-i18next'\n// import Picker, { SKIN_TONE_MEDIUM_DARK } from 'emoji-picker-react';\nimport { CloudDownloadOutlined} from '@ant-design/icons';\n// import styled from \"styled-components\";\nimport { connect } from 'react-redux'\nimport { get, has } from 'lodash'\nimport ModalUpload from './ModalUpload'\n// import MicRecorder from 'mic-recorder-to-mp3';\nimport moment from \"moment\"\n//import md5 from 'md5'\n\n// const Mp3Recorder = new MicRecorder({ bitRate: 128 });\n\n// const IconButtonWrapper = styled.div`\n// width: 14px;\n// height: 14px;\n// float: right;\n// transform: rotate(0deg);\n// overflow: hidden;\n// transition: all 0.3s ease-out;\n// transform: ${props => (props.rotation ? `rotate(134deg)` : \"\")};\n// `;\n\n\n\n\nconst Chat = ({ t, userInfo, handleChatApi, HistoryMsg, onInputKeydown, setMsg, msg, unreadNotLoaded }) => {\n\n const { TextArea } = Input\n // const { IconSmile, IconMicrophone, IconPlus } = IconHelper\n // const [rotation, setRotate] = useState(false)\n // const [visible, setVisible] = useState(false)\n const [showModal, setShowModal] = useState({\n show: false,\n dataFile: '',\n preview: '',\n fileList: []\n })\n // const [audio, setAudio] = useState({\n // isRecording: false,\n // blobURL: '',\n // isBlocked: false,\n // })\n // const onEmojiClick = (event, emojiObject) => {\n \n // setMsg(msg + emojiObject.emoji);\n // };\n\n const handleChange = (e) => {\n const { value } = e.target;\n setMsg(value)\n }\n\n // const handleClick = () => {\n // setRotate(!rotation)\n\n // };\n\n // const media = async () => {\n // if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // await navigator.mediaDevices.getUserMedia({ audio: true },\n // () => {\n // console.log('Permission Granted');\n // setAudio({ isBlocked: false });\n // },\n // () => {\n // console.log('Permission Denied');\n // setAudio({ isBlocked: true })\n // },\n // );\n // }\n // }\n\n useEffect(() => {\n\n //media()\n\n }, [])\n\n // const dummyRequest = ({ file, onSuccess }) => {\n // setTimeout(() => {\n // onSuccess(\"OK\")\n // }, 0);\n // }\n\n const handleCancel = () => {\n setShowModal({ show: false, dataFile: '', fileList: [], preview: \"\" })\n }\n\n useEffect(() => {\n onLayoutHeight()\n window.addEventListener('resize', onLayoutHeight)\n updateScroll()\n })\n\n const updateScroll = () => {\n var element = document.getElementsByClassName(\"inbox_chat\")[0];\n element.scrollTop = element.scrollHeight\n }\n\n const onLayoutHeight = () => {\n const navCol = document.getElementsByClassName('nav')\n const chatboxCol = document.getElementsByClassName(\"inbox_chat\")\n const inputAreaChat = document.getElementsByClassName(\"input-area-chat\")\n if (navCol[0] && chatboxCol[0]) {\n let nav = navCol[0].offsetHeight\n chatboxCol[0].style.height = `${window.innerHeight - (nav + inputAreaChat[0].offsetHeight + 140)}px`\n\n }\n }\n\n // const getBase64 = (file) => {\n // return new Promise((resolve, reject) => {\n // const reader = new FileReader();\n // reader.readAsDataURL(file);\n // reader.onload = () => resolve(reader.result);\n // reader.onerror = error => reject(error);\n // });\n // }\n\n\n // const menu = () => {\n // const props = {\n // name: 'file',\n // customRequest: dummyRequest,\n\n // async onChange(info) {\n\n // if (info.file.status !== 'uploading') {\n // console.log(info.file, info.fileList);\n // }\n // if (info.file.status === 'done') {\n // console.log(`${info.file.name} file uploaded successfully`);\n // setShowModal({\n // fileList: info.fileList,\n // show: true,\n // dataFile: info.file,\n // preview: await getBase64(info.file.originFileObj)\n // })\n\n // } else if (info.file.status === 'error') {\n // console.log(`${info.file.name} file upload failed.`);\n // }\n // },\n // };\n // return (\n // \n // {/* \n // Video message\n // Discussion\n // */}\n\n // \n // \n // \n // Computer\n // \n // \n\n // \n // \n // )\n // };\n\n /**\n * Submit modal form.\n * @param {*} values \n */\n const onFinish = (values) => {\n console.log('vlaues', values)\n let inputFile = {\n \n name: values[\"filename\"],\n type: values[\"file\"][\"type\"],\n _id: values[\"file\"][\"uid\"]\n }\n let imgArr = [];\n let imgObj = Object.assign({}, {\n description: values[\"description\"],\n image_dimensions: {width: 200, height: 200},\n image_preview: values[\"preview\"],\n image_size: values[\"file\"][\"size\"],\n image_type: values[\"file\"][\"type\"],\n image_url: values[\"preview\"],\n title: values[\"file\"][\"name\"],\n title_link: values[\"preview\"],\n title_link_download: true,\n mod: true,\n type: \"file\"\n })\n imgArr.push(imgObj)\n console.log('inputFile', inputFile)\n console.log('imgArr', imgArr)\n let objFile = Object.assign({}, inputFile)\n let inputObj = {\n msg: \"method\",\n method: \"sendMessage\",\n id: \"\" + new Date().getTime(),\n params: [\n {\n _id: \"\" + new Date().getTime(),\n rid: localStorage.getItem(\"chatRoomID\"),//localStorage.getItem('chat'),\n attachments: imgArr,\n file: objFile\n },\n ],\n }\n MessageMethod(inputObj);\n setShowModal({ show: false })\n\n }\n\n // const start = () => {\n // if (audio.isBlocked) {\n // console.log('Permission Denied');\n // } else {\n // Mp3Recorder\n // .start()\n // .then(() => {\n // setAudio({ isRecording: true });\n // }).catch((e) => console.error(e));\n // }\n // };\n\n // const stop = () => {\n // Mp3Recorder\n // .stop()\n // .getMp3()\n // .then(([buffer, blob]) => {\n // const blobURL = URL.createObjectURL(blob)\n // setAudio({ blobURL: blobURL, isRecording: false });\n // }).catch((e) => console.log(e));\n // };\n\n // const showAudio = () => {\n // return (\n // <>\n // \n // \n // \n \n \n \n \n \n \n )\n}\n\nexport default ChooseDevicePage","import React, { useEffect, useState } from 'react'\nimport { Alert, Col, Row } from 'antd';\nimport { isEmpty } from 'lodash';\nimport { translate } from 'react-i18next';\n\nconst AnnouncementHead = ({ t, jwt }) => {\n const [announcementMsg, setAnnouncementMsg] = useState('')\n\n useEffect(() => {\n if (!isEmpty(jwt)) {\n setAnnouncementMsg(t('lobby_participant.announcement_1'))\n } else {\n setAnnouncementMsg(t('lobby_participant.announcement_2'))\n }\n\n }, [jwt, t])\n\n return (\n \n \n \n \n \n )\n}\n\nexport default translate()(AnnouncementHead)\n","import { Col, Row } from 'antd'\nimport { isEmpty } from 'lodash'\nimport React from 'react'\nimport { translate } from 'react-i18next'\n\nconst AnnouncementMsg = ({ t, announcement }) => {\n return (\n !isEmpty(announcement) && announcement.length > 0 ? (\n \n \n
\n
\n
\n

{t('lobby_participant.announcement_text')}

\n
\n
\n {announcement}\n
\n
\n
\n \n
\n ) : null\n )\n}\n\nexport default translate()(AnnouncementMsg)\n","import { Col, Row } from 'antd'\nimport React from 'react'\nimport { translate } from 'react-i18next'\nimport { IconHelper } from '../../helpers/index'\n\nconst Header = ({ t }) => {\n const { IconArrowBack } = IconHelper\n\n const handleBack = () => {\n window.location.href = `${window._env_.vRoomUrl}/portal`\n }\n\n return (\n \n \n \n {t('lobby_participant.leave')}\n \n \n )\n}\n\nexport default translate()(Header)\n\n","import { isEmpty, isNull } from \"lodash\";\nimport { useEffect } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { anonymousRocketChat, setRocketStore, createRocketChat, setAnonymousLobby, getCookie, setOverridename } from \"../../helpers\";\nimport { SET_CONNECT_LOBBY } from \"../../redux/actions/type\";\n\nconst AnonymousRocket = ({ anonymouseInfo, roomName, isReady, reservationId }) => {\n const dispatch = useDispatch()\n const { name: anonymousName, id: anonymousID } = anonymouseInfo\n\n useEffect(() => {\n const initConn = async () => {\n if (isReady && !isNull(reservationId)) {\n try {\n const rocketChatInfo = getCookie('rocketChatInfo') ? JSON.parse(getCookie('rocketChatInfo')) : {}\n\n //check change Name\n if (!isEmpty(rocketChatInfo) && decodeURIComponent(rocketChatInfo.name) !== decodeURIComponent(anonymousName)) {\n await setOverridename({ overrideName: decodeURIComponent(anonymousName), chatUserID: rocketChatInfo.chatUserID }, 'AnonymousRocket')\n }\n\n //authen rocket\n const { chatUserID, chatUserToken } = await anonymousRocketChat({ anonymousName: decodeURIComponent(anonymousName), anonymousID })\n\n // createChatRoom\n const { data: { group: { _id, name } } } = await createRocketChat({ members: [anonymousID], name: `${reservationId}_${chatUserID}` })\n setRocketStore({ name: anonymousName, chatUserID, chatUserToken, reservationId })\n\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n lobbyRoomID: name\n }\n })\n\n //connect rocket chat.\n setAnonymousLobby({ name: anonymousName, chatUserID, chatUserToken, roomName, reservationId, chatRoomId: _id, anonymousID }, dispatch)\n\n } catch (error) {\n console.error('AnonymousRocketConn', error)\n }\n }\n }\n initConn()\n }, [anonymousName, anonymousID, roomName, isReady, reservationId, dispatch])\n\n return null\n}\n\nexport default AnonymousRocket\n","import React, { useEffect, useState } from 'react'\nimport { Modal, Button, Form, Input, Select, Row, Col } from 'antd';\nimport { routersHelper } from '../../helpers/index';\nimport { isEmpty } from 'lodash';\nimport { v4 as uuid } from 'uuid';\nimport AnonymousRocket from './AnonymousRocket';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { SAVE_ANONYMOUS_INFO } from '../../redux/actions/type';\nimport { translate } from 'react-i18next';\n\nconst ModalInformation = ({ t, showModal, setshowModal, roomName, reservationId }) => {\n const [form] = Form.useForm();\n const dispatch = useDispatch()\n const { useRouter } = routersHelper\n const router = useRouter()\n const anonymouseInfo = useSelector(state => state.contextInfo.anonymousInfo)\n const [isReady, setIsReady] = useState(false)\n\n useEffect(() => {\n const { name, id } = anonymouseInfo\n if (isEmpty(name) || isEmpty(id)) {\n setshowModal(true)\n }\n\n if (!isEmpty(name)) {\n form.setFieldsValue({\n name: decodeURIComponent(name)\n })\n }\n\n }, [anonymouseInfo, setshowModal, form])\n\n const handleOk = (e) => {\n const nameInput = form.getFieldValue(['name'])\n if (!isEmpty(nameInput)) {\n handleSubmit(nameInput)\n }\n }\n\n const handleName = (e) => {\n const nameInput = form.getFieldValue(['name'])\n if (!isEmpty(nameInput) && e.charCode === 13) {\n handleSubmit(nameInput)\n }\n }\n\n const handleCancel = (e) => {\n setshowModal(false)\n window.location.href = `${window._env_.vRoomUrl}/portal`\n }\n\n const handleSubmit = (nameInput) => {\n form.submit()\n setshowModal(false)\n const anonymousID = uuid()\n const { id } = anonymouseInfo\n dispatch({\n type: SAVE_ANONYMOUS_INFO,\n payload: {\n name: encodeURIComponent(nameInput),\n id: isEmpty(id) ? anonymousID : id\n }\n })\n setIsReady(true)\n // setshowAnnounce(true)\n }\n\n return (\n <>\n }\n footer={[\n ,\n ,\n ]}\n >\n \n \n

\n {t('lobby_participant.modal.info')}\n

\n \n
\n \n \n \n \n {\n router.pathname === '/participant/live' ? (\n \n \n {t('lobby_participant.modal.select_option_1')}\n {t('lobby_participant.modal.select_option_2')}\n \n \n ) : null\n }\n \n \n\n \n \n )\n}\n\nexport default translate()(ModalInformation)\n","import { Col, Row } from 'antd';\nimport React, { useEffect } from 'react'\nimport { translate } from 'react-i18next';\nimport { useSelector } from 'react-redux';\n\nconst IframChat = ({ t, isConnect }) => {\n const roomID = useSelector(state => state.lobby.lobbyRoomID)\n\n useEffect(() => {\n const contentHeight = () => {\n const IframChat = document.getElementsByClassName('IframChat')[0]\n const nav = document.getElementsByClassName('participant-header')[0]\n const antAlertMessage = document.getElementsByClassName('ant-alert-message')[0]\n const title = document.getElementsByClassName('participant-chat-title')[0]\n const participantBody = document.getElementsByClassName('participant-chat-body')[0]\n if (IframChat) {\n const antAlertMessageHeight = antAlertMessage ? antAlertMessage?.offsetHeight + 20 : 0\n const chatHeight = `${(window.innerHeight - (nav.offsetHeight) - antAlertMessageHeight) - title?.offsetHeight}px`\n const heightChat = `${window.innerHeight - 105}px`\n if (window.innerWidth < 1024) {\n participantBody.style.height = heightChat\n IframChat.style.height = heightChat\n } else {\n participantBody.style.height = chatHeight\n IframChat.style.height = chatHeight\n }\n }\n\n }\n contentHeight()\n // window.addEventListener('resize', contentHeight);\n }, [])\n\n /**\n * mock show chat\n */\n useEffect(() => {\n const participantChat = document.getElementsByClassName('participant-chat')[0]\n if (participantChat && isConnect) {\n if (window.innerWidth < 1024) {\n participantChat.style.width = '100%'\n } else {\n participantChat.style.width = '400px'\n }\n }\n }, [isConnect, roomID])\n\n return (\n <>\n \n \n
\n
\n {t('lobby_participant.moderator')}\n
\n \n `\n }}\n />\n
\n \n
\n \n )\n}\n\nexport default translate()(IframChat)\n","import { Col } from 'antd';\nimport React from 'react'\nimport { translate } from 'react-i18next';\nimport { IconHelper } from '../../helpers/index';\n\nconst Wating = ({ t, roomName }) => {\n const { IconSpinner } = IconHelper\n return (\n \n
\n \n
\n

{t('lobby_participant.wait_for_host')}

\n

\n {`vroom.truevirtualworld.com/${roomName}`}\n

\n \n )\n}\n\nexport default translate()(Wating)\n","import { useEffect } from 'react'\nimport { setAuthLobby, authenRocketChat, setRocketStore, createRocketChat, setOverridename } from '../../helpers'\nimport { useDispatch } from 'react-redux'\nimport { SET_CONNECT_LOBBY } from '../../redux/actions/type'\nimport { isEmpty, isNull } from 'lodash'\nimport JwtDecode from 'jwt-decode'\n\nconst AuthRucket = ({ roomName, jwt, reservationId }) => {\n const dispatch = useDispatch()\n\n useEffect(() => {\n const initConnect = async () => {\n if (!isEmpty(jwt) && !isNull(reservationId)) {\n try {\n const { context: { user: { name: memberName } } } = JwtDecode(jwt)\n\n //authen rocket\n const authRocketChat = await authenRocketChat(jwt)\n\n //check change Name\n if (memberName !== authRocketChat.name) {\n await setOverridename({ overrideName: memberName, chatUserID: authRocketChat.chatUserID }, 'AuthRucket')\n authRocketChat.name = memberName\n }\n\n //createChatRoom\n const { data: { group: { _id, name } } } = await createRocketChat({ members: [authRocketChat.chatUserName], name: `${reservationId}_${authRocketChat.chatUserID}` })\n setRocketStore({ ...authRocketChat, reservationId })\n\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n lobbyRoomID: name\n }\n })\n\n //connect rocket chat.\n setAuthLobby({ ...authRocketChat, roomName, reservationId, chatRoomId: _id, chatUserID: authRocketChat.chatUserID, vtoken: jwt }, dispatch)\n } catch (error) {\n console.error('AuthRucketConn', error)\n }\n }\n }\n initConnect()\n }, [jwt, roomName, reservationId, dispatch])\n\n return null\n}\n\nexport default AuthRucket\n","import Lobby from './Lobby/Lobby.view'\nimport ChooseDevicePage from './ChooseDevice/ChooseDevice.view';\nimport Participant from './Participant/Participant.view'\nimport Chat from './Chat/Chat.view'\n\nexport const Views = {\n Lobby,\n ChooseDevicePage,\n Participant,\n Chat,\n}","import React, { useState, useEffect } from 'react'\nimport AnnouncementHead from './AnnouncementHead'\nimport AnnouncementMsg from './AnnouncementMsg'\nimport Header from './Header'\nimport ModalInformation from './ModalInformation'\nimport Chat from './IframChat'\nimport Wating from './Wating'\nimport { isEmpty, isNull } from 'lodash'\nimport AuthRucket from './AuthRocketJWT'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { getCookie } from '../../helpers'\nimport { Tabs } from 'antd'\nimport { SET_CONNECT_LOBBY, SHOW_POPUP } from '../../redux/actions/type'\n\nconst Participant = ({ roomName, jwt, reservationId }) => {\n const [showModal, setshowModal] = useState(true)\n const isConnect = useSelector(state => state.lobby.connecting)\n const announcement = useSelector(state => state.lobby.announcement)\n const [screenWidth, setScreenWidth] = useState(0)\n const { TabPane } = Tabs;\n const [activeTabPane, setActiveTabPane] = useState('1')\n const [activeTime, setActiveTime] = useState(null)\n const dispatch = useDispatch()\n\n\n const handleIframeChat = () => {\n const rocketChatInfo = getCookie('rocketChatInfo') ? JSON.parse(getCookie('rocketChatInfo')) : {}\n if (!isEmpty(rocketChatInfo) && isConnect) {\n return \n }\n }\n\n const handleAuthState = () => {\n if (!isEmpty(jwt)) {\n return \n } else {\n return \n\n }\n }\n\n useEffect(() => {\n document.body.style.setProperty('background-color', '#fff', 'important')\n })\n\n useEffect(() => {\n onLayoutHeight()\n window.addEventListener('resize', onLayoutHeight);\n })\n\n useEffect(() => {\n if (isConnect) {\n setActiveTabPane('2')\n }\n }, [isConnect])\n\n /**\n * set window active time\n */\n useEffect(() => {\n const currrentTime = Date.parse(new Date())\n setActiveTime(currrentTime)\n localStorage.setItem('windowActiveTime', currrentTime)\n }, [])\n\n useEffect(() => {\n setInterval(() => {\n const getActiveTime = localStorage.getItem('windowActiveTime')\n if (parseInt(activeTime) < parseInt(getActiveTime)) {\n setshowModal(false)\n dispatch({\n type: SET_CONNECT_LOBBY,\n payload: {\n connecting: false\n }\n })\n dispatch({\n type: SHOW_POPUP,\n payload: {\n isShow: true,\n textBody: 'popupInfo.duplicate_tap',\n action: `${window._env_.vRoomUrl}/portal`\n }\n })\n }\n }, 1000);\n }, [activeTime, dispatch])\n\n const onLayoutHeight = () => {\n const participantAlert = document.getElementsByClassName('participant-alert')\n const participantWatingBox = document.getElementsByClassName('participant-wating-box')\n if (participantAlert[0] && participantWatingBox[0]) {\n if (window.innerWidth < 1024)\n participantWatingBox[0].style.minHeight = `${window.innerHeight - (participantAlert[0].offsetHeight + 170)}px`\n }\n return setScreenWidth(window.innerWidth)\n }\n const handleTabclick = (key) => {\n setActiveTabPane(key);\n }\n return (\n !isNull(reservationId) ? (\n
\n
\n {screenWidth < 1024\n ? \n \n \n
\n \n \n
\n
\n \n {handleIframeChat()}\n \n
\n :
\n \n
\n \n \n
\n {handleIframeChat()}\n
\n }\n {handleAuthState()}\n
\n ) : null\n )\n}\n\nexport default Participant\n","import React, { useEffect } from 'react'\nimport { Views } from '../../views'\nimport { connect, useDispatch } from 'react-redux'\nimport { get } from 'lodash'\nimport { routersHelper, setCookie } from '../../helpers'\nimport { CONNECT_SOCKET, SET_LANGUAGE } from '../../redux/actions/type'\nimport i18n from '../../i18n'\n\n\nconst Lobby = ({ keycloak, authenticated, language, lobbyLists, switchLanguage }) => {\n const { Lobby } = Views\n const { useRouter } = routersHelper\n const router = useRouter()\n const dispatch = useDispatch()\n const newLobbyLists = lobbyLists.map(item => {\n item.showNoti = false\n return item\n })\n\n useEffect(() => {\n dispatch({\n type: CONNECT_SOCKET,\n payload: {\n name: router.query,\n dispatch\n }\n })\n\n // eslint-disable-next-line\n }, [])\n\n //default Thai Language.\n useEffect(() => {\n const changeLanguage = (lng) => {\n i18n.changeLanguage(lng)\n setCookie('language', lng)\n switchLanguage(lng)\n }\n changeLanguage('th')\n }, [switchLanguage])\n\n return (\n\n \n )\n}\n\nconst mapStateToProps = state => ({\n keycloak: get(state, 'keycloak', ''),\n authenticated: get(state, 'keycloak.authenticated', false),\n language: get(state, 'language', 'th'),\n lobbyLists: get(state, 'lobby.lobbyLists', []),\n})\n\nconst mapDispatchToProps = dispatch => ({\n switchLanguage: (lang) => {\n dispatch({\n type: SET_LANGUAGE,\n payload: lang\n })\n }\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Lobby)","import React from 'react'\nimport { Views } from '../../views'\n\nconst ChooseDevicePage = () => {\n const { ChooseDevicePage } = Views\n return (\n \n )\n}\n\nexport default ChooseDevicePage","import React from 'react'\nimport { useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom'\nimport moment from 'moment'\nimport Header from './Header'\nimport Lobby from '../components/Lobby/Lobby.component'\nimport ChooseDevice from '../components/ChooseDevice/ChooseDevice.component';\nimport { isMobile } from 'react-device-detect'\nimport th from 'moment/locale/th'\nimport cn from 'moment/locale/zh-cn'\nimport en from 'moment/locale/es-us'\n\nconst RouteView = () => {\n const language = useSelector(state => state.language)\n\n if (language === 'th') {\n moment.updateLocale('th', [th])\n } else if (language === 'cn') {\n moment.updateLocale('zh-cn', [cn])\n } else {\n moment.updateLocale('en', [en])\n }\n\n return (\n <>\n {!isMobile\n ?
\n :
\n }\n \n \n \n \n
\n \n )\n}\n\nexport default RouteView","import React, { useEffect, useState } from 'react'\nimport { useSelector } from 'react-redux';\nimport { Row, Col, Button } from 'antd';\nimport { IconHelper, logoutByUser, charectorLength, setCookie } from '../helpers'\nimport { isEmpty } from 'lodash';\nimport { translate } from 'react-i18next'\nimport i18n from '../i18n'\nimport { connect } from 'react-redux'\nimport { SET_LANGUAGE } from '../redux/actions/type'\nimport { login } from '../helpers'\n\n\nconst LeftBar = ({ t, switchLanguage, language, contextInfo }) => {\n const { IconUser, IconClose, IconEN, IconTH, IconCN, IconMenuSupport, IconContact, IconMenuPrice, IconMenuMeeting, IconMenuMyRecords } = IconHelper\n const [context, setContext] = useState({\n avatar: '',\n name: '',\n p: '',\n pkgcode: '',\n })\n const [imgUrl, setImgUrl] = useState({\n src: '',\n errored: false\n })\n const leftMenuClose = () => {\n const leftMenu = document.getElementsByClassName('leftMenu')[0];\n const bgBlack = document.getElementsByClassName('bgBlack')[0];\n // document.body.style.overflow = 'auto'\n leftMenu.style.left = '-300px'\n bgBlack.style.display = 'none'\n }\n const keycloak = useSelector(state => state.keycloak)\n const { authenticated } = useSelector(state => state.keycloak)\n\n const logout = () => {\n logoutByUser(keycloak)\n }\n\n const imgError = () => {\n if (!imgUrl.errored) {\n setImgUrl({\n src: `${process.env.PUBLIC_URL}/img/Mask_Group.png`,\n errored: true,\n })\n }\n }\n\n useEffect(() => {\n if (authenticated && !isEmpty(keycloak)) {\n setContext({\n ...contextInfo,\n name: contextInfo.name.split(\" \")[0] || ''\n })\n setImgUrl({\n src: contextInfo.avatar,\n errored: false,\n })\n }\n }, [authenticated, keycloak, setImgUrl, contextInfo])\n\n const changeLanguage = (lng) => {\n i18n.changeLanguage(lng)\n setCookie('language', lng)\n switchLanguage(lng)\n }\n const initialLanguage = { overflow: 'initial', top: '-5px', cursor: 'pointer' }\n return (\n <>\n \n \n
\n
\n \n \n {!authenticated ? (\n ) : (\n
\n {/* eslint-disable-next-line */}\n \n
\n )\n }\n \n
\n \n \n \n {context.name.length > 15 ?\n \n :\n \n }\n \n \n {/* \n \n \n
\n {authenticated ? context.pkgcode : 'Guest'}\n
\n \n
*/}\n
\n
\n \n \n {\n !authenticated ? (\n

{t('left_bar_text')}

\n ) : ('')\n }\n {/* */}\n {\n authenticated ? (\n \n ) : (\n \n )\n }\n \n
\n
\n {/*
\n ตั้งค่า \n
*/}\n
\n \n \n \n \n \n
\n
\n \n \n
    \n
  • \n \n \n \n
  • \n
\n \n
\n
\n
\n \n \n
\n \n
\n \n
\n \n )\n}\n\nconst mapStateToProps = state => ({\n language: state.language,\n contextInfo: state.contextInfo\n})\n\nconst mapDispatchToProps = dispatch => ({\n switchLanguage: (lang) => {\n dispatch({\n type: SET_LANGUAGE,\n payload: lang\n })\n }\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(translate()(LeftBar))","import React, { useEffect, useState } from 'react'\nimport { Views } from '../../views'\nimport { connect } from 'react-redux'\nimport { get, isEmpty } from 'lodash'\nimport { destroyRocketChatInfo, getAuthMethod, routersHelper, setCookie } from '../../helpers'\nimport { SAVE_VROOM_TOKEN, SET_LANGUAGE } from '../../redux/actions/type'\nimport { useDispatch } from 'react-redux'\nimport i18n from '../../i18n'\n\n\n\nconst Participant = ({ language, switchLanguage }) => {\n const { Participant } = Views\n const { useRouter } = routersHelper\n const router = useRouter()\n const { match: { params } } = router\n const { name } = params\n const { query: { jwt, lang } } = router\n const dispatch = useDispatch()\n const [reservationId, setReservationId] = useState(null)\n\n\n useEffect(() => {\n if (isEmpty(name)) {\n window.location.href = window._env_.vRoomUrl\n }\n\n if (jwt) {\n window.history.pushState('', 'VROOM', `/${name}`);\n dispatch({\n type: SAVE_VROOM_TOKEN,\n payload: {\n jwt\n }\n })\n }\n })\n\n useEffect(() => {\n const initParticipant = async () => {\n try {\n //clear old rocketChatInfo\n await destroyRocketChatInfo()\n //get reservation id\n const { id } = await getAuthMethod(name)\n setReservationId(id)\n } catch (error) {\n console.error('initParticipant', error)\n }\n }\n const changeLanguage = (lng) => {\n i18n.changeLanguage(lng)\n setCookie('language', lng)\n switchLanguage(lng)\n }\n\n initParticipant()\n\n if (!isEmpty(lang) && lang.toLowerCase() === 'th') {\n changeLanguage('th')\n } else if (!isEmpty(lang) && lang.toLowerCase() === 'zhcn') {\n changeLanguage('cn')\n } else {\n changeLanguage('en')\n }\n }, [name, lang, switchLanguage])\n\n return (\n \n )\n}\n\nconst mapStateToProps = state => ({\n language: get(state, 'language', 'th')\n})\n\nconst mapDispatchToProps = dispatch => ({\n switchLanguage: (lang) => {\n dispatch({\n type: SET_LANGUAGE,\n payload: lang\n })\n }\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Participant)","import React from 'react'\nimport { Modal, Button } from 'antd'\nimport { routersHelper } from '../helpers'\nimport { useSelector } from 'react-redux'\nimport { IconHelper } from '../helpers'\nimport { translate } from 'react-i18next'\n\nconst PopupStatus = ({ t }) => {\n const popupStatus = useSelector(state => state.backgroundRunning.popupStatus)\n const { IconStatusErr } = IconHelper\n const { useRouter } = routersHelper\n const router = useRouter()\n const { query: { message } } = router\n\n const getIcon = () => {\n switch (popupStatus.status) {\n case 'error':\n return \n default:\n return null;\n }\n }\n\n const setRedText = () => {\n switch (message) {\n case 'error_text_2':\n return 'red-text'\n default:\n return '';\n }\n }\n\n return (\n OK}\n className=\"popup-status\"\n >\n
\n
\n {getIcon()}\n
\n
\n

{t('error_text_main')}

\n

{t(popupStatus.body)}

\n
\n
\n\n \n )\n}\n\nexport default translate()(PopupStatus)\n\n","import React, { useEffect } from 'react'\nimport { Route, Switch, Redirect } from 'react-router-dom'\nimport ReactGA from 'react-ga'\nimport { isMobile } from 'react-device-detect'\nimport routeView from './routeView'\nimport LeftMenu from './LeftBar'\nimport Participant from '../components/Participant/Participant.component';\nimport { routersHelper } from '../helpers'\nimport { Spin } from 'antd'\nimport { useSelector } from 'react-redux'\nimport PopupStatus from '../helpers/PopupStatus'\n\nconst initializeReactGA = (page) => {\n ReactGA.initialize(window._env_.GoogleAnalyticsKey);\n ReactGA.pageview(page);\n}\nconst Router = () => {\n const spinner = useSelector(state => state.backgroundRunning.spinner)\n const { useRouter } = routersHelper\n const router = useRouter()\n\n useEffect(() => {\n initializeReactGA(router.pathname)\n }, [router.pathname])\n\n return (\n <>\n \n \n {!isMobile\n ? \n :
\n }\n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Router","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import {\n SET_KEYCLOAK\n} from '../actions/type'\n\nconst initialState = {}\n\nconst authentication = (state = initialState, action) => {\n switch (action.type) {\n case SET_KEYCLOAK: {\n const payload = action.payload;\n return payload.keycloak;\n }\n default:\n return state\n }\n}\n\nexport default authentication","import {\n SET_LANGUAGE,\n} from '../actions/type'\n\nconst initialState = localStorage.getItem('i18nextLng')\n\nconst language = (state = initialState, action) => {\n switch (action.type) {\n case SET_LANGUAGE: {\n const payload = action.payload;\n return payload;\n }\n default:\n return state\n }\n}\n\nexport default language","import { SET_RUNNING, SET_POPUP_STATUS } from '../actions/type'\n\nconst initialState = {\n spinner: false,\n popupStatus: {\n isShow: false,\n status: '',\n header: '',\n body: '',\n action: null\n }\n}\n\nconst backgroundRunning = (state = initialState, action) => {\n switch (action.type) {\n case SET_RUNNING: {\n const payload = action.payload\n return { ...state, ...payload }\n }\n case SET_POPUP_STATUS: {\n const payload = action.payload;\n return { ...state, popupStatus: { ...payload } }\n }\n default:\n return state\n }\n}\n\nexport default backgroundRunning","import { isEmpty } from 'lodash';\nimport { REMOVE_VROOM_TOKEN, SET_CONTEXT, SET_VROOM_TOKEN, SET_ANONYMOUS_INFO, REMOVE_ANONYMOUS_INFO } from '../actions/type';\n\n\nconst initState = {\n p: '',\n name: '',\n pkgcode: '',\n email: '',\n avatar: '',\n vroomToken: '',\n anonymousInfo: {\n id: '',\n name: ''\n }\n}\n\nconst token = localStorage.getItem('vroomToken')\n//add token from localstorage\nif (!isEmpty(token)) {\n initState.vroomToken = token\n}\n\nconst contextInfo = (state = initState, action) => {\n switch (action.type) {\n case SET_CONTEXT: {\n const { payload } = action\n return { ...state, ...payload };\n }\n case SET_VROOM_TOKEN: {\n const { payload } = action\n return { ...state, ...payload };\n }\n case REMOVE_VROOM_TOKEN: {\n localStorage.removeItem('vroomToken')\n return { ...state, vroomToken: '' }\n }\n case SET_ANONYMOUS_INFO: {\n const { payload } = action\n return { ...state, ...payload };\n }\n case REMOVE_ANONYMOUS_INFO: {\n localStorage.removeItem('anonymousInfo')\n const anonymousInfo = {\n id: '',\n name: ''\n }\n return { ...state, anonymousInfo }\n }\n default:\n return state;\n\n }\n}\n\nexport default contextInfo","import {\n SET_ANNOUNCEMENT,\n SET_CONNECT_LOBBY,\n SET_LOBBY_LIST,\n} from '../actions/type'\n\nconst initialState = {\n connecting: false,\n lobbyLists: [],\n lobbyRoomID: null,\n announcement: ''\n}\n\nconst lobby = (state = initialState, action) => {\n switch (action.type) {\n case SET_LOBBY_LIST: {\n const payload = action.payload;\n return { ...state, ...payload };\n }\n case SET_CONNECT_LOBBY: {\n const payload = action.payload;\n return { ...state, ...payload }\n }\n case SET_ANNOUNCEMENT: {\n const payload = action.payload\n return { ...state, ...payload }\n }\n default:\n return state\n }\n}\n\nexport default lobby","import { SHOW_POPUP, HIDE_POPUP } from '../actions/type'\n\nconst initState = {\n isShow: false,\n textHeader: '',\n textBody: '',\n textButton: '',\n action: {}\n}\n\nconst popup = (state = initState, action) => {\n const { payload, type } = action\n switch (type) {\n case SHOW_POPUP:\n return { ...state, ...payload }\n case HIDE_POPUP:\n return { ...state, ...payload }\n default:\n return state;\n }\n}\n\nexport default popup","import { combineReducers } from 'redux'\nimport keycloak from './keycloak';\nimport language from './language'\nimport backgroundRunning from './backgroundRunning'\nimport contextInfo from './contextInfo'\nimport lobby from './lobby'\nimport popup from './popup'\n\nconst rootReducer = combineReducers({\n keycloak,\n language,\n backgroundRunning,\n contextInfo,\n lobby,\n popup\n})\n\nexport default rootReducer","import { put, call } from 'redux-saga/effects'\nimport { SET_LANGUAGE, SET_ANONYMOUS_INFO } from '../actions/type'\nimport i18n from '../../i18n'\nimport { getCookie } from '../../helpers'\nimport { isEmpty } from 'lodash'\n\nfunction* setLocale() {\n const lng = getCookie('language')\n i18n.changeLanguage(lng)\n yield put({\n type: SET_LANGUAGE,\n payload: !isEmpty(lng) ? lng : 'th'\n })\n}\n\nfunction* setAnonymouseInfo() {\n const info = localStorage.getItem('anonymousInfo') ? JSON.parse(localStorage.getItem('anonymousInfo')) : {}\n if (!isEmpty(info)) {\n yield put({\n type: SET_ANONYMOUS_INFO,\n payload: {\n anonymousInfo: info\n }\n })\n }\n\n}\n\nfunction* startup() {\n localStorage.removeItem(\"vtoken\")\n yield call(setLocale)\n yield call(setAnonymouseInfo)\n}\n\nexport default startup","import { put, call, takeLatest, select } from 'redux-saga/effects'\nimport { INIT_KEYCLOAK, SET_KEYCLOAK, LOG_OUT, SET_CONTEXT, CHECK_TOKEN_EXPIRE, CONNECT_SOCKET } from '../actions/type'\nimport { logoutByUser, getContextInfo, setCookie, destroyUserInfo, genVRoomToken, getSelector, initiateSocket, authen } from '../../helpers';\nimport Keycloak from \"keycloak-js\";\nimport { isEmpty } from 'lodash';\n\nconst languageSelector = getSelector('language')\n\nasync function onKeycloak() {\n // const keycloak = Keycloak(process.env.PUBLIC_URL+\"/keycloak.json\");\n const keycloak = Keycloak({ clientId: window._env_.clientid, realm: window._env_.realm, url: window._env_.keycloak_url });\n console.log(\"onKeycloak\", keycloak)\n await keycloak\n .init({\n onLoad: \"check-sso\",\n checkLoginIframe: false,\n silentCheckSsoRedirectUri:\n window.location.origin + \"/\" + process.env.PUBLIC_URL + \"/silent-check-sso.html\",\n })\n return keycloak\n}\n\nfunction* initKeycloak() {\n const keycloak = yield call(onKeycloak)\n yield put({\n type: SET_KEYCLOAK,\n payload: {\n keycloak,\n authenticated: keycloak.authenticated\n }\n })\n\n let { refreshToken, authenticated } = keycloak\n setCookie('keycloak', JSON.stringify({ refreshToken, authenticated }))\n\n if (!isEmpty(keycloak) && keycloak.authenticated) {\n let context = yield call(getContextInfo, keycloak)\n if (!isEmpty(context)) {\n let { avatar, email, name, p, pkgcode } = context\n yield put({\n type: SET_CONTEXT,\n payload: {\n avatar, email, name, p, pkgcode\n }\n })\n }\n }\n}\n\nfunction* bypassLogout({ payload }) {\n const { path } = payload\n const keycloak = yield call(onKeycloak)\n yield put({\n type: SET_KEYCLOAK,\n payload: {\n keycloak: keycloak\n }\n })\n if (keycloak.authenticated) {\n yield call(logoutByUser, keycloak)\n } else {\n window.location.href = path\n // yield call(router.history.push, path)\n }\n}\n\n\nfunction* checkTokenExpire() {\n const keycloak = yield call(onKeycloak)\n const token = yield call(genVRoomToken, keycloak)\n const language = yield select(languageSelector)\n\n yield put({\n type: SET_KEYCLOAK,\n payload: {\n keycloak: keycloak\n }\n })\n if (isEmpty(token)) {\n destroyUserInfo()\n window.location.href = keycloak.createLoginUrl() + `&ui_locales=${language}`\n }\n}\n\nfunction* connectSocket({ payload }) {\n const { name, dispatch } = payload\n const keycloak = yield call(onKeycloak)\n const token = yield call(genVRoomToken, keycloak)\n const language = yield select(languageSelector)\n\n yield put({\n type: SET_KEYCLOAK,\n payload: {\n keycloak: keycloak\n }\n })\n if (isEmpty(token)) {\n destroyUserInfo()\n window.location.href = keycloak.createLoginUrl() + `&ui_locales=${language}`\n }\n\n yield call(authen)\n const setcID = JSON.parse(localStorage.getItem('setChatID'))\n \n yield call(initiateSocket, name, dispatch, setcID?.chatUserID)\n\n let { refreshToken, authenticated } = keycloak\n setCookie('keycloak', JSON.stringify({ refreshToken, authenticated }))\n\n if (!isEmpty(keycloak) && keycloak.authenticated) {\n let context = yield call(getContextInfo, keycloak)\n if (!isEmpty(context)) {\n let { avatar, email, name, p, pkgcode } = context\n yield put({\n type: SET_CONTEXT,\n payload: {\n avatar, email, name, p, pkgcode\n }\n })\n }\n }\n}\n\n\nfunction* authentication() {\n yield takeLatest(INIT_KEYCLOAK, initKeycloak)\n yield takeLatest(LOG_OUT, bypassLogout)\n yield takeLatest(CHECK_TOKEN_EXPIRE, checkTokenExpire)\n yield takeLatest(CONNECT_SOCKET, connectSocket)\n}\n\nexport default authentication","import { takeLatest } from 'redux-saga/effects'\nimport { MOBILE_URL } from '../actions/type'\n\nfunction openUrlVroomMobile() {\n window.location.href = '/openVroom'\n}\n\nfunction* detectMobile() {\n yield takeLatest(MOBILE_URL, openUrlVroomMobile)\n}\n\nexport default detectMobile","import { isEmpty } from \"lodash\";\nimport { put, takeLatest } from \"redux-saga/effects\";\nimport { SAVE_ANONYMOUS_INFO, SAVE_VROOM_TOKEN, SET_ANONYMOUS_INFO, SET_VROOM_TOKEN } from \"../actions/type\";\n\nfunction* saveAnonymousInfo({ payload }) {\n const { name, id } = payload\n yield put({\n type: SET_ANONYMOUS_INFO,\n payload: {\n anonymousInfo: { name, id }\n }\n })\n localStorage.setItem('anonymousInfo', JSON.stringify({ name, id }))\n}\n\nfunction* saveVroomToken({ payload }) {\n const { jwt } = payload\n if (!isEmpty(jwt)) {\n yield put({\n type: SET_VROOM_TOKEN,\n payload: {\n vroomToken: jwt\n }\n })\n }\n}\n\nfunction* lobby() {\n yield takeLatest(SAVE_ANONYMOUS_INFO, saveAnonymousInfo)\n yield takeLatest(SAVE_VROOM_TOKEN, saveVroomToken)\n}\n\nexport default lobby","import { fork } from 'redux-saga/effects'\nimport startup from './startup'\nimport authentication from './authentication'\nimport detectMobile from './detectMobile'\nimport lobby from './lobby';\n\nfunction* rootSata() {\n\n yield fork(startup);\n yield fork(detectMobile)\n //except https://mon-ts.truevirtualworld.com:8443\n if (window.location.pathname.split('/')[1] === 'lobbymanager') {\n yield fork(authentication)\n }\n yield fork(lobby)\n}\n\nexport default rootSata;","import React, { useEffect } from 'react'\nimport { Modal, Button } from 'antd'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { translate } from 'react-i18next'\nimport { isEmpty } from 'lodash'\nimport { HIDE_POPUP } from '../redux/actions/type'\n\nconst PopupInfo = ({ t }) => {\n const popup = useSelector(state => state.popup)\n const dispatch = useDispatch()\n const {\n isShow,\n textHeader,\n textBody,\n textButton,\n action\n } = popup\n const onAction = () => {\n if (isEmpty(action)) {\n dispatch({\n type: HIDE_POPUP,\n payload: {\n isShow: false\n }\n })\n } else {\n window.location.href = action\n }\n }\n useEffect(() => {\n\n }, [popup])\n return (\n <>\n \n \n
}\n >\n \n \n \n )\n}\n\nexport default translate()(PopupInfo)","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './style/style.css'\nimport './style/participant.css'\nimport 'antd/dist/antd.css'; // or 'antd/dist/antd.less'\nimport './i18n'\nimport Router from './route/index';\nimport * as serviceWorker from './serviceWorker';\nimport { BrowserRouter } from 'react-router-dom'\nimport { Provider } from 'react-redux'\nimport { createStore, applyMiddleware, compose } from 'redux'\nimport rootReducer from './redux/reducers'\nimport createSagaMiddleware from 'redux-saga'\nimport rootSaga from './redux/sagas'\nimport PopupInfo from './shared/PopupInfo'\nimport VConsole from 'vconsole';\n\nif (window._env_.APP_ENV === 'test3') {\n const vConsole = new VConsole();\n vConsole.setOption({ maxLogNumber: 5000 });\n}\n\nconst sagaMiddleware = createSagaMiddleware()\nconst composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst store = createStore(\n rootReducer,\n composeEnhancer(applyMiddleware(sagaMiddleware))\n)\n\nsagaMiddleware.run(rootSaga)\n\n\nconst AppWithRouter = () => (\n \n \n \n \n)\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}